Bump to head

This commit is contained in:
InsanityAutomation
2019-04-28 01:07:02 -04:00
parent 335140e621
commit a85ba9ab3f
121 changed files with 2109 additions and 1141 deletions
+1 -1
View File
@@ -453,7 +453,7 @@
#define TEMP_SENSOR_BED 0
#endif
#define TEMP_SENSOR_CHAMBER 0
#define CHAMBER_HEATER_PIN -1 // On/off pin for enclosure heating system
#define HEATER_CHAMBER_PIN -1 // On/off pin for enclosure heating system
// Dummy thermistor constant temperature readings, for use with 998 and 999
#define DUMMY_THERMISTOR_998_VALUE 25
+12 -12
View File
@@ -739,24 +739,24 @@
#endif // !USBCON && (UBRRH || UBRR0H || UBRR1H || UBRR2H || UBRR3H)
#ifdef INTERNAL_SERIAL_PORT
#if defined(INTERNAL_SERIAL_PORT)
ISR(SERIAL_REGNAME(USART,INTERNAL_SERIAL_PORT,_RX_vect)) {
MarlinSerial<MarlinInternalSerialCfg<INTERNAL_SERIAL_PORT>>::store_rxd_char();
}
ISR(SERIAL_REGNAME(USART,INTERNAL_SERIAL_PORT,_RX_vect)) {
MarlinSerial<MarlinInternalSerialCfg<INTERNAL_SERIAL_PORT>>::store_rxd_char();
}
ISR(SERIAL_REGNAME(USART,INTERNAL_SERIAL_PORT,_UDRE_vect)) {
MarlinSerial<MarlinInternalSerialCfg<INTERNAL_SERIAL_PORT>>::_tx_udr_empty_irq();
}
ISR(SERIAL_REGNAME(USART,INTERNAL_SERIAL_PORT,_UDRE_vect)) {
MarlinSerial<MarlinInternalSerialCfg<INTERNAL_SERIAL_PORT>>::_tx_udr_empty_irq();
}
// Preinstantiate
template class MarlinSerial<MarlinInternalSerialCfg<INTERNAL_SERIAL_PORT>>;
// Preinstantiate
template class MarlinSerial<MarlinInternalSerialCfg<INTERNAL_SERIAL_PORT>>;
// Instantiate
MarlinSerial<MarlinInternalSerialCfg<INTERNAL_SERIAL_PORT>> internalSerial;
// Instantiate
MarlinSerial<MarlinInternalSerialCfg<INTERNAL_SERIAL_PORT>> internalSerial;
#endif
// For AT90USB targets use the UART for BT interfacing
#if defined(USBCON) && ENABLED(BLUETOOTH)
HardwareSerial bluetoothSerial;
+1 -1
View File
@@ -276,7 +276,7 @@
#endif // !USBCON
#if defined(INTERNAL_SERIAL_PORT)
#ifdef INTERNAL_SERIAL_PORT
template <uint8_t serial>
struct MarlinInternalSerialCfg {
static constexpr int PORT = serial;
+2 -2
View File
@@ -38,7 +38,7 @@ void watchdog_init() {
#define WDTO_NS WDTO_4S
#endif
#if ENABLED(WATCHDOG_RESET_MANUAL)
// We enable the watchdog timer, but only for the interrupt.
// Enable the watchdog timer, but only for the interrupt.
// Take care, as this requires the correct order of operation, with interrupts disabled.
// See the datasheet of any AVR chip for details.
wdt_reset();
@@ -65,7 +65,7 @@ void watchdog_init() {
SERIAL_ERROR_MSG(MSG_WATCHDOG_FIRED);
minkill(); // interrupt-safe final kill and infinite loop
}
#endif // WATCHDOG_RESET_MANUAL
#endif
#endif // USE_WATCHDOG
#endif // __AVR__
+40 -4
View File
@@ -53,7 +53,7 @@
// Public functions
// --------------------------------------------------------------------------
#if ENABLED(DUE_SOFTWARE_SPI)
#if EITHER(DUE_SOFTWARE_SPI, FORCE_SOFT_SPI)
// --------------------------------------------------------------------------
// software SPI
@@ -739,7 +739,42 @@
#define SPI_MODE_2_DUE_HW 0
#define SPI_MODE_3_DUE_HW 1
/**
* The DUE SPI controller is set up so the upper word of the longword
* written to the transmit data register selects which SPI Chip Select
* Register is used. This allows different streams to have different SPI
* settings.
*
* In practice it's spooky. Some combinations hang the system, while others
* upset the peripheral device.
*
* SPI mode should be the same for all streams. The FYSETC_MINI_12864 gets
* upset if the clock phase changes after chip select goes active.
*
* SPI_CSR_CSAAT should be set for all streams. If not the WHILE_TX(0)
* macro returns immediately which can result in the SPI chip select going
* inactive before all the data has been sent.
*
* The TMC2130 library uses SPI0->SPI_CSR[3].
*
* The U8G hardware SPI uses SPI0->SPI_CSR[0]. The system hangs and/or the
* FYSETC_MINI_12864 gets upset if lower baud rates are used and the SD card
* is inserted or removed.
*
* The SD card uses SPI0->SPI_CSR[3]. Efforts were made to use [1] and [2]
* but they all resulted in hangs or garbage on the LCD.
*
* The SPI controlled chip selects are NOT enabled in the GPIO controller.
* The application must control the chip select.
*
* All of the above can be avoided by defining FORCE_SOFT_SPI to force the
* display to use software SPI.
*
*/
void spiInit(uint8_t spiRate=6) { // Default to slowest rate if not specified)
// Also sets U8G SPI rate to 4MHz and the SPI mode to 3
// 8.4 MHz, 4 MHz, 2 MHz, 1 MHz, 0.5 MHz, 0.329 MHz, 0.329 MHz
constexpr int spiDivider[] = { 10, 21, 42, 84, 168, 255, 255 };
if (spiRate > 6) spiRate = 1;
@@ -760,15 +795,16 @@
// TMC2103 compatible setup
// Master mode, no fault detection, PCS bits in data written to TDR select CSR register
SPI0->SPI_MR = SPI_MR_MSTR | SPI_MR_PS | SPI_MR_MODFDIS;
// SPI mode 0, 8 Bit data transfer, baud rate
SPI0->SPI_CSR[3] = SPI_CSR_SCBR(spiDivider[spiRate]) | SPI_CSR_CSAAT | SPI_MODE_0_DUE_HW; // use same CSR as TMC2130
// SPI mode 3, 8 Bit data transfer, baud rate
SPI0->SPI_CSR[3] = SPI_CSR_SCBR(spiDivider[spiRate]) | SPI_CSR_CSAAT | SPI_MODE_3_DUE_HW; // use same CSR as TMC2130
SPI0->SPI_CSR[0] = SPI_CSR_SCBR(spiDivider[1]) | SPI_CSR_CSAAT | SPI_MODE_3_DUE_HW; // U8G default to 4MHz
}
void spiBegin() { spiInit(); }
static uint8_t spiTransfer(uint8_t data) {
WHILE_TX(0);
SPI0->SPI_TDR = (uint32_t)data | 0x00070000UL; // Add TMC2130 PCS bits to every byte
SPI0->SPI_TDR = (uint32_t)data | 0x00070000UL; // Add TMC2130 PCS bits to every byte (use SPI0->SPI_CSR[3])
WHILE_TX(0);
WHILE_RX(0);
return SPI0->SPI_RDR;
@@ -99,7 +99,7 @@ static void u8g_com_DUE_st7920_write_byte_sw_spi(uint8_t rs, uint8_t val) {
spiSend_sw_DUE(rs ? 0x0FA : 0x0F8); // Command or Data
DELAY_US(40); // give the controller some time to process the data: 20 is bad, 30 is OK, 40 is safe
}
spiSend_sw_DUE(val & 0x0F0);
spiSend_sw_DUE(val & 0xF0);
spiSend_sw_DUE(val << 4);
}
@@ -168,6 +168,42 @@ uint8_t u8g_com_HAL_DUE_ST7920_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_va
return 1;
}
#endif // HAS_GRAPHICAL_LCD
#if ENABLED(LIGHTWEIGHT_UI)
#include "../../lcd/ultralcd.h"
#include "../shared/HAL_ST7920.h"
#define ST7920_CS_PIN LCD_PINS_RS
#if DOGM_SPI_DELAY_US > 0
#define U8G_DELAY() DELAY_US(DOGM_SPI_DELAY_US)
#else
#define U8G_DELAY() DELAY_US(10)
#endif
void ST7920_cs() {
WRITE(ST7920_CS_PIN, HIGH);
U8G_DELAY();
}
void ST7920_ncs() {
WRITE(ST7920_CS_PIN, LOW);
}
void ST7920_set_cmd() {
spiSend_sw_DUE(0xF8);
DELAY_US(40);
}
void ST7920_set_dat() {
spiSend_sw_DUE(0xFA);
DELAY_US(40);
}
void ST7920_write_byte(const uint8_t val) {
spiSend_sw_DUE(val & 0xF0);
spiSend_sw_DUE(val << 4);
}
#endif // LIGHTWEIGHT_UI
#endif // HAS_GRAPHICAL_LCD
#endif // ARDUINO_ARCH_SAM
@@ -1,6 +1,6 @@
/**
* Marlin 3D Printer Firmware
* Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
* Copyright (C) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
+17 -6
View File
@@ -117,7 +117,7 @@ void HAL_idletask(void) {
void HAL_clear_reset_source(void) { }
uint8_t HAL_get_reset_source (void) {
uint8_t HAL_get_reset_source(void) {
return rtc_get_reset_reason(1);
}
@@ -133,12 +133,16 @@ int freeMemory() {
// --------------------------------------------------------------------------
// ADC
// --------------------------------------------------------------------------
#define ADC1_CHANNEL(pin) ADC1_GPIO##pin_CHANNEL
#define ADC1_CHANNEL(pin) ADC1_GPIO ## pin ## _CHANNEL
adc1_channel_t get_channel(int pin) {
switch (pin) {
case 36: return ADC1_GPIO36_CHANNEL;
case 39: return ADC1_GPIO39_CHANNEL;
case 39: return ADC1_CHANNEL(39);
case 36: return ADC1_CHANNEL(36);
case 35: return ADC1_CHANNEL(35);
case 34: return ADC1_CHANNEL(34);
case 33: return ADC1_CHANNEL(33);
case 32: return ADC1_CHANNEL(32);
}
return ADC1_CHANNEL_MAX;
@@ -147,14 +151,21 @@ adc1_channel_t get_channel(int pin) {
void HAL_adc_init() {
// Configure ADC
adc1_config_width(ADC_WIDTH_12Bit);
adc1_config_channel_atten(get_channel(36), ADC_ATTEN_11db);
adc1_config_channel_atten(get_channel(39), ADC_ATTEN_11db);
adc1_config_channel_atten(get_channel(36), ADC_ATTEN_11db);
adc1_config_channel_atten(get_channel(35), ADC_ATTEN_11db);
adc1_config_channel_atten(get_channel(34), ADC_ATTEN_11db);
adc1_config_channel_atten(get_channel(33), ADC_ATTEN_11db);
adc1_config_channel_atten(get_channel(32), ADC_ATTEN_11db);
// Note that adc2 is shared with the WiFi module, which has higher priority, so the conversion may fail.
// That's why we're not setting it up here.
// Calculate ADC characteristics i.e. gain and offset factors
esp_adc_cal_characterize(ADC_UNIT_1, ADC_ATTEN_DB_11, ADC_WIDTH_BIT_12, V_REF, &characteristics);
}
void HAL_adc_start_conversion (uint8_t adc_pin) {
void HAL_adc_start_conversion(uint8_t adc_pin) {
uint32_t mv;
esp_adc_cal_get_voltage((adc_channel_t)get_channel(adc_pin), &characteristics, &mv);
+7 -2
View File
@@ -30,13 +30,18 @@
#include <stdint.h>
// these are going to be re-defined in Arduino.h
#undef DISABLED
#undef M_PI
#undef _BV
#include <Arduino.h>
// revert back to the correct (old) definition
#undef DISABLED
#define DISABLED(V...) DO(DIS,&&,V)
// re-define in case Arduino.h has been skipped due to earlier inclusion (i.e. in Marlin\src\HAL\HAL_ESP32\i2s.cpp)
#define _BV(b) (1UL << (b))
#include "../shared/math_32bit.h"
#include "../shared/HAL_SPI.h"
@@ -97,7 +102,7 @@ extern uint16_t HAL_adc_result;
void HAL_clear_reset_source (void);
// reset reason
uint8_t HAL_get_reset_source (void);
uint8_t HAL_get_reset_source(void);
void _delay_ms(int delay);
@@ -120,7 +125,7 @@ void HAL_adc_init(void);
#define HAL_READ_ADC() HAL_adc_result
#define HAL_ADC_READY() true
void HAL_adc_start_conversion (uint8_t adc_pin);
void HAL_adc_start_conversion(uint8_t adc_pin);
#define GET_PIN_MAP_PIN(index) index
#define GET_PIN_MAP_INDEX(pin) pin
+96 -177
View File
@@ -1,6 +1,6 @@
/**
* Marlin 3D Printer Firmware
* Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
* Copyright (C) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
@@ -21,213 +21,132 @@
*/
#ifdef ARDUINO_ARCH_ESP32
#include "../../inc/MarlinConfig.h"
#include "../../inc/MarlinConfigPre.h"
#if ENABLED(WIFISUPPORT)
#include "WebSocketSerial.h"
extern WebSocketSerial webSocketSerial;
#include "wifi.h"
#include <AsyncTCP.h>
#include <ESPAsyncWebServer.h>
struct ring_buffer_r {
unsigned char buffer[RX_BUFFER_SIZE];
volatile ring_buffer_pos_t head, tail;
};
WebSocketSerial webSocketSerial;
AsyncWebSocket ws("/ws"); // TODO Move inside the class.
struct ring_buffer_t {
unsigned char buffer[256];
volatile uint8_t head, tail;
};
// RingBuffer impl
ring_buffer_r rx_buffer = { { 0 }, 0, 0 };
ring_buffer_t tx_buffer = { { 0 }, 0, 0 };
#define NEXT_INDEX(I, SIZE) ((I + 1) & (ring_buffer_pos_t)(SIZE - 1))
static bool _written;
RingBuffer::RingBuffer(ring_buffer_pos_t size)
: data(new uint8_t[size]),
read_index(0),
write_index(0),
size(size)
{}
#if ENABLED(EMERGENCY_PARSER)
static EmergencyParser::State emergency_state; // = EP_RESET
#endif
RingBuffer::~RingBuffer() { delete[] data; }
AsyncWebSocket ws("/ws"); // access at ws://[esp ip]/ws
ring_buffer_pos_t RingBuffer::write(const uint8_t c) {
const ring_buffer_pos_t n = NEXT_INDEX(write_index, size);
FORCE_INLINE int next_rx_index(const int i) { return (ring_buffer_pos_t)(i + 1) & (ring_buffer_pos_t)(RX_BUFFER_SIZE - 1); }
FORCE_INLINE int next_tx_index(const int i) { return (ring_buffer_pos_t)(i + 1) & (ring_buffer_pos_t)(TX_BUFFER_SIZE - 1); }
static void addToBuffer(uint8_t * const data, const size_t len) {
for (size_t i = 0; i < len; i++) {
ring_buffer_pos_t h = rx_buffer.head;
const ring_buffer_pos_t t = rx_buffer.tail, n = next_rx_index(h);
if (n != t) { rx_buffer.buffer[h] = data[i]; h = n; }
// TODO: buffer is full, handle?
rx_buffer.head = h;
if (n != read_index) {
this->data[write_index] = c;
write_index = n;
return 1;
}
// TODO: buffer is full, handle?
return 0;
}
// Handle WebSocket event
static void onEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len) {
switch (type) {
case WS_EVT_CONNECT: client->ping(); break; // client connected
case WS_EVT_DISCONNECT: // client disconnected
case WS_EVT_ERROR: // error was received from the other end
case WS_EVT_PONG: break; // pong message was received (in response to a ping request maybe)
case WS_EVT_DATA: { // data packet
AwsFrameInfo * info = (AwsFrameInfo*)arg;
if (info->opcode == WS_TEXT || info->message_opcode == WS_TEXT)
addToBuffer(data, len);
}
ring_buffer_pos_t RingBuffer::write(const uint8_t *buffer, ring_buffer_pos_t size) {
ring_buffer_pos_t written = 0;
for (ring_buffer_pos_t i = 0; i < size; i++) {
written += write(buffer[i]);
}
return written;
}
// Public Methods
int RingBuffer::available(void) {
return (size - read_index + write_index) & (size - 1);
}
int RingBuffer::peek(void) {
return available() ? data[read_index] : -1;
}
int RingBuffer::read(void) {
if (available()) {
const int ret = data[read_index];
read_index = NEXT_INDEX(read_index, size);
return ret;
}
return -1;
}
ring_buffer_pos_t RingBuffer::read(uint8_t *buffer) {
ring_buffer_pos_t len = available();
for(ring_buffer_pos_t i = 0; read_index != write_index; i++) {
buffer[i] = data[read_index];
read_index = NEXT_INDEX(read_index, size);
}
return len;
}
void RingBuffer::flush(void) { read_index = write_index; }
// WebSocketSerial impl
WebSocketSerial::WebSocketSerial()
: rx_buffer(RingBuffer(RX_BUFFER_SIZE)),
tx_buffer(RingBuffer(TX_BUFFER_SIZE))
{}
void WebSocketSerial::begin(const long baud_setting) {
ws.onEvent(onEvent);
server.addHandler(&ws); // attach AsyncWebSocket
ws.onEvent([this](AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) {
switch (type) {
case WS_EVT_CONNECT: client->ping(); break; // client connected
case WS_EVT_DISCONNECT: // client disconnected
case WS_EVT_ERROR: // error was received from the other end
case WS_EVT_PONG: break; // pong message was received (in response to a ping request maybe)
case WS_EVT_DATA: { // data packet
AwsFrameInfo * info = (AwsFrameInfo*)arg;
if (info->opcode == WS_TEXT || info->message_opcode == WS_TEXT)
this->rx_buffer.write(data, len);
}
}
});
server.addHandler(&ws);
}
void WebSocketSerial::end() { }
int WebSocketSerial::peek(void) { return rx_buffer.peek(); }
int WebSocketSerial::read(void) { return rx_buffer.read(); }
int WebSocketSerial::available(void) { return rx_buffer.available(); }
void WebSocketSerial::flush(void) { rx_buffer.flush(); }
int WebSocketSerial::peek(void) {
const int v = rx_buffer.head == rx_buffer.tail ? -1 : rx_buffer.buffer[rx_buffer.tail];
return v;
}
size_t WebSocketSerial::write(const uint8_t c) {
size_t ret = tx_buffer.write(c);
int WebSocketSerial::read(void) {
const ring_buffer_pos_t h = rx_buffer.head, t = rx_buffer.tail;
if (h == t) return -1; // Nothing to read? Return now
const int v = rx_buffer.buffer[t];
rx_buffer.tail = (ring_buffer_pos_t)(t + 1) & (RX_BUFFER_SIZE - 1); // Advance tail
return v;
}
bool WebSocketSerial::available(void) {
const ring_buffer_pos_t h = rx_buffer.head, t = rx_buffer.tail;
return (ring_buffer_pos_t)(RX_BUFFER_SIZE + h - t) & (RX_BUFFER_SIZE - 1);
}
void WebSocketSerial::flush(void) {
ws.textAll("flush");
rx_buffer.tail = rx_buffer.head;
}
#if TX_BUFFER_SIZE
void WebSocketSerial::write(const uint8_t c) {
_written = true;
const uint8_t i = (tx_buffer.head + 1) & (TX_BUFFER_SIZE - 1);
// Store new char. head is always safe to move
tx_buffer.buffer[tx_buffer.head] = c;
tx_buffer.head = i;
if (c == '\n') {
ws.textAll(tx_buffer.buffer, tx_buffer.head);
tx_buffer.head = 0;
}
if (ret && c == '\n') {
uint8_t tmp[TX_BUFFER_SIZE];
ring_buffer_pos_t size = tx_buffer.read(tmp);
ws.textAll(tmp, size);
}
void WebSocketSerial::flushTx(void) {
ws.textAll("flushTx");
if (!_written) return;
}
#else
//void WebSocketSerial::write(const uint8_t c) { _written = true; }
//void WebSocketSerial::flushTx(void) { if (!_written) return; }
#endif
/**
* Imports from print.h
*/
void WebSocketSerial::print(char c, int base) { print((long)c, base); }
void WebSocketSerial::print(unsigned char b, int base) { print((unsigned long)b, base); }
void WebSocketSerial::print(int n, int base) { print((long)n, base); }
void WebSocketSerial::print(unsigned int n, int base) { print((unsigned long)n, base); }
void WebSocketSerial::print(long n, int base) {
if (base == 0)
write(n);
else if (base == 10) {
if (n < 0) { print('-'); n = -n; }
printNumber(n, 10);
}
else
printNumber(n, base);
return ret;
}
void WebSocketSerial::print(unsigned long n, int base) {
if (base == 0) write(n); else printNumber(n, base);
size_t WebSocketSerial::write(const uint8_t* buffer, size_t size) {
size_t written = 0;
for(size_t i = 0; i < size; i++) {
written += write(buffer[i]);
}
return written;
}
void WebSocketSerial::print(double n, int digits) { printFloat(n, digits); }
void WebSocketSerial::println(void) { print('\r'); print('\n'); }
void WebSocketSerial::println(const String& s) { print(s); println(); }
void WebSocketSerial::println(const char c[]) { print(c); println(); }
void WebSocketSerial::println(char c, int base) { print(c, base); println(); }
void WebSocketSerial::println(unsigned char b, int base) { print(b, base); println(); }
void WebSocketSerial::println(int n, int base) { print(n, base); println(); }
void WebSocketSerial::println(unsigned int n, int base) { print(n, base); println(); }
void WebSocketSerial::println(long n, int base) { print(n, base); println(); }
void WebSocketSerial::println(unsigned long n, int base) { print(n, base); println(); }
void WebSocketSerial::println(double n, int digits) { print(n, digits); println(); }
// Private Methods
void WebSocketSerial::printNumber(unsigned long n, uint8_t base) {
if (n) {
unsigned char buf[8 * sizeof(long)]; // Enough space for base 2
int8_t i = 0;
while (n) {
buf[i++] = n % base;
n /= base;
}
while (i--)
print((char)(buf[i] + (buf[i] < 10 ? '0' : 'A' - 10)));
}
else
print('0');
}
void WebSocketSerial::printFloat(double number, uint8_t digits) {
// Handle negative numbers
if (number < 0.0) { print('-'); number = -number; }
// Round correctly so that print(1.999, 2) prints as "2.00"
// Use a lookup table for performance
constexpr double rounds[] = { 0.5, 0.05, 0.005, 0.0005, 0.00005, 0.000005, 0.0000005, 0.00000005 };
number += rounds[digits];
//number += pow(10, -(digits + 1)); // slower single-line equivalent
// Extract the integer part of the number and print it
unsigned long int_part = (unsigned long)number;
print(int_part);
// Print the decimal point, but only if there are digits beyond
double remainder = number - (double)int_part;
if (digits) {
print('.');
// Extract digits from the remainder one at a time
while (digits--) {
remainder *= 10.0;
const int toPrint = int(remainder);
print(toPrint);
remainder -= toPrint;
}
}
void WebSocketSerial::flushTX(void) {
// No need to do anything as there's no benefit to sending partial lines over the websocket connection.
}
#endif // WIFISUPPORT
+38 -53
View File
@@ -1,6 +1,6 @@
/**
* Marlin 3D Printer Firmware
* Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
* Copyright (C) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
@@ -23,12 +23,7 @@
#include "../../inc/MarlinConfig.h"
#include <WString.h>
#define DEC 10
#define HEX 16
#define OCT 8
#define BIN 2
#include "Stream.h"
#ifndef RX_BUFFER_SIZE
#define RX_BUFFER_SIZE 128
@@ -40,60 +35,50 @@
#error "TX_BUFFER_SIZE is required for the WebSocket."
#endif
#if RX_BUFFER_SIZE > 256
typedef uint16_t ring_buffer_pos_t;
#else
typedef uint8_t ring_buffer_pos_t;
#endif
typedef uint16_t ring_buffer_pos_t;
class RingBuffer {
uint8_t *data;
ring_buffer_pos_t size, read_index, write_index;
class WebSocketSerial {
public:
WebSocketSerial() {};
static void begin(const long);
static void end();
static int peek(void);
static int read(void);
static void flush(void);
static void flushTx(void);
static bool available(void);
static void write(const uint8_t c);
RingBuffer(ring_buffer_pos_t size);
~RingBuffer();
int available(void);
int peek(void);
int read(void);
ring_buffer_pos_t read(uint8_t *buffer);
void flush(void);
ring_buffer_pos_t write(const uint8_t c);
ring_buffer_pos_t write(const uint8_t* buffer, ring_buffer_pos_t size);
};
class WebSocketSerial: public Stream {
RingBuffer rx_buffer;
RingBuffer tx_buffer;
public:
WebSocketSerial();
void begin(const long);
void end();
int available(void);
int peek(void);
int read(void);
void flush(void);
void flushTX(void);
size_t write(const uint8_t c);
size_t write(const uint8_t* buffer, size_t size);
operator bool() { return true; }
#if ENABLED(SERIAL_STATS_DROPPED_RX)
FORCE_INLINE static uint32_t dropped() { return 0; }
FORCE_INLINE uint32_t dropped() { return 0; }
#endif
#if ENABLED(SERIAL_STATS_MAX_RX_QUEUED)
FORCE_INLINE static int rxMaxEnqueued() { return 0; }
FORCE_INLINE int rxMaxEnqueued() { return 0; }
#endif
FORCE_INLINE static void write(const char* str) { while (*str) write(*str++); }
FORCE_INLINE static void write(const uint8_t* buffer, size_t size) { while (size--) write(*buffer++); }
FORCE_INLINE static void print(const String& s) { for (int i = 0; i < (int)s.length(); i++) write(s[i]); }
FORCE_INLINE static void print(const char* str) { write(str); }
static void print(char, int = 0);
static void print(unsigned char, int = 0);
static void print(int, int = DEC);
static void print(unsigned int, int = DEC);
static void print(long, int = DEC);
static void print(unsigned long, int = DEC);
static void print(double, int = 2);
static void println(const String& s);
static void println(const char[]);
static void println(char, int = 0);
static void println(unsigned char, int = 0);
static void println(int, int = DEC);
static void println(unsigned int, int = DEC);
static void println(long, int = DEC);
static void println(unsigned long, int = DEC);
static void println(double, int = 2);
static void println(void);
operator bool() { return true; }
private:
static void printNumber(unsigned long, const uint8_t);
static void printFloat(double, uint8_t);
};
extern WebSocketSerial webSocketSerial;
+9 -4
View File
@@ -27,6 +27,10 @@
* Utility functions
*/
// I2S expander pin mapping.
#define IS_I2S_EXPANDER_PIN(IO) TEST(IO, 7)
#define I2S_EXPANDER_PIN_INDEX(IO) (IO & 0x7F)
// Set pin as input
#define _SET_INPUT(IO) pinMode(IO, INPUT)
@@ -37,10 +41,10 @@
#define _PULLUP(IO, v) pinMode(IO, v ? INPUT_PULLUP : INPUT)
// Read a pin wrapper
#define READ(IO) digitalRead(IO)
#define READ(IO) (IS_I2S_EXPANDER_PIN(IO) ? i2s_state(I2S_EXPANDER_PIN_INDEX(IO)) : digitalRead(IO))
// Write to a pin wrapper
#define WRITE(IO, v) (TEST(IO, 7) ? i2s_write(IO & 0x7F, v) : digitalWrite(IO, v))
#define WRITE(IO, v) (IS_I2S_EXPANDER_PIN(IO) ? i2s_write(I2S_EXPANDER_PIN_INDEX(IO), v) : digitalWrite(IO, v))
// Set pin as input wrapper
#define SET_INPUT(IO) _SET_INPUT(IO)
@@ -61,8 +65,9 @@
#define extDigitalRead(IO) digitalRead(IO)
#define extDigitalWrite(IO,V) digitalWrite(IO,V)
#define PWM_PIN(P) true
#define USEABLE_HARDWARE_PWM(P) PWM_PIN(P)
// PWM outputs
#define PWM_PIN(P) (P < 34) // NOTE Pins >= 34 are input only on ESP32, so they can't be used for output.
#define USEABLE_HARDWARE_PWM(P) (!IS_I2S_EXPANDER_PIN(P) && PWM_PIN(P))
// Toggle pin value
#define TOGGLE(IO) WRITE(IO, !READ(IO))
+13 -4
View File
@@ -21,7 +21,12 @@
*/
#ifdef ARDUINO_ARCH_ESP32
#include <Arduino.h> // replace that with the proper imports
// replace that with the proper imports, then cleanup workarounds in Marlin\src\HAL\HAL_ESP32\HAL.h
#include <Arduino.h>
// revert back to the correct definition
#undef DISABLED
#define DISABLED(V...) DO(DIS,&&,V)
#include "i2s.h"
#include "../../core/macros.h"
#include "driver/periph_ctrl.h"
@@ -303,9 +308,9 @@ int i2s_init() {
xTaskCreate(stepperTask, "StepperTask", 10000, NULL, 1, NULL);
// Route the i2s pins to the appropriate GPIO
gpio_matrix_out_check(22, I2S0O_DATA_OUT23_IDX, 0, 0);
gpio_matrix_out_check(25, I2S0O_WS_OUT_IDX, 0, 0);
gpio_matrix_out_check(26, I2S0O_BCK_OUT_IDX, 0, 0);
gpio_matrix_out_check(I2S_DATA, I2S0O_DATA_OUT23_IDX, 0, 0);
gpio_matrix_out_check(I2S_BCK, I2S0O_BCK_OUT_IDX, 0, 0);
gpio_matrix_out_check(I2S_WS, I2S0O_WS_OUT_IDX, 0, 0);
// Start the I2S peripheral
return i2s_start(I2S_NUM_0);
@@ -315,6 +320,10 @@ void i2s_write(uint8_t pin, uint8_t val) {
SET_BIT_TO(i2s_port_data, pin, val);
}
uint8_t i2s_state(uint8_t pin) {
return TEST(i2s_port_data, pin);
}
void i2s_push_sample() {
dma.current[dma.rw_pos++] = i2s_port_data;
}
+8
View File
@@ -26,6 +26,14 @@ extern uint32_t i2s_port_data;
int i2s_init();
uint8_t i2s_state(uint8_t pin);
void i2s_write(uint8_t pin, uint8_t val);
void i2s_push_sample();
// pin definitions
#define I2S_WS 25
#define I2S_BCK 26
#define I2S_DATA 27
+1 -1
View File
@@ -18,7 +18,7 @@
*/
#pragma once
#define SS_PIN 5
#define SS_PIN SDSS
#define SCK_PIN 18
#define MISO_PIN 19
#define MOSI_PIN 23
+5 -2
View File
@@ -1,7 +1,9 @@
/**
* Marlin 3D Printer Firmware
* Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
* Copyright (c) 2016 Bob Cousins bobcousins42@googlemail.com
* Copyright (C) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -15,6 +17,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifdef ARDUINO_ARCH_ESP32
+5 -2
View File
@@ -1,7 +1,9 @@
/**
* Marlin 3D Printer Firmware
* Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
* Copyright (c) 2016 Bob Cousins bobcousins42@googlemail.com
* Copyright (C) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -15,6 +17,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
+5 -2
View File
@@ -1,7 +1,9 @@
/**
* Marlin 3D Printer Firmware
* Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
* Copyright (c) 2016 Bob Cousins bobcousins42@googlemail.com
* Copyright (C) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -15,6 +17,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifdef ARDUINO_ARCH_ESP32
+5 -2
View File
@@ -1,7 +1,9 @@
/**
* Marlin 3D Printer Firmware
* Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
* Copyright (c) 2016 Bob Cousins bobcousins42@googlemail.com
* Copyright (C) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -15,6 +17,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
+3
View File
@@ -147,6 +147,9 @@ using FilteredADC = LPC176x::ADC<ADC_LOWPASS_K_VALUE, ADC_MEDIAN_FILTER_SIZE>;
#define HAL_READ_ADC() FilteredADC::get_result()
#define HAL_ADC_READY() FilteredADC::finished_conversion()
// A grace period for the ADC readings to stabilize before they start causing thermal protection errors.
#define THERMAL_PROTECTION_GRACE_PERIOD 800
// Parse a G-code word into a pin index
int16_t PARSED_PIN_INDEX(const char code, const int16_t dval);
// P0.6 thru P0.9 are for the onboard SD card
+1 -6
View File
@@ -66,12 +66,7 @@
#endif
#endif // SPINDLE_LASER_ENABLE
#if ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER) && HAS_DRIVER(TMC2130) && DISABLED(TMC_USE_SW_SPI) \
&& (MB(RAMPS_14_RE_ARM_EFB) \
|| MB(RAMPS_14_RE_ARM_EEB) \
|| MB(RAMPS_14_RE_ARM_EFF) \
|| MB(RAMPS_14_RE_ARM_EEF) \
|| MB(RAMPS_14_RE_ARM_SF))
#if IS_RE_ARM_BOARD && ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER) && HAS_DRIVER(TMC2130) && DISABLED(TMC_USE_SW_SPI)
#error "Re-ARM with REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER and TMC2130 require TMC_USE_SW_SPI"
#endif
+21
View File
@@ -1,3 +1,24 @@
/**
* Marlin 3D Printer Firmware
* Copyright (C) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifdef TARGET_LPC1768
#include <usb/usb.h>
@@ -137,8 +137,11 @@ uint8_t u8g_com_HAL_LPC1768_ssd_hw_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_v
case U8G_COM_MSG_WRITE_BYTE:
//u8g->pin_list[U8G_PI_SET_A0] = 1;
//if (u8g_com_arduino_ssd_start_sequence(u8g) == 0)
// return u8g_i2c_stop(), 0;
if (u8g_com_ssd_I2C_start_sequence(u8g) == 0) {
u8g_i2c_stop();
return 0;
}
if (u8g_i2c_send_byte(arg_val) == 0) {
u8g_i2c_stop();
return 0;
@@ -186,9 +189,6 @@ uint8_t u8g_com_HAL_LPC1768_ssd_hw_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_v
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
u8g->pin_list[U8G_PI_A0_STATE] = arg_val;
u8g->pin_list[U8G_PI_SET_A0] = 1; /* force a0 to set again */
u8g_i2c_start(0); // send slave address and write bit
u8g_i2c_send_byte(arg_val ? 0x40 : 0x80); // Write to ? Graphics DRAM mode : Command mode
break;
} // switch
@@ -65,10 +65,76 @@
#undef SPI_SPEED
#define SPI_SPEED 2 // About 2 MHz
#include <algorithm>
#include <LPC17xx.h>
#include <gpio.h>
#include <Arduino.h>
uint8_t swSpiTransfer_mode_0(uint8_t b, const uint8_t spi_speed, const pin_t sck_pin, const pin_t miso_pin, const pin_t mosi_pin ) {
for (uint8_t i = 0; i < 8; i++) {
if (spi_speed == 0) {
gpio_set(mosi_pin, !!(b & 0x80));
gpio_set(sck_pin, HIGH);
b <<= 1;
if (miso_pin >= 0 && gpio_get(miso_pin)) b |= 1;
gpio_set(sck_pin, LOW);
}
else {
const uint8_t state = (b & 0x80) ? HIGH : LOW;
for (uint8_t j = 0; j < spi_speed; j++)
gpio_set(mosi_pin, state);
for (uint8_t j = 0; j < spi_speed + (miso_pin >= 0 ? 0 : 1); j++)
gpio_set(sck_pin, HIGH);
b <<= 1;
if (miso_pin >= 0 && gpio_get(miso_pin)) b |= 1;
for (uint8_t j = 0; j < spi_speed; j++)
gpio_set(sck_pin, LOW);
}
}
return b;
}
uint8_t swSpiTransfer_mode_3(uint8_t b, const uint8_t spi_speed, const pin_t sck_pin, const pin_t miso_pin, const pin_t mosi_pin ) {
for (uint8_t i = 0; i < 8; i++) {
const uint8_t state = (b & 0x80) ? HIGH : LOW;
if (spi_speed == 0) {
gpio_set(sck_pin, LOW);
gpio_set(mosi_pin, state);
gpio_set(mosi_pin, state); // need some setup time
gpio_set(sck_pin, HIGH);
}
else {
for (uint8_t j = 0; j < spi_speed + (miso_pin >= 0 ? 0 : 1); j++)
gpio_set(sck_pin, LOW);
for (uint8_t j = 0; j < spi_speed; j++)
gpio_set(mosi_pin, state);
for (uint8_t j = 0; j < spi_speed; j++)
gpio_set(sck_pin, HIGH);
}
b <<= 1;
if (miso_pin >= 0 && gpio_get(miso_pin)) b |= 1;
}
return b;
}
static uint8_t SPI_speed = 0;
static void u8g_sw_spi_HAL_LPC1768_shift_out(uint8_t dataPin, uint8_t clockPin, uint8_t val) {
swSpiTransfer(val, SPI_speed, clockPin, -1, dataPin);
#if ENABLED(FYSETC_MINI_12864)
swSpiTransfer_mode_3(val, SPI_speed, clockPin, -1, dataPin);
#else
swSpiTransfer_mode_0(val, SPI_speed, clockPin, -1, dataPin);
#endif
}
uint8_t u8g_com_HAL_LPC1768_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr) {
+1 -1
View File
@@ -120,7 +120,7 @@ void HAL_init(void) {
void HAL_clear_reset_source(void) { __HAL_RCC_CLEAR_RESET_FLAGS(); }
uint8_t HAL_get_reset_source (void) {
uint8_t HAL_get_reset_source(void) {
if (__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) != RESET) return RST_WATCHDOG;
if (__HAL_RCC_GET_FLAG(RCC_FLAG_SFTRST) != RESET) return RST_SOFTWARE;
if (__HAL_RCC_GET_FLAG(RCC_FLAG_PINRST) != RESET) return RST_EXTERNAL;
+1 -1
View File
@@ -165,7 +165,7 @@ void HAL_init(void);
void HAL_clear_reset_source (void);
/** reset reason */
uint8_t HAL_get_reset_source (void);
uint8_t HAL_get_reset_source(void);
void _delay_ms(const int delay);
@@ -1,50 +1,48 @@
/**
******************************************************************************
* @file EEPROM/EEPROM_Emulation/inc/eeprom.h
* @author MCD Application Team
* @version V1.2.6
* @date 04-November-2016
* @brief This file contains all the functions prototypes for the EEPROM
* emulation firmware library.
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright 2016 STMicroelectronics International N.V.
* All rights reserved.</center></h2>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted, provided that the following conditions are met:
*
* 1. Redistribution of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of other
* contributors to this software may be used to endorse or promote products
* derived from this software without specific written permission.
* 4. This software, including modifications and/or derivative works of this
* software, must execute solely and exclusively on microcontroller or
* microprocessor devices manufactured by or for STMicroelectronics.
* 5. Redistribution and use of this software other than as permitted under
* this license is void and will automatically terminate your rights under
* this license.
*
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
/******************************************************************************
* @file eeprom_emul.h
* @author MCD Application Team
* @version V1.2.6
* @date 04-November-2016
* @brief This file contains all the functions prototypes for the EEPROM
* emulation firmware library.
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright 2016 STMicroelectronics International N.V.
* All rights reserved.</center></h2>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted, provided that the following conditions are met:
*
* 1. Redistribution of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of other
* contributors to this software may be used to endorse or promote products
* derived from this software without specific written permission.
* 4. This software, including modifications and/or derivative works of this
* software, must execute solely and exclusively on microcontroller or
* microprocessor devices manufactured by or for STMicroelectronics.
* 5. Redistribution and use of this software other than as permitted under
* this license is void and will automatically terminate your rights under
* this license.
*
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************/
#pragma once
// --------------------------------------------------------------------------
+1 -1
View File
@@ -79,7 +79,7 @@ void sei(void) { interrupts(); }
void HAL_clear_reset_source(void) { __HAL_RCC_CLEAR_RESET_FLAGS(); }
uint8_t HAL_get_reset_source (void) {
uint8_t HAL_get_reset_source(void) {
if (__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) != RESET) return RST_WATCHDOG;
if (__HAL_RCC_GET_FLAG(RCC_FLAG_SFTRST) != RESET) return RST_SOFTWARE;
+1 -1
View File
@@ -170,7 +170,7 @@ extern uint16_t HAL_adc_result;
void HAL_clear_reset_source (void);
/** reset reason */
uint8_t HAL_get_reset_source (void);
uint8_t HAL_get_reset_source(void);
void _delay_ms(const int delay);
@@ -1,50 +1,48 @@
/**
******************************************************************************
* @file EEPROM/EEPROM_Emulation/inc/eeprom.h
* @author MCD Application Team
* @version V1.2.6
* @date 04-November-2016
* @brief This file contains all the functions prototypes for the EEPROM
* emulation firmware library.
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright © 2016 STMicroelectronics International N.V.
* All rights reserved.</center></h2>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted, provided that the following conditions are met:
*
* 1. Redistribution of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of other
* contributors to this software may be used to endorse or promote products
* derived from this software without specific written permission.
* 4. This software, including modifications and/or derivative works of this
* software, must execute solely and exclusively on microcontroller or
* microprocessor devices manufactured by or for STMicroelectronics.
* 5. Redistribution and use of this software other than as permitted under
* this license is void and will automatically terminate your rights under
* this license.
*
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
/******************************************************************************
* @file eeprom_emul.h
* @author MCD Application Team
* @version V1.2.6
* @date 04-November-2016
* @brief This file contains all the functions prototypes for the EEPROM
* emulation firmware library.
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright © 2016 STMicroelectronics International N.V.
* All rights reserved.</center></h2>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted, provided that the following conditions are met:
*
* 1. Redistribution of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of other
* contributors to this software may be used to endorse or promote products
* derived from this software without specific written permission.
* 4. This software, including modifications and/or derivative works of this
* software, must execute solely and exclusively on microcontroller or
* microprocessor devices manufactured by or for STMicroelectronics.
* 5. Redistribution and use of this software other than as permitted under
* this license is void and will automatically terminate your rights under
* this license.
*
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*****************************************************************************/
#pragma once
// --------------------------------------------------------------------------
+1 -1
View File
@@ -79,7 +79,7 @@ void sei(void) { interrupts(); }
void HAL_clear_reset_source(void) { __HAL_RCC_CLEAR_RESET_FLAGS(); }
uint8_t HAL_get_reset_source (void) {
uint8_t HAL_get_reset_source(void) {
if (__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) != RESET)
return RST_WATCHDOG;
+1 -1
View File
@@ -157,7 +157,7 @@ extern uint16_t HAL_adc_result;
void HAL_clear_reset_source (void);
/** reset reason */
uint8_t HAL_get_reset_source (void);
uint8_t HAL_get_reset_source(void);
void _delay_ms(const int delay);
+36
View File
@@ -0,0 +1,36 @@
/**
* Marlin 3D Printer Firmware
* Copyright (C) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* HAL/HAL_ST7920.h
* For the HALs that provide direct access to the ST7920 display
* (bypassing U8G), it will allow the LIGHTWEIGHT_UI to operate.
*/
#if HAS_GRAPHICAL_LCD && ENABLED(LIGHTWEIGHT_UI)
void ST7920_cs();
void ST7920_ncs();
void ST7920_set_cmd();
void ST7920_set_dat();
void ST7920_write_byte(const uint8_t data);
#endif
+1
View File
@@ -194,6 +194,7 @@
#define BOARD_BIQU_B300_V1_0 1760 // BIQU B300_V1.0 (Power outputs: Hotend0, Fan, Bed, SPI Driver)
#define BOARD_BIGTREE_SKR_V1_3 1761 // BIGTREE SKR_V1.3 (Power outputs: Hotend0, Hotend1, Fan, Bed)
#define BOARD_AZTEEG_X5_MINI 1762 // Azteeg X5 Mini (Power outputs: Hotend0, Bed, Fan)
#define BOARD_MKS_SGEN 1763 // MKS-SGen (Power outputs: Hotend0, Hotend1, Bed, Fan)
//
// SAM3X8E ARM Cortex M3
+1 -1
View File
@@ -19,7 +19,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
//
// Serial aliases for debugging.
@@ -27,6 +26,7 @@
// (or not) in a given .cpp file
//
#undef DEBUG_PRINT_P
#undef DEBUG_ECHO_START
#undef DEBUG_ERROR_START
#undef DEBUG_CHAR
-1
View File
@@ -344,7 +344,6 @@
#define MSG_LCD_N3 " 4"
#define MSG_LCD_N4 " 5"
#define MSG_LCD_N5 " 6"
#define MSG_E0 "E0"
#define MSG_E1 "E1"
#define MSG_E2 "E2"
#define MSG_E3 "E3"
+7 -7
View File
@@ -264,15 +264,15 @@ void safe_delay(millis_t ms) {
return conv;
}
// Convert unsigned float to string with 1234.56 format omitting trailing zeros
char* ftostr62rj(const float &f) {
const long i = ((f < 0 ? -f : f) * 1000 + 5) / 10;
conv[0] = RJDIGIT(i, 100000);
// Convert unsigned float to string with 1234.5 format omitting trailing zeros
char* ftostr51rj(const float &f) {
const long i = ((f < 0 ? -f : f) * 100 + 5) / 10;
conv[0] = ' ';
conv[1] = RJDIGIT(i, 10000);
conv[2] = RJDIGIT(i, 1000);
conv[3] = DIGIMOD(i, 100);
conv[4] = '.';
conv[5] = DIGIMOD(i, 10);
conv[3] = RJDIGIT(i, 100);
conv[4] = DIGIMOD(i, 10);
conv[5] = '.';
conv[6] = DIGIMOD(i, 1);
return conv;
}
+2 -2
View File
@@ -106,8 +106,8 @@ inline void serial_delay(const millis_t ms) {
// Convert signed float to string with +123.45 format
char* ftostr52sign(const float &x);
// Convert unsigned float to string with 1234.56 format omitting trailing zeros
char* ftostr62rj(const float &x);
// Convert unsigned float to string with 1234.5 format omitting trailing zeros
char* ftostr51rj(const float &x);
// Convert float to rj string with 123 or -12 format
FORCE_INLINE char* ftostr3(const float &x) { return i16tostr3(int16_t(x + (x < 0 ? -0.5f : 0.5f))); }
+1 -1
View File
@@ -64,7 +64,7 @@ void Babystep::add_mm(const AxisEnum axis, const float &mm) {
add_steps(axis, mm * planner.settings.axis_steps_per_mm[axis]);
}
void Babystep::add_steps(const AxisEnum axis, const int32_t distance) {
void Babystep::add_steps(const AxisEnum axis, const int16_t distance) {
#if ENABLED(BABYSTEP_WITHOUT_HOMING)
#define CAN_BABYSTEP(AXIS) true
+1 -1
View File
@@ -53,7 +53,7 @@ public:
}
#endif
#endif
static void add_steps(const AxisEnum axis, const int32_t distance);
static void add_steps(const AxisEnum axis, const int16_t distance);
static void add_mm(const AxisEnum axis, const float &mm);
static void task();
private:
+4
View File
@@ -32,6 +32,10 @@
#define DEBUG_OUT ENABLED(DEBUG_LEVELING_FEATURE)
#include "../../../core/debug_out.h"
#if ENABLED(EXTENSIBLE_UI)
#include "../../../lcd/extensible_ui/ui_api.h"
#endif
int bilinear_grid_spacing[2], bilinear_start[2];
float bilinear_grid_factor[2],
z_values[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y];
+4
View File
@@ -42,6 +42,10 @@
#define DEBUG_OUT ENABLED(DEBUG_LEVELING_FEATURE)
#include "../../core/debug_out.h"
#if ENABLED(EXTENSIBLE_UI)
#include "../../lcd/extensible_ui/ui_api.h"
#endif
bool leveling_is_valid() {
return
#if ENABLED(MESH_BED_LEVELING)
+3 -3
View File
@@ -103,7 +103,7 @@ void FWRetract::retract(const bool retracting
// Prevent two swap-retract or recovers in a row
#if EXTRUDERS > 1
// Allow G10 S1 only after G10
// Allow G10 S1 only after G11
if (swapping && retracted_swap[active_extruder] == retracting) return;
// G11 priority to recover the long retract if activated
if (!retracting) swapping = retracted_swap[active_extruder];
@@ -114,8 +114,8 @@ void FWRetract::retract(const bool retracting
/* // debugging
SERIAL_ECHOLNPAIR(
"retracting ", retracting,
"swapping ", swapping
"active extruder ", active_extruder
" swapping ", swapping,
" active extruder ", active_extruder
);
for (uint8_t i = 0; i < EXTRUDERS; ++i) {
SERIAL_ECHOLNPAIR("retracted[", i, "] ", retracted[i]);
+1 -1
View File
@@ -1,6 +1,6 @@
/**
* Marlin 3D Printer Firmware
* Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
* Copyright (C) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
+1 -1
View File
@@ -1,6 +1,6 @@
/**
* Marlin 3D Printer Firmware
* Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
* Copyright (C) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
+3 -1
View File
@@ -656,7 +656,9 @@ void resume_print(const float &slow_load_length/*=0*/, const float &fast_load_le
// Resume the print job timer if it was running
if (print_job_timer.isPaused()) print_job_timer.start();
ui.reset_status();
#if HAS_LCD_MENU
ui.return_to_status();
#endif
}
#endif // ADVANCED_PAUSE_FEATURE
+81 -22
View File
@@ -151,6 +151,12 @@ void PrintJobRecovery::save(const bool force/*=false*/, const bool save_queue/*=
// Machine state
COPY(info.current_position, current_position);
#if HAS_HOME_OFFSET
COPY(info.home_offset, home_offset);
#endif
#if HAS_POSITION_SHIFT
COPY(info.position_shift, position_shift);
#endif
info.feedrate = uint16_t(feedrate_mm_s * 60.0f);
#if HOTENDS > 1
@@ -187,7 +193,7 @@ void PrintJobRecovery::save(const bool force/*=false*/, const bool save_queue/*=
info.retract_hop = fwretract.current_hop;
#endif
//relative mode
// Relative mode
info.relative_mode = relative_mode;
info.relative_modes_e = gcode.axis_relative_modes[E_AXIS];
@@ -239,20 +245,30 @@ void PrintJobRecovery::resume() {
gcode.process_subcommands_now_P(PSTR("M420 S0 Z0"));
#endif
// Set Z to 0, raise Z by 2mm, and Home (XY only for Cartesian) with no raise
// (Only do simulated homing in Marlin Dev Mode.)
gcode.process_subcommands_now_P(PSTR("G92.0 Z0\nG1 Z" STRINGIFY(RECOVERY_ZRAISE) "\nG28 R0"
#if ENABLED(MARLIN_DEV_MODE)
" S"
#elif !IS_KINEMATIC
" X Y"
// Reset E, raise Z, home XY...
gcode.process_subcommands_now_P(PSTR("G92.9 E0"
#if Z_HOME_DIR > 0
// If Z homing goes to max, reset E and home all
"\nG28R0"
#if ENABLED(MARLIN_DEV_MODE)
"S"
#endif
#else
// Set Z to 0, raise Z by RECOVERY_ZRAISE, and Home (XY only for Cartesian)
// with no raise. (Only do simulated homing in Marlin Dev Mode.)
"Z0\nG1Z" STRINGIFY(RECOVERY_ZRAISE) "\nG28R0"
#if ENABLED(MARLIN_DEV_MODE)
"S"
#elif !IS_KINEMATIC
"XY"
#endif
#endif
));
// Pretend that all axes are homed
axis_homed = axis_known_position = xyz_bits;
char cmd[40], str_1[16], str_2[16];
char cmd[50], str_1[16], str_2[16];
// Select the previously active tool (with no_move)
#if EXTRUDERS > 1
@@ -315,16 +331,16 @@ void PrintJobRecovery::resume() {
memcpy(&mixer.gradient, &info.gradient, sizeof(info.gradient));
#endif
// Restore Z (plus raise) and E positions with G92.0
dtostrf(info.current_position[Z_AXIS] + RECOVERY_ZRAISE, 1, 3, str_1);
dtostrf(info.current_position[E_AXIS]
#if ENABLED(SAVE_EACH_CMD_MODE)
- 5 // Extra extrusion on restart
#endif
, 1, 3, str_2
);
sprintf_P(cmd, PSTR("G92.0 Z%s E%s"), str_1, str_2);
gcode.process_subcommands_now(cmd);
// Extrude and retract to clean the nozzle
#if POWER_LOSS_PURGE_LEN
//sprintf_P(cmd, PSTR("G1 E%d F200"), POWER_LOSS_PURGE_LEN);
//gcode.process_subcommands_now(cmd);
gcode.process_subcommands_now_P(PSTR("G1 E" STRINGIFY(POWER_LOSS_PURGE_LEN) " F200"));
#endif
#if POWER_LOSS_RETRACT_LEN
sprintf_P(cmd, PSTR("G1 E%d F3000"), POWER_LOSS_PURGE_LEN - POWER_LOSS_RETRACT_LEN);
gcode.process_subcommands_now(cmd);
#endif
// Move back to the saved XY
dtostrf(info.current_position[X_AXIS], 1, 3, str_1);
@@ -337,13 +353,37 @@ void PrintJobRecovery::resume() {
sprintf_P(cmd, PSTR("G1 Z%s F200"), str_1);
gcode.process_subcommands_now(cmd);
// Un-retract
#if POWER_LOSS_PURGE_LEN
//sprintf_P(cmd, PSTR("G1 E%d F3000"), POWER_LOSS_PURGE_LEN);
//gcode.process_subcommands_now(cmd);
gcode.process_subcommands_now_P(PSTR("G1 E" STRINGIFY(POWER_LOSS_PURGE_LEN) " F3000"));
#endif
// Restore the feedrate
sprintf_P(cmd, PSTR("G1 F%d"), info.feedrate);
gcode.process_subcommands_now(cmd);
//relative mode
if (info.relative_mode) relative_mode = true;
if (info.relative_modes_e) gcode.axis_relative_modes[E_AXIS] = true;
// Restore E position with G92.9
dtostrf(info.current_position[E_AXIS], 1, 3, str_1);
sprintf_P(cmd, PSTR("G92.9 E%s"), str_1);
gcode.process_subcommands_now(cmd);
// Relative mode
relative_mode = info.relative_mode;
gcode.axis_relative_modes[E_AXIS] = info.relative_modes_e;
#if HAS_HOME_OFFSET || HAS_POSITION_SHIFT
LOOP_XYZ(i) {
#if HAS_HOME_OFFSET
home_offset[i] = info.home_offset[i];
#endif
#if HAS_POSITION_SHIFT
position_shift[i] = info.position_shift[i];
#endif
update_workspace_offset((AxisEnum)i);
}
#endif
// Process commands from the old pending queue
uint8_t c = info.commands_in_queue, r = info.cmd_queue_index_r;
@@ -372,6 +412,25 @@ void PrintJobRecovery::resume() {
DEBUG_ECHO(info.current_position[i]);
}
DEBUG_EOL();
#if HAS_HOME_OFFSET
DEBUG_ECHOPGM("home_offset: ");
LOOP_XYZ(i) {
if (i) DEBUG_CHAR(',');
DEBUG_ECHO(info.home_offset[i]);
}
DEBUG_EOL();
#endif
#if HAS_POSITION_SHIFT
DEBUG_ECHOPGM("position_shift: ");
LOOP_XYZ(i) {
if (i) DEBUG_CHAR(',');
DEBUG_ECHO(info.position_shift[i]);
}
DEBUG_EOL();
#endif
DEBUG_ECHOLNPAIR("feedrate: ", info.feedrate);
#if HOTENDS > 1
+9
View File
@@ -35,6 +35,8 @@
#define SAVE_INFO_INTERVAL_MS 0
//#define SAVE_EACH_CMD_MODE
//#define DEBUG_POWER_LOSS_RECOVERY
#define POWER_LOSS_PURGE_LEN 20
#define POWER_LOSS_RETRACT_LEN 10
typedef struct {
uint8_t valid_head;
@@ -42,6 +44,13 @@ typedef struct {
// Machine state
float current_position[NUM_AXIS];
#if HAS_HOME_OFFSET
float home_offset[XYZ];
#endif
#if HAS_POSITION_SHIFT
float position_shift[XYZ];
#endif
uint16_t feedrate;
#if HOTENDS > 1
+9 -4
View File
@@ -32,6 +32,10 @@
#include "../../module/configuration_store.h"
#endif
#if ENABLED(EXTENSIBLE_UI)
#include "../../lcd/extensible_ui/ui_api.h"
#endif
//#define M420_C_USE_MEAN
/**
@@ -175,14 +179,15 @@ void GcodeSuite::M420() {
set_bed_leveling_enabled(false);
// Subtract the mean from all values
for (uint8_t x = GRID_MAX_POINTS_X; x--;)
for (uint8_t y = GRID_MAX_POINTS_Y; y--;)
for (uint8_t y = GRID_MAX_POINTS_Y; y--;) {
Z_VALUES(x, y) -= zmean;
#if ENABLED(EXTENSIBLE_UI)
ExtUI::onMeshUpdate(x, y, Z_VALUES(x, y));
#endif
}
#if ENABLED(ABL_BILINEAR_SUBDIVISION)
bed_level_virt_interpolate();
#endif
#if ENABLED(EXTENSIBLE_UI)
ExtUI::onMeshUpdate(x, y, Z_VALUES(x, y));
#endif
}
#endif
+4
View File
@@ -51,6 +51,10 @@
#define DEBUG_OUT ENABLED(DEBUG_LEVELING_FEATURE)
#include "../../../core/debug_out.h"
#if ENABLED(EXTENSIBLE_UI)
#include "../../../lcd/extensible_ui/ui_api.h"
#endif
#if ABL_GRID
#if ENABLED(PROBE_Y_FIRST)
#define PR_OUTER_VAR xCount
+4
View File
@@ -31,6 +31,10 @@
#include "../../gcode.h"
#include "../../../feature/bedlevel/abl/abl.h"
#if ENABLED(EXTENSIBLE_UI)
#include "../../../lcd/extensible_ui/ui_api.h"
#endif
/**
* M421: Set a single Mesh Bed Leveling Z coordinate
*
+6
View File
@@ -126,6 +126,12 @@ void GcodeSuite::G34() {
extruder_duplication_enabled = false;
#endif
// Before moving other axes raise Z, if needed. Never lower Z.
if (current_position[Z_AXIS] < Z_CLEARANCE_BETWEEN_PROBES) {
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Raise Z (before moving to probe pos) to ", Z_CLEARANCE_BETWEEN_PROBES);
do_blocking_move_to_z(Z_CLEARANCE_BETWEEN_PROBES);
}
// Remember corrections to determine errors on each iteration
float last_z_align_move[Z_STEPPER_COUNT] = ARRAY_N(Z_STEPPER_COUNT, 10000.0f, 10000.0f, 10000.0f),
z_measured[Z_STEPPER_COUNT] = { 0 };
+3 -1
View File
@@ -74,7 +74,9 @@ inline void delay_for_power_down() { safe_delay(SPINDLE_LASER_POWERDOWN_DELAY);
inline void set_spindle_laser_ocr(const uint8_t ocr) {
WRITE(SPINDLE_LASER_ENA_PIN, SPINDLE_LASER_ENABLE_INVERT); // turn spindle on (active low)
analogWrite(SPINDLE_LASER_PWM_PIN, (SPINDLE_LASER_PWM_INVERT) ? 255 - ocr : ocr);
#if ENABLED(SPINDLE_LASER_PWM)
analogWrite(SPINDLE_LASER_PWM_PIN, (SPINDLE_LASER_PWM_INVERT) ? 255 - ocr : ocr);
#endif
}
#if ENABLED(SPINDLE_LASER_PWM)
-13
View File
@@ -25,18 +25,11 @@
#include "../../core/serial.h"
#include "../../inc/MarlinConfig.h"
#if ENABLED(EXTENSIBLE_UI)
#include "../../lcd/extensible_ui/ui_api.h"
#endif
/**
* M500: Store settings in EEPROM
*/
void GcodeSuite::M500() {
(void)settings.save();
#if ENABLED(EXTENSIBLE_UI)
ExtUI::onStoreSettings();
#endif
}
/**
@@ -44,9 +37,6 @@ void GcodeSuite::M500() {
*/
void GcodeSuite::M501() {
(void)settings.load();
#if ENABLED(EXTENSIBLE_UI)
ExtUI::onLoadSettings();
#endif
}
/**
@@ -54,9 +44,6 @@ void GcodeSuite::M501() {
*/
void GcodeSuite::M502() {
(void)settings.reset();
#if ENABLED(EXTENSIBLE_UI)
ExtUI::onFactoryReset();
#endif
}
#if DISABLED(DISABLE_M503)
+12 -2
View File
@@ -29,8 +29,18 @@
#include "../../../module/stepper_indirection.h"
/**
* M906: Set motor current in milliamps using axis codes X, Y, Z, E
* Report driver currents when no axis specified
* M906: Set motor current in milliamps.
*
* Parameters:
* X[current] - Set mA current for X driver(s)
* Y[current] - Set mA current for Y driver(s)
* Z[current] - Set mA current for Z driver(s)
* E[current] - Set mA current for E driver(s)
*
* I[index] - Axis sub-index (Omit or 0 for X, Y, Z; 1 for X2, Y2, Z2; 2 for Z3.)
* T[index] - Extruder index (Zero-based. Omit for E0 only.)
*
* With no parameters report driver currents.
*/
void GcodeSuite::M906() {
#define TMC_SAY_CURRENT(Q) tmc_get_current(stepper##Q)
+1 -1
View File
@@ -278,7 +278,7 @@ void GcodeSuite::process_parsed_command(
case 58: G58(); break;
case 59: G59(); break;
#endif
#if ENABLED(GCODE_MOTION_MODES)
case 80: G80(); break; // G80: Reset the current motion mode
#endif
+54 -38
View File
@@ -33,9 +33,23 @@
*/
void GcodeSuite::G92() {
#if ENABLED(CNC_COORDINATE_SYSTEMS)
switch (parser.subcode) {
case 1:
bool didE = false;
#if IS_SCARA || !HAS_POSITION_SHIFT
bool didXYZ = false;
#else
constexpr bool didXYZ = false;
#endif
#if USE_GCODE_SUBCODES
const uint8_t subcode_G92 = parser.subcode;
#else
constexpr uint8_t subcode_G92 = 0;
#endif
switch (subcode_G92) {
default: break;
#if ENABLED(CNC_COORDINATE_SYSTEMS)
case 1: {
// Zero the G92 values and restore current position
#if !IS_SCARA
LOOP_XYZ(i) {
@@ -46,44 +60,46 @@ void GcodeSuite::G92() {
}
}
#endif // Not SCARA
return;
}
#endif
#if ENABLED(CNC_COORDINATE_SYSTEMS)
#define IS_G92_0 (parser.subcode == 0)
#else
#define IS_G92_0 true
#endif
bool didE = false;
#if IS_SCARA || !HAS_POSITION_SHIFT
bool didXYZ = false;
#else
constexpr bool didXYZ = false;
#endif
if (IS_G92_0) LOOP_XYZE(i) {
if (parser.seenval(axis_codes[i])) {
const float l = parser.value_axis_units((AxisEnum)i),
v = i == E_AXIS ? l : LOGICAL_TO_NATIVE(l, i),
d = v - current_position[i];
if (!NEAR_ZERO(d)) {
#if IS_SCARA || !HAS_POSITION_SHIFT
if (i == E_AXIS) didE = true; else didXYZ = true;
current_position[i] = v; // Without workspaces revert to Marlin 1.0 behavior
#elif HAS_POSITION_SHIFT
if (i == E_AXIS) {
didE = true;
current_position[E_AXIS] = v; // When using coordinate spaces, only E is set directly
} return;
#endif
#if ENABLED(POWER_LOSS_RECOVERY)
case 9: {
LOOP_XYZE(i) {
if (parser.seenval(axis_codes[i])) {
current_position[i] = parser.value_axis_units((AxisEnum)i);
#if IS_SCARA || !HAS_POSITION_SHIFT
if (i == E_AXIS) didE = true; else didXYZ = true;
#elif HAS_POSITION_SHIFT
if (i == E_AXIS) didE = true;
#endif
}
else {
position_shift[i] += d; // Other axes simply offset the coordinate space
update_workspace_offset((AxisEnum)i);
}
} break;
#endif
case 0: {
LOOP_XYZE(i) {
if (parser.seenval(axis_codes[i])) {
const float l = parser.value_axis_units((AxisEnum)i),
v = i == E_AXIS ? l : LOGICAL_TO_NATIVE(l, i),
d = v - current_position[i];
if (!NEAR_ZERO(d)) {
#if IS_SCARA || !HAS_POSITION_SHIFT
if (i == E_AXIS) didE = true; else didXYZ = true;
current_position[i] = v; // Without workspaces revert to Marlin 1.0 behavior
#elif HAS_POSITION_SHIFT
if (i == E_AXIS) {
didE = true;
current_position[E_AXIS] = v; // When using coordinate spaces, only E is set directly
}
else {
position_shift[i] += d; // Other axes simply offset the coordinate space
update_workspace_offset((AxisEnum)i);
}
#endif
}
#endif
}
}
}
} break;
}
#if ENABLED(CNC_COORDINATE_SYSTEMS)
+1 -1
View File
@@ -1,6 +1,6 @@
/**
* Marlin 3D Printer Firmware
* Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
* Copyright (C) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
+3 -2
View File
@@ -526,8 +526,9 @@ void gcode_line_error(PGM_P const err, const int8_t port) {
#endif // BINARY_FILE_TRANSFER
FORCE_INLINE bool is_M29(const char * const cmd) {
return cmd[0] == 'M' && cmd[1] == '2' && cmd[2] == '9' && !WITHIN(cmd[3], '0', '9');
FORCE_INLINE bool is_M29(const char * const cmd) { // matches "M29" & "M29 ", but not "M290", etc
const char * const m29 = strstr_P(cmd, PSTR("M29"));
return m29 && !NUMERIC(m29[3]);
}
/**
-3
View File
@@ -31,9 +31,6 @@
* M23: Open a file
*/
void GcodeSuite::M23() {
#if ENABLED(POWER_LOSS_RECOVERY)
card.removeJobRecoveryFile();
#endif
// Simplify3D includes the size, so zero out all spaces (#7227)
for (char *fn = parser.string_arg; *fn; ++fn) if (*fn == ' ') *fn = '\0';
card.openFile(parser.string_arg, true);
+1 -1
View File
@@ -1,6 +1,6 @@
/**
* Marlin 3D Printer Firmware
* Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
* Copyright (C) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
+10 -2
View File
@@ -138,11 +138,15 @@
#elif ENABLED(MKS_MINI_12864)
#define MINIPANEL
#define DEFAULT_LCD_CONTRAST 150
#define LCD_CONTRAST_MAX 255
#elif ENABLED(FYSETC_MINI_12864)
#define DOGLCD
#define ULTIPANEL
#define LCD_CONTRAST_MIN 0
#define LCD_CONTRAST_MAX 255
#define DEFAULT_LCD_CONTRAST 255
#define LED_COLORS_REDUCE_GREEN
@@ -151,7 +155,9 @@
#if EITHER(MAKRPANEL, MINIPANEL)
#define DOGLCD
#define ULTIPANEL
#define DEFAULT_LCD_CONTRAST 17
#ifndef DEFAULT_LCD_CONTRAST
#define DEFAULT_LCD_CONTRAST 17
#endif
#endif
#if ENABLED(ULTI_CONTROLLER)
@@ -323,7 +329,7 @@
/**
* Default LCD contrast for Graphical LCD displays
*/
#define HAS_LCD_CONTRAST HAS_GRAPHICAL_LCD && defined(DEFAULT_LCD_CONTRAST)
#define HAS_LCD_CONTRAST (HAS_GRAPHICAL_LCD && defined(DEFAULT_LCD_CONTRAST))
#if HAS_LCD_CONTRAST
#ifndef LCD_CONTRAST_MIN
#define LCD_CONTRAST_MIN 0
@@ -560,3 +566,5 @@
#if ENABLED(SLIM_LCD_MENUS)
#define BOOT_MARLIN_LOGO_SMALL
#endif
#define IS_RE_ARM_BOARD (MB(RAMPS_14_RE_ARM_EFB) || MB(RAMPS_14_RE_ARM_EEB) || MB(RAMPS_14_RE_ARM_EFF) || MB(RAMPS_14_RE_ARM_EEF) || MB(RAMPS_14_RE_ARM_SF))
+1 -1
View File
@@ -918,7 +918,7 @@
#define HAS_TEMP_HOTEND (HAS_TEMP_ADC_0 || ENABLED(HEATER_0_USES_MAX6675))
#define HAS_TEMP_BED HAS_TEMP_ADC_BED
#define HAS_TEMP_CHAMBER HAS_TEMP_ADC_CHAMBER
#define HAS_HEATED_CHAMBER (HAS_TEMP_CHAMBER && PIN_EXISTS(CHAMBER_HEATER))
#define HAS_HEATED_CHAMBER (HAS_TEMP_CHAMBER && PIN_EXISTS(HEATER_CHAMBER))
// Heaters
#define HAS_HEATER_0 (PIN_EXISTS(HEATER_0))
+2
View File
@@ -343,6 +343,8 @@
#error "MAX6675_SS2 is now MAX6675_SS2_PIN. Please update your configuration and/or pins."
#elif defined(SPINDLE_LASER_ENABLE_PIN)
#error "SPINDLE_LASER_ENABLE_PIN is now SPINDLE_LASER_ENA_PIN. Please update your configuration and/or pins."
#elif defined(CHAMBER_HEATER_PIN)
#error "CHAMBER_HEATER_PIN is now HEATER_CHAMBER_PIN. Please update your configuration and/or pins."
#elif defined(TMC_Z_CALIBRATION)
#error "TMC_Z_CALIBRATION has been deprecated in favor of Z_STEPPER_AUTO_ALIGN. Please update your configuration."
#elif defined(Z_MIN_PROBE_ENDSTOP)
+2 -2
View File
@@ -39,7 +39,7 @@
/**
* Marlin release version identifier
*/
#define SHORT_BUILD_VERSION "2.0.x_TR12"
#define SHORT_BUILD_VERSION "2.0.x_TR13"
/**
* Verbose version identifier which should contain a reference to the location
@@ -52,7 +52,7 @@
* here we define this default string as the date where the latest release
* version was tagged.
*/
#define STRING_DISTRIBUTION_DATE "2019-04-04"
#define STRING_DISTRIBUTION_DATE "2019-04-28"
/**
* Required minimum Configuration.h and Configuration_adv.h file versions.
+2 -4
View File
@@ -517,7 +517,7 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const
else {
#if DISABLED(HOME_AFTER_DEACTIVATE, DISABLE_REDUCED_ACCURACY_WARNING)
if (!TEST(axis_known_position, axis))
lcd_put_u8str_P(axis == Z_AXIS ? PSTR(" ") : PSTR(" "));
lcd_put_u8str_P(axis == Z_AXIS ? PSTR(" ") : PSTR(" "));
else
#endif
lcd_put_u8str(value);
@@ -1038,9 +1038,7 @@ void MarlinUI::draw_status_screen() {
}
void draw_select_screen(PGM_P const yes, PGM_P const no, const bool yesno, PGM_P const pref, const char * const string, PGM_P const suff) {
SETCURSOR(0, 0); lcd_put_u8str_P(pref);
if (string) wrap_string(1, string);
if (suff) lcd_put_u8str_P(suff);
ui.draw_select_screen_prompt(pref, string, suff);
SETCURSOR(0, LCD_HEIGHT - 1);
lcd_put_wchar(yesno ? ' ' : '['); lcd_put_u8str_P(no); lcd_put_wchar(yesno ? ' ' : ']');
SETCURSOR_RJ(utf8_strlen_P(yes) + 2, LCD_HEIGHT - 1);
@@ -94,3 +94,16 @@ public:
: U8GLIB(&u8g_dev_tft_320x240_upscale_from_128x64, cs, rs, reset)
{ }
};
extern u8g_dev_t u8g_dev_uc1701_mini12864_HAL_2x_sw_spi, u8g_dev_uc1701_mini12864_HAL_2x_hw_spi;
class U8GLIB_MINI12864_2X_HAL : public U8GLIB {
public:
U8GLIB_MINI12864_2X_HAL(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
: U8GLIB(&u8g_dev_uc1701_mini12864_HAL_2x_sw_spi, sck, mosi, cs, a0, reset)
{ }
U8GLIB_MINI12864_2X_HAL(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
: U8GLIB(&u8g_dev_uc1701_mini12864_HAL_2x_hw_spi, cs, a0, reset)
{ }
};
+1 -1
View File
@@ -47,7 +47,7 @@
uint8_t u8g_com_HAL_LPC1768_ssd_hw_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr);
#define U8G_COM_SSD_I2C_HAL u8g_com_arduino_ssd_i2c_fn
#if defined(ARDUINO_ARCH_STM32F1)
#ifdef ARDUINO_ARCH_STM32F1
uint8_t u8g_com_stm32duino_fsmc_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr);
#define U8G_COM_HAL_FSMC_FN u8g_com_stm32duino_fsmc_fn
#else
+1 -1
View File
@@ -245,7 +245,7 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const
else {
#if DISABLED(HOME_AFTER_DEACTIVATE, DISABLE_REDUCED_ACCURACY_WARNING)
if (!TEST(axis_known_position, axis))
lcd_put_u8str_P(axis == Z_AXIS ? PSTR(" ") : PSTR(" "));
lcd_put_u8str_P(axis == Z_AXIS ? PSTR(" ") : PSTR(" "));
else
#endif
lcd_put_u8str(value);
@@ -158,9 +158,7 @@ void ST7920_Lite_Status_Screen::entry_mode_select(const bool ac_increase, const
// function for scroll_or_addr_select()
void ST7920_Lite_Status_Screen::_scroll_or_addr_select(const bool sa) {
extended_function_set(true);
cmd(0b00100010 |
(sa ? 0b000001 : 0)
);
cmd(0b00000010 | (sa ? 0b00000001 : 0));
current_bits.sa = sa;
}
@@ -907,34 +905,6 @@ void ST7920_Lite_Status_Screen::clear_text_buffer() {
ncs();
}
#if ENABLED(U8GLIB_ST7920) && !defined(U8G_HAL_LINKS) && !defined(__SAM3X8E__)
#include "ultralcd_st7920_u8glib_rrd_AVR.h"
void ST7920_Lite_Status_Screen::cs() {
ST7920_CS();
current_bits.synced = false;
}
void ST7920_Lite_Status_Screen::ncs() {
ST7920_NCS();
current_bits.synced = false;
}
void ST7920_Lite_Status_Screen::sync_cmd() {
ST7920_SET_CMD();
}
void ST7920_Lite_Status_Screen::sync_dat() {
ST7920_SET_DAT();
}
void ST7920_Lite_Status_Screen::write_byte(const uint8_t data) {
ST7920_WRITE_BYTE(data);
}
#endif
void MarlinUI::draw_status_screen() {
ST7920_Lite_Status_Screen::update(false);
}
@@ -15,6 +15,8 @@
*/
#pragma once
#include "../../HAL/shared/HAL_ST7920.h"
#include "../../core/macros.h"
#include "../../libs/duration_t.h"
@@ -28,11 +30,11 @@ class ST7920_Lite_Status_Screen {
uint8_t sa : 1;
} current_bits;
static void cs();
static void ncs();
static void sync_cmd();
static void sync_dat();
static void write_byte(const uint8_t w);
static void cs() { ST7920_cs(); current_bits.synced = false; }
static void ncs() { ST7920_cs(); current_bits.synced = false; }
static void sync_cmd() { ST7920_set_cmd(); }
static void sync_dat() { ST7920_set_dat(); }
static void write_byte(const uint8_t w) { ST7920_write_byte(w); }
FORCE_INLINE static void write_word(const uint16_t w) {
write_byte((w >> 8) & 0xFF);
@@ -66,42 +66,47 @@
#define PAGE_HEIGHT 8
static const uint8_t u8g_dev_uc1701_mini12864_HAL_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x0E2, /* soft reset */
0x040, /* set display start line to 0 */
0x0A0, /* ADC set to reverse */
0x0C8, /* common output mode */
0x0A6, /* display normal, bit val 0: LCD pixel off. */
0x0A2, /* LCD bias 1/9 */
0x02F, /* all power control circuits on */
0x0F8, /* set booster ratio to */
0x000, /* 4x */
0x023, /* set V0 voltage resistor ratio to large */
0x081, /* set contrast */
0x027, /* contrast value */
0x0AC, /* indicator */
0x000, /* disable */
0x0AF, /* display on */
0x0E2, /* soft reset */
0x040, /* set display start line to 0 */
0x0A0, /* ADC set to reverse */
0x0C8, /* common output mode */
0x0A6, /* display normal, bit val 0: LCD pixel off. */
0x0A2, /* LCD bias 1/9 */
0x02F, /* all power control circuits on */
0x0F8, /* set booster ratio to */
0x000, /* 4x */
0x023, /* set V0 voltage resistor ratio to large */
0x081, /* set contrast */
0x027, /* contrast value */
0x0AC, /* indicator */
0x000, /* disable */
0x0AF, /* display on */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0A5, /* display all points, ST7565 */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0A4, /* normal display */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_CS(1), /* enable chip */
0x0A5, /* display all points, ST7565 */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_CS(1), /* enable chip */
0x0A4, /* normal display */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_uc1701_mini12864_HAL_data_start[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x010, /* set upper 4 bit of the col adr to 0 */
0x000, /* set lower 4 bit of the col adr to 4 */
U8G_ESC_END /* end of sequence */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x010, /* set upper 4 bit of the col adr to 0 */
0x000, /* set lower 4 bit of the col adr to 4 */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_uc1701_mini12864_HAL_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg) {
+23 -25
View File
@@ -175,14 +175,14 @@ void MarlinUI::set_font(const MarlinFont font_nr) {
// Can the text fit to the right of the bitmap?
if (text_max_width < rspace) {
constexpr uint8_t inter = (width - text_max_width - (START_BMPWIDTH)) / 3; // Evenly distribute horizontal space
constexpr int8_t inter = (width - text_max_width - (START_BMPWIDTH)) / 3; // Evenly distribute horizontal space
offx = inter; // First the boot logo...
offy = (height - (START_BMPHEIGHT)) / 2; // ...V-aligned in the full height
txt_offx_1 = txt_offx_2 = inter + (START_BMPWIDTH) + inter; // Text right of the bitmap
txt_base = (height + MENU_FONT_ASCENT + text_total_height - (MENU_FONT_HEIGHT)) / 2; // Text vertical center
}
else {
constexpr uint8_t inter = (height - text_total_height - (START_BMPHEIGHT)) / 3; // Evenly distribute vertical space
constexpr int8_t inter = (height - text_total_height - (START_BMPHEIGHT)) / 3; // Evenly distribute vertical space
offy = inter; // V-align boot logo proportionally
offx = rspace / 2; // Center the boot logo in the whole space
txt_offx_1 = (width - text_width_1) / 2; // Text 1 centered
@@ -439,9 +439,7 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
}
void draw_select_screen(PGM_P const yes, PGM_P const no, const bool yesno, PGM_P const pref, const char * const string, PGM_P const suff) {
SETCURSOR(0, 0); lcd_put_u8str_P(pref);
if (string) wrap_string(1, string);
if (suff) lcd_put_u8str_P(suff);
ui.draw_select_screen_prompt(pref, string, suff);
draw_boxed_string(1, LCD_HEIGHT - 1, no, !yesno);
draw_boxed_string(LCD_WIDTH - (utf8_strlen_P(yes) + 1), LCD_HEIGHT - 1, yes, yesno);
}
@@ -554,22 +552,22 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
#if EITHER(BABYSTEP_ZPROBE_GFX_OVERLAY, MESH_EDIT_GFX_OVERLAY)
const unsigned char cw_bmp[] PROGMEM = {
B00000011,B11111000,B00000000,
B00001111,B11111110,B00000000,
B00011110,B00001111,B00000000,
B00111000,B00000111,B00000000,
B00111000,B00000011,B10000000,
B01110000,B00000011,B10000000,
B01110000,B00001111,B11100000,
B01110000,B00000111,B11000000,
B01110000,B00000011,B10000000,
B01110000,B00000001,B00000000,
B01110000,B00000000,B00000000,
B00111000,B00000000,B00000000,
B00111000,B00000111,B00000000,
B00011110,B00001111,B00000000,
B00001111,B11111110,B00000000,
B00000011,B11111000,B00000000
B00000001,B11111100,B00000000,
B00000111,B11111111,B00000000,
B00001111,B00000111,B10000000,
B00001110,B00000001,B11000000,
B00000000,B00000001,B11000000,
B00000000,B00000000,B11100000,
B00001000,B00000000,B11100000,
B00011100,B00000000,B11100000,
B00111110,B00000000,B11100000,
B01111111,B00000000,B11100000,
B00011100,B00000000,B11100000,
B00001110,B00000000,B11100000,
B00001110,B00000001,B11000000,
B00000111,B10000011,B11000000,
B00000011,B11111111,B10000000,
B00000000,B11111110,B00000000
};
const unsigned char ccw_bmp[] PROGMEM = {
@@ -669,10 +667,10 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
// Draw cw/ccw indicator and up/down arrows.
if (PAGE_CONTAINS(47, 62)) {
u8g.drawBitmapP(left + 0, 47, 3, 16, rot_down);
u8g.drawBitmapP(right + 0, 47, 3, 16, rot_up);
u8g.drawBitmapP(right + 20, 48 - dir, 2, 13, up_arrow_bmp);
u8g.drawBitmapP(left + 20, 49 - dir, 2, 13, down_arrow_bmp);
u8g.drawBitmapP(right + 0, 48 - dir, 2, 13, up_arrow_bmp);
u8g.drawBitmapP(left + 0, 49 - dir, 2, 13, down_arrow_bmp);
u8g.drawBitmapP(left + 13, 47, 3, 16, rot_down);
u8g.drawBitmapP(right + 13, 47, 3, 16, rot_up);
}
}
+6 -2
View File
@@ -111,8 +111,12 @@
// The MINIPanel display
//#define U8G_CLASS U8GLIB_MINI12864
//#define U8G_PARAM DOGLCD_CS, DOGLCD_A0 // 8 stripes
#define U8G_CLASS U8GLIB_MINI12864_2X
#define U8G_PARAM DOGLCD_CS, DOGLCD_A0 // 4 stripes
#define U8G_CLASS U8GLIB_MINI12864_2X_HAL
#if BOTH(FYSETC_MINI_12864, FORCE_SOFT_SPI)
#define U8G_PARAM DOGLCD_SCK, DOGLCD_MOSI, DOGLCD_CS, DOGLCD_A0 // 4 stripes SW-SPI
#else
#define U8G_PARAM DOGLCD_CS, DOGLCD_A0 // 4 stripes HW-SPI
#endif
#elif ENABLED(U8GLIB_SH1106_EINSTART)
// Connected via motherboard header
#define U8G_CLASS U8GLIB_SH1106_128X64
@@ -134,4 +134,13 @@ u8g_dev_t u8g_dev_st7920_128x64_rrd_sw_spi = {u8g_dev_rrd_st7920_128x64_fn, &u8g
#pragma GCC reset_options
#if ENABLED(LIGHTWEIGHT_UI)
#include "../../HAL/shared/HAL_ST7920.h"
void ST7920_cs() { ST7920_CS(); }
void ST7920_ncs() { ST7920_NCS(); }
void ST7920_set_cmd() { ST7920_SET_CMD(); }
void ST7920_set_dat() { ST7920_SET_DAT(); }
void ST7920_write_byte(const uint8_t val) { ST7920_WRITE_BYTE(val); }
#endif
#endif // U8GLIB_ST7920 && !U8G_HAL_LINKS && !__SAM3X8E__
+6
View File
@@ -715,6 +715,7 @@ namespace ExtUI {
#if HAS_MESH
bool getMeshValid() { return leveling_is_valid(); }
bed_mesh_t getMeshArray() { return Z_VALUES_ARR; }
float getMeshPoint(const uint8_t xpos, const uint8_t ypos) { return Z_VALUES(xpos,ypos); }
void setMeshPoint(const uint8_t xpos, const uint8_t ypos, const float zoff) {
if (WITHIN(xpos, 0, GRID_MAX_POINTS_X) && WITHIN(ypos, 0, GRID_MAX_POINTS_Y)) {
Z_VALUES(xpos, ypos) = zoff;
@@ -748,10 +749,15 @@ namespace ExtUI {
enqueue_and_echo_commands_P(gcode);
}
bool commandsInQueue() { return (planner.movesplanned() || commands_in_queue); }
bool isAxisPositionKnown(const axis_t axis) {
return TEST(axis_known_position, axis);
}
bool isPositionKnown() { return all_axes_known(); }
bool isMachineHomed() { return all_axes_homed(); }
PGM_P getFirmwareName_str() {
static const char firmware_name[] PROGMEM = "Marlin " SHORT_BUILD_VERSION;
return firmware_name;
+5
View File
@@ -58,9 +58,12 @@ namespace ExtUI {
bool isMoving();
bool isAxisPositionKnown(const axis_t);
bool isPositionKnown(); // Axis position guaranteed, steppers active since homing
bool isMachineHomed(); // Axis position most likely correct, steppers may have deactivated
bool canMove(const axis_t);
bool canMove(const extruder_t);
void enqueueCommands_P(PGM_P const);
bool commandsInQueue();
/**
* Getters and setters
@@ -110,8 +113,10 @@ namespace ExtUI {
bool getLevelingActive();
void setLevelingActive(const bool);
#if HAS_MESH
#include "../../feature/bedlevel/bedlevel.h"
bool getMeshValid();
bed_mesh_t getMeshArray();
float getMeshPoint(const uint8_t xpos, const uint8_t ypos);
void setMeshPoint(const uint8_t xpos, const uint8_t ypos, const float zval);
void onMeshUpdate(const uint8_t xpos, const uint8_t ypos, const float zval);
#endif
+143 -9
View File
@@ -35,15 +35,20 @@
*/
#define DISPLAY_CHARSET_ISO10646_CZ
#define THIS_LANGUAGES_SPECIAL_SYMBOLS _UxGT("áÁčČďĎéÉěĚíÍňŇóÓřŘšŠťŤúÚůŮýÝžŽ³")
#define CHARSIZE 2
#define WELCOME_MSG MACHINE_NAME _UxGT(" připraven.")
#define MSG_YES _UxGT("ANO")
#define MSG_NO _UxGT("NE")
#define MSG_BACK _UxGT("Zpět")
#define MSG_SD_INSERTED _UxGT("Karta vložena")
#define MSG_SD_REMOVED _UxGT("Karta vyjmuta")
#define MSG_LCD_ENDSTOPS _UxGT("Endstopy") // max 8 znaku
#define MSG_LCD_SOFT_ENDSTOPS _UxGT("Soft Endstopy")
#define MSG_MAIN _UxGT("Hlavní nabídka")
#define MSG_ADVANCED_SETTINGS _UxGT("Další nastavení")
#define MSG_CONFIGURATION _UxGT("Konfigurace")
#define MSG_AUTOSTART _UxGT("Autostart")
#define MSG_DISABLE_STEPPERS _UxGT("Uvolnit motory")
#define MSG_DEBUG_MENU _UxGT("Nabídka ladění")
@@ -56,6 +61,7 @@
#define MSG_AUTO_HOME_X _UxGT("Domů osa X")
#define MSG_AUTO_HOME_Y _UxGT("Domů osa Y")
#define MSG_AUTO_HOME_Z _UxGT("Domů osa Z")
#define MSG_AUTO_Z_ALIGN _UxGT("Auto srovnání Z")
#define MSG_LEVEL_BED_HOMING _UxGT("Měření podložky")
#define MSG_LEVEL_BED_WAITING _UxGT("Kliknutím spusťte")
#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Další bod")
@@ -76,7 +82,13 @@
#define MSG_PREHEAT_2_END MSG_PREHEAT_2 _UxGT(" hotend")
#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2 _UxGT(" podlož")
#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 _UxGT(" nast")
#define MSG_PREHEAT_CUSTOM _UxGT("Zahřát vlastní")
#define MSG_COOLDOWN _UxGT("Zchladit")
#define MSG_LASER_MENU _UxGT("Ovládání laseru")
#define MSG_LASER_OFF _UxGT("Vypnout laser")
#define MSG_LASER_ON _UxGT("Zapnout laser")
#define MSG_LASER_POWER _UxGT("Výkon laseru")
#define MSG_SPINDLE_REVERSE _UxGT("Vřeteno opačně")
#define MSG_SWITCH_PS_ON _UxGT("Zapnout napájení")
#define MSG_SWITCH_PS_OFF _UxGT("Vypnout napájení")
#define MSG_EXTRUDE _UxGT("Vytlačit (extr.)")
@@ -88,10 +100,23 @@
#define MSG_NEXT_CORNER _UxGT("Další roh")
#define MSG_EDITING_STOPPED _UxGT("Konec úprav sítě")
#define MSG_MESH_X _UxGT("Index X")
#define MSG_MESH_Y _UxGT("Index Y")
#define MSG_MESH_EDIT_Z _UxGT("Hodnota Z")
#define MSG_USER_MENU _UxGT("Vlastní příkazy")
#define MSG_UBL_DOING_G29 _UxGT("Provádím G29")
#define MSG_UBL_UNHOMED _UxGT("Přejeďte domů")
#define MSG_UBL_TOOLS _UxGT("UBL nástroje")
#define MSG_UBL_LEVEL_BED _UxGT("Unified Bed Leveling")
#define MSG_IDEX_MENU _UxGT("Režim IDEX")
#define MSG_OFFSETS_MENU _UxGT("Ofsety nástrojů")
#define MSG_IDEX_MODE_AUTOPARK _UxGT("Auto-Park")
#define MSG_IDEX_MODE_DUPLICATE _UxGT("Duplikace")
#define MSG_IDEX_MODE_MIRRORED_COPY _UxGT("Zrcadlení")
#define MSG_IDEX_MODE_FULL_CTRL _UxGT("Plná kontrola")
#define MSG_X_OFFSET _UxGT("2. tryska X")
#define MSG_Y_OFFSET _UxGT("2. tryska Y")
#define MSG_Z_OFFSET _UxGT("2. tryska Z")
#define MSG_UBL_MANUAL_MESH _UxGT("Manuální síť bodů")
#define MSG_UBL_BC_INSERT _UxGT("Vložte kartu, změřte")
#define MSG_UBL_BC_INSERT2 _UxGT("Změřte")
@@ -169,7 +194,6 @@
#define MSG_INTENSITY_B _UxGT("Modrá intenzita")
#define MSG_INTENSITY_W _UxGT("Bílá intenzita")
#define MSG_LED_BRIGHTNESS _UxGT("Jas")
#define MSG_USER_MENU _UxGT("Vlastní příkazy")
#define MSG_MOVING _UxGT("Posouvání...")
#define MSG_FREE_XY _UxGT("Uvolnit XY")
@@ -177,6 +201,7 @@
#define MSG_MOVE_Y _UxGT("Posunout Y")
#define MSG_MOVE_Z _UxGT("Posunout Z")
#define MSG_MOVE_E _UxGT("Extrudér")
#define MSG_HOTEND_TOO_COLD _UxGT("Hotend je studený")
#define MSG_MOVE_01MM _UxGT("Posunout o 0,1mm")
#define MSG_MOVE_1MM _UxGT("Posunout o 1mm")
#define MSG_MOVE_10MM _UxGT("Posunout o 10mm")
@@ -184,6 +209,7 @@
#define MSG_BED_Z _UxGT("Výška podl.")
#define MSG_NOZZLE _UxGT("Tryska")
#define MSG_BED _UxGT("Podložka")
#define MSG_CHAMBER _UxGT("Komora")
#define MSG_FAN_SPEED _UxGT("Rychlost vent.")
#define MSG_EXTRA_FAN_SPEED _UxGT("Rychlost ex. vent.")
#define MSG_FLOW _UxGT("Průtok")
@@ -250,10 +276,15 @@
#define MSG_LOAD_EEPROM _UxGT("Načíst nastavení")
#define MSG_RESTORE_FAILSAFE _UxGT("Obnovit výchozí")
#define MSG_INIT_EEPROM _UxGT("Inic. EEPROM")
#define MSG_SD_UPDATE _UxGT("Aktualizace z SD")
#define MSG_RESET_PRINTER _UxGT("Reset tiskárny")
#define MSG_REFRESH _UxGT("Obnovit")
#define MSG_WATCH _UxGT("Info obrazovka")
#define MSG_PREPARE _UxGT("Připrava tisku")
#define MSG_TUNE _UxGT("Doladění tisku")
#define MSG_START_PRINT _UxGT("Spustit tisk")
#define MSG_BUTTON_PRINT _UxGT("Tisk")
#define MSG_BUTTON_CANCEL _UxGT("Zrušit")
#define MSG_PAUSE_PRINT _UxGT("Pozastavit tisk")
#define MSG_RESUME_PRINT _UxGT("Obnovit tisk")
#define MSG_STOP_PRINT _UxGT("Zastavit tisk")
@@ -277,6 +308,12 @@
#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("UnRet V")
#define MSG_CONTROL_RETRACT_RECOVER_SWAPF _UxGT("S UnRet V")
#define MSG_AUTORETRACT _UxGT("AutoRetr.")
#define MSG_FILAMENT_SWAP_LENGTH _UxGT("Délka retrakce")
#define MSG_TOOL_CHANGE _UxGT("Výměna nástroje")
#define MSG_TOOL_CHANGE_ZLIFT _UxGT("Zdvih Z")
#define MSG_SINGLENOZZLE_PRIME_SPD _UxGT("Rychlost primár.")
#define MSG_SINGLENOZZLE_RETRACT_SPD _UxGT("Rychlost retrak.")
#define MSG_NOZZLE_STANDBY _UxGT("Tryska standby")
#define MSG_FILAMENTCHANGE _UxGT("Vyměnit filament")
#define MSG_FILAMENTLOAD _UxGT("Zavést filament")
#define MSG_FILAMENTUNLOAD _UxGT("Vysunout filament")
@@ -287,16 +324,22 @@
#define MSG_ZPROBE_OUT _UxGT("Sonda Z mimo podl")
#define MSG_SKEW_FACTOR _UxGT("Faktor zkosení")
#define MSG_BLTOUCH _UxGT("BLTouch")
#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch Self-Test")
#define MSG_BLTOUCH_RESET _UxGT("BLTouch Reset")
#define MSG_BLTOUCH_DEPLOY _UxGT("BLTouch Vysunout")
#define MSG_BLTOUCH_STOW _UxGT("BLTouch Zasunout")
#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch self-test")
#define MSG_BLTOUCH_RESET _UxGT("BLTouch reset")
#define MSG_BLTOUCH_DEPLOY _UxGT("BLTouch vysunout")
#define MSG_BLTOUCH_SW_MODE _UxGT("SW výsun BLTouch")
#define MSG_BLTOUCH_5V_MODE _UxGT("BLTouch 5V režim")
#define MSG_BLTOUCH_OD_MODE _UxGT("BLTouch OD režim")
#define MSG_BLTOUCH_STOW _UxGT("BLTouch zasunout")
#define MSG_MANUAL_DEPLOY _UxGT("Vysunout Z-sondu")
#define MSG_MANUAL_STOW _UxGT("Zasunout Z-sondu")
#define MSG_HOME _UxGT("Domů") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST
#define MSG_FIRST _UxGT("první")
#define MSG_ZPROBE_ZOFFSET _UxGT("Z ofset")
#define MSG_BABYSTEP_X _UxGT("Babystep X")
#define MSG_BABYSTEP_Y _UxGT("Babystep Y")
#define MSG_BABYSTEP_Z _UxGT("Babystep Z")
#define MSG_BABYSTEP_TOTAL _UxGT("Celkem")
#define MSG_ENDSTOP_ABORT _UxGT("Endstop abort")
#define MSG_HEATING_FAILED_LCD _UxGT("Chyba zahřívání")
#define MSG_HEATING_FAILED_LCD_BED _UxGT("Chyba zahř.podl.")
@@ -307,6 +350,8 @@
#define MSG_ERR_MINTEMP _UxGT("NÍZKA TEPLOTA")
#define MSG_ERR_MAXTEMP_BED _UxGT("VYS. TEPL. PODL.")
#define MSG_ERR_MINTEMP_BED _UxGT("NÍZ. TEPL. PODL.")
#define MSG_ERR_MAXTEMP_CHAMBER _UxGT("Err: MAXTEMP KOMORA")
#define MSG_ERR_MINTEMP_CHAMBER _UxGT("Err: MINTEMP KOMORA")
#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST
#define MSG_HALTED _UxGT("TISK. ZASTAVENA")
#define MSG_PLEASE_RESET _UxGT("Proveďte reset")
@@ -380,18 +425,82 @@
#define MSG_FILAMENT_CHANGE_OPTION_PURGE _UxGT("Vytlačit víc")
#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Obnovit tisk")
#define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Tryska: ")
#define MSG_RUNOUT_SENSOR _UxGT("Senzor filamentu")
#define MSG_ERR_HOMING_FAILED _UxGT("Parkování selhalo")
#define MSG_ERR_PROBING_FAILED _UxGT("Kalibrace selhala")
#define MSG_M600_TOO_COLD _UxGT("M600: Moc studený")
#define MSG_MMU2_FILAMENT_CHANGE_HEADER _UxGT("VÝMĚNA FILAMENTU")
#define MSG_MMU2_CHOOSE_FILAMENT_HEADER _UxGT("VYBERTE FILAMENT")
#define MSG_MMU2_MENU _UxGT("MMU")
#define MSG_MMU2_WRONG_FIRMWARE _UxGT("Aktual. MMU firmware!")
#define MSG_MMU2_NOT_RESPONDING _UxGT("MMU potř. pozornost.")
#define MSG_MMU2_RESUME _UxGT("Obnovit tisk")
#define MSG_MMU2_RESUMING _UxGT("Obnovování...")
#define MSG_MMU2_LOAD_FILAMENT _UxGT("Zavést filament")
#define MSG_MMU2_LOAD_ALL _UxGT("Zavést všechny")
#define MSG_MMU2_LOAD_TO_NOZZLE _UxGT("Zavést do trysky")
#define MSG_MMU2_EJECT_FILAMENT _UxGT("Vysunout filament")
#define MSG_MMU2_EJECT_FILAMENT0 _UxGT("Vysun. filament 1")
#define MSG_MMU2_EJECT_FILAMENT1 _UxGT("Vysun. filament 2")
#define MSG_MMU2_EJECT_FILAMENT2 _UxGT("Vysun. filament 3")
#define MSG_MMU2_EJECT_FILAMENT3 _UxGT("Vysun. filament 4")
#define MSG_MMU2_EJECT_FILAMENT4 _UxGT("Vysun. filament 5")
#define MSG_MMU2_UNLOAD_FILAMENT _UxGT("Vytáhnout filament")
#define MSG_MMU2_LOADING_FILAMENT _UxGT("Zavádění fil. %i...")
#define MSG_MMU2_EJECTING_FILAMENT _UxGT("Vytahování fil. ...")
#define MSG_MMU2_UNLOADING_FILAMENT _UxGT("Vysouvání fil....")
#define MSG_MMU2_ALL _UxGT("Všechny")
#define MSG_MMU2_FILAMENT0 _UxGT("Filament 1")
#define MSG_MMU2_FILAMENT1 _UxGT("Filament 2")
#define MSG_MMU2_FILAMENT2 _UxGT("Filament 3")
#define MSG_MMU2_FILAMENT3 _UxGT("Filament 4")
#define MSG_MMU2_FILAMENT4 _UxGT("Filament 5")
#define MSG_MMU2_RESET _UxGT("Resetovat MMU")
#define MSG_MMU2_RESETTING _UxGT("Resetování MMU...")
#define MSG_MMU2_EJECT_RECOVER _UxGT("Vytáhněte, klikněte")
#define MSG_MIX _UxGT("Mix")
#define MSG_MIX_COMPONENT _UxGT("Komponenta")
#define MSG_MIXER _UxGT("Mixér")
#define MSG_GRADIENT _UxGT("Přechod")
#define MSG_FULL_GRADIENT _UxGT("Celý přechod")
#define MSG_TOGGLE_MIX _UxGT("Přepnout mix")
#define MSG_CYCLE_MIX _UxGT("Střídat mix")
#define MSG_GRADIENT_MIX _UxGT("Přechod mix")
#define MSG_REVERSE_GRADIENT _UxGT("Opačný přechod")
#if LCD_WIDTH >= 20
#define MSG_ACTIVE_VTOOL _UxGT("Aktivní V-nástroj")
#define MSG_START_VTOOL _UxGT("Spustit V-nástroj")
#define MSG_END_VTOOL _UxGT("Ukončit V-nástroj")
#define MSG_GRADIENT_ALIAS _UxGT("Alias V-nástroje")
#define MSG_RESET_VTOOLS _UxGT("Resetovat V-nástroj")
#define MSG_COMMIT_VTOOL _UxGT("Uložit V-nástroj mix")
#define MSG_VTOOLS_RESET _UxGT("V-nástroj resetovat")
#else
#define MSG_ACTIVE_VTOOL _UxGT("Aktivní V-nástr.")
#define MSG_START_VTOOL _UxGT("Spustit V-nástr.")
#define MSG_END_VTOOL _UxGT("Ukončit V-nástr.")
#define MSG_GRADIENT_ALIAS _UxGT("Alias V-nástr.")
#define MSG_RESET_VTOOLS _UxGT("Reset. V-nástr.")
#define MSG_COMMIT_VTOOL _UxGT("Uložit V-nás. mix")
#define MSG_VTOOLS_RESET _UxGT("V-nástr. reset.")
#endif
#define MSG_START_Z _UxGT("Počáteční Z")
#define MSG_END_Z _UxGT(" Koncové Z")
#define MSG_BRICKOUT _UxGT("Brickout")
#define MSG_INVADERS _UxGT("Invaders")
#define MSG_SNAKE _UxGT("Sn4k3")
#define MSG_MAZE _UxGT("Bludiště")
#if LCD_HEIGHT >= 4
// Up to 3 lines allowed
#define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Stikněte tlačítko")
#define MSG_ADVANCED_PAUSE_WAITING_2 _UxGT("pro obnovení tisku")
#define MSG_PAUSE_PRINT_INIT_1 _UxGT("Parkování...")
#define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Čekejte prosím")
#define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("na zahájení")
#define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("výměny filamentu")
#define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Čekejte prosím")
#define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("na vysunuti")
#define MSG_FILAMENT_CHANGE_UNLOAD_3 _UxGT("filamentu")
#define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Vložte filament")
#define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("a stiskněte")
#define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("tlačítko...")
@@ -399,21 +508,46 @@
#define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("nahřátí trysky")
#define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Čekejte prosím")
#define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("na nahřátí tr.")
#define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Čekejte prosím")
#define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("na vysunuti")
#define MSG_FILAMENT_CHANGE_UNLOAD_3 _UxGT("filamentu")
#define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Čekejte prosím")
#define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("na zavedení")
#define MSG_FILAMENT_CHANGE_LOAD_3 _UxGT("filamentu")
#define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Vyčkejte na")
#define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("vytlačení")
#define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Klikněte pro")
#define MSG_FILAMENT_CHANGE_CONT_PURGE_2 _UxGT("ukončení")
#define MSG_FILAMENT_CHANGE_CONT_PURGE_3 _UxGT("vytlačování")
#define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Čekejte prosím")
#define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("na pokračování")
#define MSG_FILAMENT_CHANGE_RESUME_3 _UxGT("tisku")
#else // LCD_HEIGHT < 4
// Up to 2 lines allowed
#define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Stikněte tlač.")
#define MSG_ADVANCED_PAUSE_WAITING_2 _UxGT("pro obnovení")
#define MSG_PAUSE_PRINT_INIT_1 _UxGT("Parkování...")
#define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Čekejte...")
#define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Vysouvání...")
#define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Vložte, klikněte")
#define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Klikněte pro")
#define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("nahřátí")
#define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Nahřívání...")
#define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Vysouvání...")
#define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Zavádění...")
#define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Vytlačování...")
#define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Klikněte pro")
#define MSG_FILAMENT_CHANGE_CONT_PURGE_2 _UxGT("ukončení")
#define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Pokračování...")
#endif // LCD_HEIGHT < 4
#define MSG_TMC_DRIVERS _UxGT("TMC budiče")
#define MSG_TMC_CURRENT _UxGT("Proud budičů")
#define MSG_TMC_HYBRID_THRS _UxGT("Hybridní práh")
#define MSG_TMC_HOMING_THRS _UxGT("Domů bez senzorů")
#define MSG_TMC_STEPPING_MODE _UxGT("Režim kroků")
#define MSG_TMC_STEALTH_ENABLED _UxGT("StealthChop povolen")
#define MSG_SERVICE_RESET _UxGT("Reset")
#define MSG_SERVICE_IN _UxGT(" za:")
#define MSG_BACKLASH _UxGT("Vůle")
#define MSG_BACKLASH_CORRECTION _UxGT("Korekce")
#define MSG_BACKLASH_SMOOTHING _UxGT("Vyhlazení")
+25
View File
@@ -34,6 +34,8 @@
#define THIS_LANGUAGES_SPECIAL_SYMBOLS _UxGT("ÄäÖöÜüß²³")
#define WELCOME_MSG MACHINE_NAME _UxGT(" bereit")
#define MSG_YES _UxGT("JA")
#define MSG_NO _UxGT("NEIN")
#define MSG_BACK _UxGT("Zurück")
#define MSG_SD_INSERTED _UxGT("SD-Karte erkannt")
#define MSG_SD_REMOVED _UxGT("SD-Karte entfernt")
@@ -97,6 +99,7 @@
#define MSG_UBL_TOOLS _UxGT("UBL-Werkzeuge")
#define MSG_UBL_LEVEL_BED _UxGT("Unified Bed Leveling")
#define MSG_IDEX_MENU _UxGT("IDEX-Modus")
#define MSG_OFFSETS_MENU _UxGT("Werkzeugversätze")
#define MSG_IDEX_MODE_AUTOPARK _UxGT("Autom. Parken")
#define MSG_IDEX_MODE_DUPLICATE _UxGT("Duplizieren")
#define MSG_IDEX_MODE_MIRRORED_COPY _UxGT("Spiegelkopie")
@@ -196,6 +199,7 @@
#define MSG_BED_Z _UxGT("Bett Z")
#define MSG_NOZZLE _UxGT("Düse")
#define MSG_BED _UxGT("Bett")
#define MSG_CHAMBER _UxGT("Gehäuse")
#define MSG_FAN_SPEED _UxGT("Lüfter")
#define MSG_EXTRA_FAN_SPEED _UxGT("Geschw. Extralüfter")
#define MSG_FLOW _UxGT("Flussrate")
@@ -268,6 +272,9 @@
#define MSG_WATCH _UxGT("Info")
#define MSG_PREPARE _UxGT("Vorbereitung")
#define MSG_TUNE _UxGT("Justierung")
#define MSG_START_PRINT _UxGT("Starte Druck")
#define MSG_BUTTON_PRINT _UxGT("Drucke")
#define MSG_BUTTON_CANCEL _UxGT("Abbrechen")
#define MSG_PAUSE_PRINT _UxGT("SD-Druck pausieren")
#define MSG_RESUME_PRINT _UxGT("SD-Druck fortsetzen")
#define MSG_STOP_PRINT _UxGT("SD-Druck abbrechen")
@@ -309,6 +316,9 @@
#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch Selbsttest")
#define MSG_BLTOUCH_RESET _UxGT("BLTouch zurücks.")
#define MSG_BLTOUCH_DEPLOY _UxGT("BLTouch ausfahren")
#define MSG_BLTOUCH_SW_MODE _UxGT("BLTouch SW-Modus")
#define MSG_BLTOUCH_5V_MODE _UxGT("BLTouch 5V-Modus")
#define MSG_BLTOUCH_STOW _UxGT("BLTouch einfahren")
#define MSG_BLTOUCH_STOW _UxGT("BLTouch einfahren")
#define MSG_MANUAL_DEPLOY _UxGT("Z-Sonde ausfahren")
#define MSG_MANUAL_STOW _UxGT("Z-Sonde einfahren")
@@ -318,16 +328,21 @@
#define MSG_BABYSTEP_X _UxGT("Babystep X")
#define MSG_BABYSTEP_Y _UxGT("Babystep Y")
#define MSG_BABYSTEP_Z _UxGT("Babystep Z")
#define MSG_BABYSTEP_TOTAL _UxGT("Total")
#define MSG_ENDSTOP_ABORT _UxGT("Endstopp Abbr.")
#define MSG_HEATING_FAILED_LCD _UxGT("HEIZEN ERFOLGLOS")
#define MSG_HEATING_FAILED_LCD_BED _UxGT("Bett heizen fehlge.")
#define MSG_HEATING_FAILED_LCD_CHAMBER _UxGT("Geh. heizen fehlge.")
#define MSG_ERR_REDUNDANT_TEMP _UxGT("REDUND. TEMP-ABWEI.")
#define MSG_THERMAL_RUNAWAY LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT")
#define MSG_THERMAL_RUNAWAY_BED _UxGT("BETT") MSG_THERMAL_RUNAWAY
#define MSG_THERMAL_RUNAWAY_CHAMBER _UxGT("GEH.") MSG_THERMAL_RUNAWAY
#define MSG_ERR_MAXTEMP LCD_STR_THERMOMETER _UxGT(" ÜBERSCHRITTEN")
#define MSG_ERR_MINTEMP LCD_STR_THERMOMETER _UxGT(" UNTERSCHRITTEN")
#define MSG_ERR_MAXTEMP_BED _UxGT("BETT ") LCD_STR_THERMOMETER _UxGT(" ÜBERSCHRITTEN")
#define MSG_ERR_MINTEMP_BED _UxGT("BETT ") LCD_STR_THERMOMETER _UxGT(" UNTERSCHRITTEN")
#define MSG_ERR_MAXTEMP_CHAMBER _UxGT("Err: GEHÄUSE MAX TEM")
#define MSG_ERR_MINTEMP_CHAMBER _UxGT("Err: GEHÄUSE MIN TEM")
#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST
#define MSG_HALTED _UxGT("DRUCKER STOPP")
#define MSG_PLEASE_RESET _UxGT("Bitte neustarten")
@@ -446,6 +461,10 @@
#define MSG_VTOOLS_RESET _UxGT("V-Tools ist resetet")
#define MSG_START_Z _UxGT("Z Start")
#define MSG_END_Z _UxGT("Z End")
#define MSG_BRICKOUT _UxGT("Brickout")
#define MSG_INVADERS _UxGT("Invaders")
#define MSG_SNAKE _UxGT("Sn4k3")
#define MSG_MAZE _UxGT("Maze")
//
// Die Filament-Change-Bildschirme können bis zu 3 Zeilen auf einem 4-Zeilen-Display anzeigen
@@ -453,6 +472,7 @@
#if LCD_HEIGHT >= 4
#define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Knopf drücken um")
#define MSG_ADVANCED_PAUSE_WAITING_2 _UxGT("Druck fortzusetzen")
#define MSG_PAUSE_PRINT_INIT_1 _UxGT("Parken...")
#define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Warte auf den")
#define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("Start des")
#define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("Filamentwechsels...")
@@ -498,3 +518,8 @@
#define MSG_TMC_HOMING_THRS _UxGT("Sensorloses Homing")
#define MSG_TMC_STEPPING_MODE _UxGT("Schrittmodus")
#define MSG_TMC_STEALTH_ENABLED _UxGT("StealthChop einsch.")
#define MSG_SERVICE_RESET _UxGT("Reset")
#define MSG_SERVICE_IN _UxGT(" im:")
#define MSG_BACKLASH _UxGT("Spiel")
#define MSG_BACKLASH_CORRECTION _UxGT("Korrektur")
#define MSG_BACKLASH_SMOOTHING _UxGT("Glätten")
+24
View File
@@ -753,12 +753,27 @@
#ifndef MSG_START_PRINT
#define MSG_START_PRINT _UxGT("Start print")
#endif
#ifndef MSG_BUTTON_NEXT
#define MSG_BUTTON_NEXT _UxGT("Next")
#endif
#ifndef MSG_BUTTON_INIT
#define MSG_BUTTON_INIT _UxGT("Init")
#endif
#ifndef MSG_BUTTON_STOP
#define MSG_BUTTON_STOP _UxGT("Stop")
#endif
#ifndef MSG_BUTTON_PRINT
#define MSG_BUTTON_PRINT _UxGT("Print")
#endif
#ifndef MSG_BUTTON_RESET
#define MSG_BUTTON_RESET _UxGT("Reset")
#endif
#ifndef MSG_BUTTON_CANCEL
#define MSG_BUTTON_CANCEL _UxGT("Cancel")
#endif
#ifndef MSG_BUTTON_DONE
#define MSG_BUTTON_DONE _UxGT("Done")
#endif
#ifndef MSG_PAUSE_PRINT
#define MSG_PAUSE_PRINT _UxGT("Pause print")
#endif
@@ -930,6 +945,9 @@
#ifndef MSG_HEATING_FAILED_LCD_BED
#define MSG_HEATING_FAILED_LCD_BED _UxGT("Bed heating failed")
#endif
#ifndef MSG_HEATING_FAILED_LCD_CHAMBER
#define MSG_HEATING_FAILED_LCD_CHAMBER _UxGT("Chamber heating fail")
#endif
#ifndef MSG_ERR_REDUNDANT_TEMP
#define MSG_ERR_REDUNDANT_TEMP _UxGT("Err: REDUNDANT TEMP")
#endif
@@ -939,6 +957,9 @@
#ifndef MSG_THERMAL_RUNAWAY_BED
#define MSG_THERMAL_RUNAWAY_BED _UxGT("BED THERMAL RUNAWAY")
#endif
#ifndef MSG_THERMAL_RUNAWAY_CHAMBER
#define MSG_THERMAL_RUNAWAY_CHAMBER _UxGT("CHAMBER T. RUNAWAY")
#endif
#ifndef MSG_ERR_MAXTEMP
#define MSG_ERR_MAXTEMP _UxGT("Err: MAXTEMP")
#endif
@@ -1362,6 +1383,9 @@
#ifndef MSG_ADVANCED_PAUSE_WAITING_1
#define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Click to continue")
#endif
#ifndef MSG_PAUSE_PRINT_INIT_1
#define MSG_PAUSE_PRINT_INIT_1 _UxGT("Parking...")
#endif
#ifndef MSG_FILAMENT_CHANGE_INIT_1
#define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Please wait...")
#endif
+156 -29
View File
@@ -33,19 +33,25 @@
#define CHARSIZE 2
#define WELCOME_MSG MACHINE_NAME _UxGT(" prête.")
#define MSG_YES _UxGT("Oui")
#define MSG_NO _UxGT("Non")
#define MSG_BACK _UxGT("Retour")
#define MSG_SD_INSERTED _UxGT("Carte insérée")
#define MSG_SD_REMOVED _UxGT("Carte retirée")
#define MSG_LCD_ENDSTOPS _UxGT("Butées") // Max length 8 characters
#define MSG_LCD_ENDSTOPS _UxGT("Butées")
#define MSG_LCD_SOFT_ENDSTOPS _UxGT("Butées SW")
#define MSG_MAIN _UxGT("Menu principal")
#define MSG_AUTOSTART _UxGT("Demarrage auto")
#define MSG_ADVANCED_SETTINGS _UxGT("Config. avancée")
#define MSG_CONFIGURATION _UxGT("Configuration")
#define MSG_AUTOSTART _UxGT("Exéc. auto#.gcode")
#define MSG_DISABLE_STEPPERS _UxGT("Arrêter moteurs")
#define MSG_DEBUG_MENU _UxGT("Menu debug")
#define MSG_PROGRESS_BAR_TEST _UxGT("Test barre progress.")
#define MSG_AUTO_HOME _UxGT("Origine auto.")
#define MSG_AUTO_HOME_X _UxGT("Origine X Auto.")
#define MSG_AUTO_HOME_Y _UxGT("Origine Y Auto.")
#define MSG_AUTO_HOME_Z _UxGT("Origine Z Auto.")
#define MSG_AUTO_HOME_X _UxGT("Origine X auto.")
#define MSG_AUTO_HOME_Y _UxGT("Origine Y auto.")
#define MSG_AUTO_HOME_Z _UxGT("Origine Z auto.")
#define MSG_AUTO_Z_ALIGN _UxGT("Align. Z auto.")
#define MSG_LEVEL_BED_HOMING _UxGT("Origine XYZ")
#define MSG_LEVEL_BED_WAITING _UxGT("Clic pour commencer")
#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Point suivant")
@@ -59,14 +65,20 @@
#define MSG_PREHEAT_1_ALL _UxGT("Préch. " PREHEAT_1_LABEL " Tout")
#define MSG_PREHEAT_1_END MSG_PREHEAT_1 _UxGT(" buse")
#define MSG_PREHEAT_1_BEDONLY _UxGT("Préch. " PREHEAT_1_LABEL " lit")
#define MSG_PREHEAT_1_SETTINGS _UxGT("Régl. prech. " PREHEAT_1_LABEL)
#define MSG_PREHEAT_1_SETTINGS _UxGT("Régl. préch. " PREHEAT_1_LABEL)
#define MSG_PREHEAT_2 _UxGT("Préchauffage " PREHEAT_2_LABEL)
#define MSG_PREHEAT_2_N _UxGT("Préchauff. " PREHEAT_2_LABEL " ")
#define MSG_PREHEAT_2_ALL _UxGT("Préch. " PREHEAT_2_LABEL " Tout")
#define MSG_PREHEAT_2_END MSG_PREHEAT_2 _UxGT(" buse")
#define MSG_PREHEAT_2_BEDONLY _UxGT("Préch. " PREHEAT_2_LABEL " lit")
#define MSG_PREHEAT_2_SETTINGS _UxGT("Régl. prech. " PREHEAT_2_LABEL)
#define MSG_PREHEAT_2_SETTINGS _UxGT("Régl. préch. " PREHEAT_2_LABEL)
#define MSG_PREHEAT_CUSTOM _UxGT("Préchauff. perso.")
#define MSG_COOLDOWN _UxGT("Refroidir")
#define MSG_LASER_MENU _UxGT("Contrôle Laser")
#define MSG_LASER_OFF _UxGT("Laser Off")
#define MSG_LASER_ON _UxGT("Laser On")
#define MSG_LASER_POWER _UxGT("Puissance")
#define MSG_SPINDLE_REVERSE _UxGT("Inverser broches")
#define MSG_SWITCH_PS_ON _UxGT("Allumer alim.")
#define MSG_SWITCH_PS_OFF _UxGT("Eteindre alim.")
#define MSG_EXTRUDE _UxGT("Extrusion")
@@ -77,12 +89,24 @@
#define MSG_LEVEL_CORNERS _UxGT("Niveau coins")
#define MSG_NEXT_CORNER _UxGT("Coin suivant")
#define MSG_EDITING_STOPPED _UxGT("Arrêt édit. maillage")
#define MSG_USER_MENU _UxGT("Commandes perso")
#define MSG_MESH_X _UxGT("Index X")
#define MSG_MESH_Y _UxGT("Index Y")
#define MSG_MESH_EDIT_Z _UxGT("Valeur Z")
#define MSG_USER_MENU _UxGT("Commandes perso.")
#define MSG_UBL_DOING_G29 _UxGT("G29 en cours")
#define MSG_UBL_UNHOMED _UxGT("Origine XYZ d'abord")
#define MSG_UBL_TOOLS _UxGT("Outils UBL")
#define MSG_UBL_LEVEL_BED _UxGT("Niveau lit unifié")
#define MSG_IDEX_MENU _UxGT("Mode IDEX")
#define MSG_IDEX_MODE_AUTOPARK _UxGT("Auto-Park")
#define MSG_IDEX_MODE_DUPLICATE _UxGT("Duplication")
#define MSG_IDEX_MODE_MIRRORED_COPY _UxGT("Copie miroir")
#define MSG_IDEX_MODE_FULL_CTRL _UxGT("Contrôle complet")
#define MSG_OFFSETS_MENU _UxGT("Offsets Outil")
#define MSG_X_OFFSET _UxGT("Buse 2 X")
#define MSG_Y_OFFSET _UxGT("Buse 2 Y")
#define MSG_Z_OFFSET _UxGT("Buse 2 Z")
#define MSG_UBL_MANUAL_MESH _UxGT("Maillage manuel")
#define MSG_UBL_BC_INSERT _UxGT("Poser câle & mesurer")
#define MSG_UBL_BC_INSERT2 _UxGT("Mesure")
@@ -167,6 +191,7 @@
#define MSG_MOVE_Y _UxGT("Dépl. Y")
#define MSG_MOVE_Z _UxGT("Dépl. Z")
#define MSG_MOVE_E _UxGT("Extrudeur")
#define MSG_HOTEND_TOO_COLD _UxGT("Buse trop froide")
#define MSG_MOVE_01MM _UxGT("Dépl. 0.1mm")
#define MSG_MOVE_1MM _UxGT("Dépl. 1mm")
#define MSG_MOVE_10MM _UxGT("Dépl. 10mm")
@@ -174,6 +199,7 @@
#define MSG_BED_Z _UxGT("Lit Z")
#define MSG_NOZZLE _UxGT("Buse")
#define MSG_BED _UxGT("Lit")
#define MSG_CHAMBER _UxGT("Caisson")
#define MSG_FAN_SPEED _UxGT("Vitesse ventil.")
#define MSG_EXTRA_FAN_SPEED _UxGT("Extra V ventil.")
@@ -203,6 +229,7 @@
#endif
#define MSG_VE_JERK _UxGT("Ve jerk")
#define MSG_VELOCITY _UxGT("Vélocité")
#define MSG_JUNCTION_DEVIATION _UxGT("Déviat. jonct.")
#define MSG_VMAX _UxGT("Vmax ")
#define MSG_VMIN _UxGT("Vmin ")
#define MSG_VTRAV_MIN _UxGT("V dépl. min")
@@ -240,19 +267,26 @@
#define MSG_LOAD_EEPROM _UxGT("Lire config")
#define MSG_RESTORE_FAILSAFE _UxGT("Restaurer défauts")
#define MSG_INIT_EEPROM _UxGT("Initialiser EEPROM")
#define MSG_SD_UPDATE _UxGT("MàJ. SD")
#define MSG_RESET_PRINTER _UxGT("RàZ. imprimante")
#define MSG_REFRESH _UxGT("Actualiser")
#define MSG_WATCH _UxGT("Surveiller")
#define MSG_PREPARE _UxGT("Préparer")
#define MSG_TUNE _UxGT("Régler")
#define MSG_START_PRINT _UxGT("Démarrer Impr.")
#define MSG_BUTTON_PRINT _UxGT("Imprimer")
#define MSG_BUTTON_CANCEL _UxGT("Annuler")
#define MSG_PAUSE_PRINT _UxGT("Interrompre impr.")
#define MSG_RESUME_PRINT _UxGT("Reprendre impr.")
#define MSG_STOP_PRINT _UxGT("Arrêter impr.")
#define MSG_OUTAGE_RECOVERY _UxGT("Récupér. coupure")
#define MSG_CARD_MENU _UxGT("Impr. depuis SD")
#define MSG_NO_CARD _UxGT("Pas de carte")
#define MSG_DWELL _UxGT("Repos...")
#define MSG_USERWAIT _UxGT("Atten. de l'util.")
#define MSG_USERWAIT _UxGT("Attente utilis.")
#define MSG_PRINT_PAUSED _UxGT("Impr. en pause")
#define MSG_PRINT_ABORTED _UxGT("Impr. Annulée")
#define MSG_PRINTING _UxGT("Impression")
#define MSG_PRINT_ABORTED _UxGT("Impr. annulée")
#define MSG_NO_MOVE _UxGT("Moteurs bloqués.")
#define MSG_KILLED _UxGT("MORT.")
#define MSG_STOPPED _UxGT("STOPPÉ.")
@@ -264,34 +298,50 @@
#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("Ech. Rappel mm")
#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("Rappel V")
#define MSG_CONTROL_RETRACT_RECOVER_SWAPF _UxGT("Ech. Rappel V")
#define MSG_AUTORETRACT _UxGT("Retrait. Auto.")
#define MSG_AUTORETRACT _UxGT("Retrait auto.")
#define MSG_TOOL_CHANGE _UxGT("Changement outil")
#define MSG_TOOL_CHANGE_ZLIFT _UxGT("Augmenter Z")
#define MSG_SINGLENOZZLE_PRIME_SPD _UxGT("Vitesse primaire")
#define MSG_SINGLENOZZLE_RETRACT_SPD _UxGT("Vitesse retrait")
#define MSG_NOZZLE_STANDBY _UxGT("Attente buse")
#define MSG_FILAMENT_SWAP_LENGTH _UxGT("Distance retrait")
#define MSG_FILAMENTCHANGE _UxGT("Changer filament")
#define MSG_FILAMENTLOAD _UxGT("Charger fil.")
#define MSG_FILAMENTUNLOAD _UxGT("Décharger fil.")
#define MSG_FILAMENTUNLOAD_ALL _UxGT("Décharger tout")
#define MSG_INIT_SDCARD _UxGT("Init. la carte SD")
#define MSG_CHANGE_SDCARD _UxGT("Changer de carte")
#define MSG_ZPROBE_OUT _UxGT("Z sonde hors lit")
#define MSG_ZPROBE_OUT _UxGT("Sonde Z hors lit")
#define MSG_SKEW_FACTOR _UxGT("Facteur écart")
#define MSG_BLTOUCH _UxGT("BLTouch")
#define MSG_BLTOUCH_SELFTEST _UxGT("Autotest BLTouch")
#define MSG_BLTOUCH_RESET _UxGT("RaZ BLTouch")
#define MSG_BLTOUCH_DEPLOY _UxGT("Déployer BLTouch")
#define MSG_BLTOUCH_SW_MODE _UxGT("Mode BLTouch SW")
#define MSG_BLTOUCH_5V_MODE _UxGT("Mode BLTouch 5V")
#define MSG_BLTOUCH_OD_MODE _UxGT("Mode BLTouch OD")
#define MSG_BLTOUCH_STOW _UxGT("Ranger BLTouch")
#define MSG_MANUAL_DEPLOY _UxGT("Déployer Sonde Z")
#define MSG_MANUAL_STOW _UxGT("Ranger Sonde Z")
#define MSG_HOME _UxGT("Origine") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST
#define MSG_FIRST _UxGT("Premier")
#define MSG_ZPROBE_ZOFFSET _UxGT("Décalage Z")
#define MSG_BABYSTEP_X _UxGT("Babystep X")
#define MSG_BABYSTEP_Y _UxGT("Babystep Y")
#define MSG_BABYSTEP_Z _UxGT("Babystep Z")
#define MSG_BABYSTEP_TOTAL _UxGT("Total")
#define MSG_ENDSTOP_ABORT _UxGT("Butée abandon")
#define MSG_HEATING_FAILED_LCD _UxGT("Erreur de chauffe")
#define MSG_HEATING_FAILED_LCD_BED _UxGT("Erreur de chauffe lit")
#define MSG_ERR_REDUNDANT_TEMP _UxGT("Err: TEMP. REDONDANTE")
#define MSG_THERMAL_RUNAWAY _UxGT("EMBALLEMENT THERM.")
#define MSG_THERMAL_RUNAWAY_BED _UxGT("ERREUR THERMIQUE LIT")
#define MSG_ERR_MAXTEMP _UxGT("Err: TEMP. MAX")
#define MSG_ERR_MINTEMP _UxGT("Err: TEMP. MIN")
#define MSG_ERR_MAXTEMP_BED _UxGT("Err: TEMP. MAX LIT")
#define MSG_ERR_MINTEMP_BED _UxGT("Err: TEMP. MIN LIT")
#define MSG_ERR_MAXTEMP_CHAMBER _UxGT("Err: MAXTEMP CAISSON")
#define MSG_ERR_MINTEMP_CHAMBER _UxGT("Err: MINTEMP CAISSON")
#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST
#define MSG_HALTED _UxGT("IMPR. STOPPÉE")
@@ -301,7 +351,9 @@
#define MSG_SHORT_MINUTE _UxGT("m") // One character only
#define MSG_HEATING _UxGT("En chauffe...")
#define MSG_COOLING _UxGT("Refroidissement")
#define MSG_BED_HEATING _UxGT("Lit en chauffe...")
#define MSG_BED_COOLING _UxGT("Refroid. du lit...")
#define MSG_DELTA_CALIBRATE _UxGT("Calibration Delta")
#define MSG_DELTA_CALIBRATE_X _UxGT("Calibrer X")
#define MSG_DELTA_CALIBRATE_Y _UxGT("Calibrer Y")
@@ -310,6 +362,7 @@
#define MSG_DELTA_SETTINGS _UxGT("Réglages Delta")
#define MSG_DELTA_AUTO_CALIBRATE _UxGT("Calibration Auto")
#define MSG_DELTA_HEIGHT_CALIBRATE _UxGT("Hauteur Delta")
#define MSG_DELTA_Z_OFFSET_CALIBRATE _UxGT("Delta Z sonde")
#define MSG_DELTA_DIAG_ROD _UxGT("Diagonale")
#define MSG_DELTA_HEIGHT _UxGT("Hauteur")
#define MSG_DELTA_RADIUS _UxGT("Rayon")
@@ -323,9 +376,9 @@
#define MSG_MESH_LEVELING _UxGT("Niveau maillage")
#define MSG_INFO_STATS_MENU _UxGT("Stats. imprimante")
#define MSG_INFO_BOARD_MENU _UxGT("Infos carte")
#define MSG_INFO_THERMISTOR_MENU _UxGT("Thermistors")
#define MSG_INFO_THERMISTOR_MENU _UxGT("Thermistances")
#define MSG_INFO_EXTRUDERS _UxGT("Extrudeurs")
#define MSG_INFO_BAUDRATE _UxGT("Baud")
#define MSG_INFO_BAUDRATE _UxGT("Bauds")
#define MSG_INFO_PROTOCOL _UxGT("Protocole")
#define MSG_CASE_LIGHT _UxGT("Lumière caisson")
#define MSG_CASE_LIGHT_BRIGHTNESS _UxGT("Luminosité")
@@ -358,35 +411,109 @@
#define MSG_FILAMENT_CHANGE_OPTION_PURGE _UxGT("Purger encore")
#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Reprendre impr.")
#define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Buse: ")
#define MSG_RUNOUT_SENSOR _UxGT("Capteur Fil.")
#define MSG_ERR_HOMING_FAILED _UxGT("Echec origine")
#define MSG_ERR_PROBING_FAILED _UxGT("Echec sonde")
#define MSG_M600_TOO_COLD _UxGT("M600: Trop froid")
#define MSG_MMU2_FILAMENT_CHANGE_HEADER _UxGT("CHANGER FILAMENT")
#define MSG_MMU2_CHOOSE_FILAMENT_HEADER _UxGT("CHOISIR FILAMENT")
#define MSG_MMU2_MENU _UxGT("MMU")
#define MSG_MMU2_WRONG_FIRMWARE _UxGT("Update MMU firmware!")
#define MSG_MMU2_NOT_RESPONDING _UxGT("MMU ne répond plus")
#define MSG_MMU2_RESUME _UxGT("Continuer impr.")
#define MSG_MMU2_RESUMING _UxGT("Reprise...")
#define MSG_MMU2_LOAD_FILAMENT _UxGT("Charger filament")
#define MSG_MMU2_LOAD_ALL _UxGT("Charger tous")
#define MSG_MMU2_LOAD_TO_NOZZLE _UxGT("Charger dans buse")
#define MSG_MMU2_EJECT_FILAMENT _UxGT("Ejecter filament")
#define MSG_MMU2_EJECT_FILAMENT0 _UxGT("Ejecter fil. 1")
#define MSG_MMU2_EJECT_FILAMENT1 _UxGT("Ejecter fil. 2")
#define MSG_MMU2_EJECT_FILAMENT2 _UxGT("Ejecter fil. 3")
#define MSG_MMU2_EJECT_FILAMENT3 _UxGT("Ejecter fil. 4")
#define MSG_MMU2_EJECT_FILAMENT4 _UxGT("Ejecter fil. 5")
#define MSG_MMU2_UNLOAD_FILAMENT _UxGT("Retrait filament")
#define MSG_MMU2_LOADING_FILAMENT _UxGT("Chargem. fil. %i...")
#define MSG_MMU2_EJECTING_FILAMENT _UxGT("Ejection fil...")
#define MSG_MMU2_UNLOADING_FILAMENT _UxGT("Retrait fil....")
#define MSG_MMU2_ALL _UxGT("Tous")
#define MSG_MMU2_FILAMENT0 _UxGT("Filament 1")
#define MSG_MMU2_FILAMENT1 _UxGT("Filament 2")
#define MSG_MMU2_FILAMENT2 _UxGT("Filament 3")
#define MSG_MMU2_FILAMENT3 _UxGT("Filament 4")
#define MSG_MMU2_FILAMENT4 _UxGT("Filament 5")
#define MSG_MMU2_RESET _UxGT("Réinit. MMU")
#define MSG_MMU2_RESETTING _UxGT("Réinit. MMU...")
#define MSG_MMU2_EJECT_RECOVER _UxGT("Retrait, click")
#define MSG_MIX _UxGT("Mix")
#define MSG_MIX_COMPONENT _UxGT("Composante")
#define MSG_MIXER _UxGT("Mixeur")
#define MSG_GRADIENT _UxGT("Dégradé")
#define MSG_FULL_GRADIENT _UxGT("Dégradé complet")
#define MSG_TOGGLE_MIX _UxGT("Toggle mix")
#define MSG_CYCLE_MIX _UxGT("Cycle mix")
#define MSG_GRADIENT_MIX _UxGT("Mix dégradé")
#define MSG_REVERSE_GRADIENT _UxGT("Inverser dégradé")
#define MSG_ACTIVE_VTOOL _UxGT("Active V-tool")
#define MSG_START_VTOOL _UxGT("Début V-tool")
#define MSG_END_VTOOL _UxGT(" Fin V-tool")
#define MSG_GRADIENT_ALIAS _UxGT("Alias V-tool")
#define MSG_RESET_VTOOLS _UxGT("Réinit. V-tools")
#define MSG_COMMIT_VTOOL _UxGT("Valider Mix V-tool")
#define MSG_VTOOLS_RESET _UxGT("V-tools réinit. ok")
#define MSG_START_Z _UxGT("Début Z")
#define MSG_END_Z _UxGT(" Fin Z")
#define MSG_BRICKOUT _UxGT("Casse-briques")
#define MSG_INVADERS _UxGT("Invaders")
#define MSG_SNAKE _UxGT("Sn4k3")
#define MSG_MAZE _UxGT("Labyrinthe")
#if LCD_HEIGHT >= 4
// Up to 3 lines allowed
#define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Attente Démarrage")
#define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("du filament")
#define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("changer")
#define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Attente de")
#define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("décharger filament")
#define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Presser bouton")
#define MSG_ADVANCED_PAUSE_WAITING_2 _UxGT("pour reprendre")
#define MSG_PAUSE_PRINT_INIT_1 _UxGT("Parking...")
#define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Attente filament")
#define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("pour démarrer")
#define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Insérer filament")
#define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("et app. bouton")
#define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("pour continuer...")
#define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Presser le bouton...")
#define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("Pr chauffer la buse")
#define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("pr chauffer la buse")
#define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Buse en chauffe")
#define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Patientez SVP...")
#define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Attente de")
#define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("Chargement filament")
#define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Patienter SVP...")
#define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Attente")
#define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("retrait du filament")
#define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Attente")
#define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("chargement filament")
#define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Attente")
#define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("Purger filament")
#define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Attente impression")
#define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("pour reprendre")
#define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("Purge filament")
#define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Presser pour finir")
#define MSG_FILAMENT_CHANGE_CONT_PURGE_2 _UxGT("la purge du filament")
#define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Attente reprise")
#define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("impression")
#else // LCD_HEIGHT < 4
// Up to 2 lines allowed
#define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Patientez...")
#define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Ejection...")
#define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Insérer et clic")
#define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Presser pr continuer")
#define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Patience...")
#define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Insérer fil.")
#define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Chauffer ?")
#define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Chauffage...")
#define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Ejecting...")
#define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Chargement...")
#define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Purge...")
#define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Terminer ?")
#define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Reprise...")
#endif // LCD_HEIGHT < 4
#define MSG_TMC_DRIVERS _UxGT("Drivers TMC")
#define MSG_TMC_CURRENT _UxGT("Courant driver")
#define MSG_TMC_HYBRID_THRS _UxGT("Seuil hybride")
#define MSG_TMC_HOMING_THRS _UxGT("Home sans capteur")
#define MSG_TMC_STEPPING_MODE _UxGT("Mode pas à pas")
#define MSG_TMC_STEALTH_ENABLED _UxGT("StealthChop activé")
#define MSG_SERVICE_RESET _UxGT("Réinit.")
#define MSG_SERVICE_IN _UxGT(" dans:")
#define MSG_BACKLASH _UxGT("Backlash")
#define MSG_BACKLASH_CORRECTION _UxGT("Correction")
#define MSG_BACKLASH_SMOOTHING _UxGT("Lissage")
+2
View File
@@ -330,9 +330,11 @@
#define MSG_ENDSTOP_ABORT _UxGT("Finecorsa annullati")
#define MSG_HEATING_FAILED_LCD _UxGT("Riscald. Fallito")
#define MSG_HEATING_FAILED_LCD_BED _UxGT("Risc. piatto fallito")
#define MSG_HEATING_FAILED_LCD_CHAMBER _UxGT("Risc. camera fallito")
#define MSG_ERR_REDUNDANT_TEMP _UxGT("Err: TEMP RIDONDANTE")
#define MSG_THERMAL_RUNAWAY _UxGT("TEMP FUORI CONTROLLO")
#define MSG_THERMAL_RUNAWAY_BED _UxGT("TEMP PIAT.FUORI CTRL")
#define MSG_THERMAL_RUNAWAY_CHAMBER _UxGT("T.CAMERA FUORI CTRL")
#define MSG_ERR_MAXTEMP _UxGT("Err: TEMP MASSIMA")
#define MSG_ERR_MINTEMP _UxGT("Err: TEMP MINIMA")
#define MSG_ERR_MAXTEMP_BED _UxGT("Err: TEMP MAX PIATTO")
+14
View File
@@ -40,6 +40,8 @@
#define THIS_LANGUAGES_SPECIAL_SYMBOLS _UxGT("äÄáÁčČďĎéÉíÍĺĹľĽňŇóÓôÔŕŔšŠťŤúÚýÝžŽ³")
#define WELCOME_MSG MACHINE_NAME _UxGT(" pripravená.")
#define MSG_YES _UxGT("ÁNO")
#define MSG_NO _UxGT("NIE")
#define MSG_BACK _UxGT("Naspäť")
#define MSG_SD_INSERTED _UxGT("Karta vložená")
#define MSG_SD_REMOVED _UxGT("Karta vybraná")
@@ -104,6 +106,7 @@
#define MSG_UBL_TOOLS _UxGT("Nástroje UBL")
#define MSG_UBL_LEVEL_BED _UxGT("UBL rovnanie")
#define MSG_IDEX_MENU _UxGT("IDEX režim")
#define MSG_OFFSETS_MENU _UxGT("Offset nástrojov")
#define MSG_IDEX_MODE_AUTOPARK _UxGT("Auto-parkovanie")
#define MSG_IDEX_MODE_DUPLICATE _UxGT("Duplikácia")
#define MSG_IDEX_MODE_MIRRORED_COPY _UxGT("Zrkadlená kópia")
@@ -276,6 +279,9 @@
#define MSG_WATCH _UxGT("Info. obrazovka")
#define MSG_PREPARE _UxGT("Príprava tlače")
#define MSG_TUNE _UxGT("Doladenie tlače")
#define MSG_START_PRINT _UxGT("Spustiť tlač")
#define MSG_BUTTON_PRINT _UxGT("Tlačiť")
#define MSG_BUTTON_CANCEL _UxGT("Zrušiť")
#define MSG_PAUSE_PRINT _UxGT("Pozastaviť tlač")
#define MSG_RESUME_PRINT _UxGT("Obnoviť tlač")
#define MSG_STOP_PRINT _UxGT("Zastaviť tlač")
@@ -330,6 +336,7 @@
#define MSG_BABYSTEP_X _UxGT("Babystep X")
#define MSG_BABYSTEP_Y _UxGT("Babystep Y")
#define MSG_BABYSTEP_Z _UxGT("Babystep Z")
#define MSG_BABYSTEP_TOTAL _UxGT("Celkom")
#define MSG_ENDSTOP_ABORT _UxGT("Zastavenie Endstop")
#define MSG_HEATING_FAILED_LCD _UxGT("Chyba ohrevu")
#define MSG_HEATING_FAILED_LCD_BED _UxGT("Chyba ohrevu podl.")
@@ -461,6 +468,10 @@
#define MSG_VTOOLS_RESET _UxGT("V-tools resetované")
#define MSG_START_Z _UxGT("Počiat.Z")
#define MSG_END_Z _UxGT("Konečn.Z")
#define MSG_BRICKOUT _UxGT("Brickout")
#define MSG_INVADERS _UxGT("Nájazdníci")
#define MSG_SNAKE _UxGT("Had")
#define MSG_MAZE _UxGT("Bludisko")
//
// Filament Change screens show up to 3 lines on a 4-line display
@@ -515,3 +526,6 @@
#define MSG_SERVICE_RESET _UxGT("Vynulovať")
#define MSG_SERVICE_IN _UxGT(" za:")
#define MSG_BACKLASH _UxGT("Kompenz. vôle")
#define MSG_BACKLASH_CORRECTION _UxGT("Korekcia")
#define MSG_BACKLASH_SMOOTHING _UxGT("Vyhladzovanie")
+16 -5
View File
@@ -167,9 +167,9 @@ DEFINE_MENU_EDIT_ITEM(float3); // 123 right-justified
DEFINE_MENU_EDIT_ITEM(float52); // 123.45
DEFINE_MENU_EDIT_ITEM(float43); // 1.234
DEFINE_MENU_EDIT_ITEM(float5); // 12345 right-justified
DEFINE_MENU_EDIT_ITEM(float51); // +1234.5
DEFINE_MENU_EDIT_ITEM(float51); // 1234.5 right-justified
DEFINE_MENU_EDIT_ITEM(float51sign); // +1234.5
DEFINE_MENU_EDIT_ITEM(float52sign); // +123.45
DEFINE_MENU_EDIT_ITEM(float62); // 1234.56 right-justified
DEFINE_MENU_EDIT_ITEM(long5); // 12345 right-justified
void MenuItem_bool::action_edit(PGM_P pstr, bool *ptr, screenFunc_t callback) {
@@ -268,6 +268,8 @@ void MarlinUI::goto_screen(screenFunc_t screen, const uint16_t encoder/*=0*/, co
#if HAS_GRAPHICAL_LCD
drawing_screen = false;
#endif
set_ui_selection(false);
}
}
@@ -436,12 +438,21 @@ void _lcd_draw_homing() {
void _lcd_toggle_bed_leveling() { set_bed_leveling_enabled(!planner.leveling_active); }
#endif
void do_select_screen(PGM_P const yes, PGM_P const no, bool &yesno, PGM_P const pref, const char * const string, PGM_P const suff) {
//
// Selection screen presents a prompt and two options
//
bool ui_selection; // = false
void set_ui_selection(const bool sel) { ui_selection = sel; }
void do_select_screen(PGM_P const yes, PGM_P const no, selectFunc_t yesFunc, selectFunc_t noFunc, PGM_P const pref, const char * const string/*=NULL*/, PGM_P const suff/*=NULL*/) {
if (ui.encoderPosition) {
yesno = int16_t(ui.encoderPosition) > 0;
ui_selection = int16_t(ui.encoderPosition) > 0;
ui.encoderPosition = 0;
}
draw_select_screen(yes, no, yesno, pref, string, suff);
const bool got_click = ui.use_click();
if (got_click || ui.should_draw()) {
draw_select_screen(yes, no, ui_selection, pref, string, suff);
if (got_click) { ui_selection ? yesFunc() : noFunc(); }
}
}
#endif // HAS_LCD_MENU
+18 -11
View File
@@ -24,6 +24,8 @@
#include "../ultralcd.h"
#include "../../inc/MarlinConfig.h"
#include "limits.h"
extern int8_t encoderLine, encoderTopLine, screen_items;
extern bool screen_changed;
@@ -54,21 +56,24 @@ DECLARE_MENU_EDIT_TYPE(float, float3, ftostr3, 1 ); // 123
DECLARE_MENU_EDIT_TYPE(float, float52, ftostr52, 100 ); // 123.45
DECLARE_MENU_EDIT_TYPE(float, float43, ftostr43sign, 1000 ); // 1.234
DECLARE_MENU_EDIT_TYPE(float, float5, ftostr5rj, 0.01f ); // 12345 right-justified
DECLARE_MENU_EDIT_TYPE(float, float51, ftostr51sign, 10 ); // +1234.5
DECLARE_MENU_EDIT_TYPE(float, float51, ftostr51rj, 10 ); // 1234.5 right-justified
DECLARE_MENU_EDIT_TYPE(float, float51sign, ftostr51sign, 10 ); // +1234.5
DECLARE_MENU_EDIT_TYPE(float, float52sign, ftostr52sign, 100 ); // +123.45
DECLARE_MENU_EDIT_TYPE(float, float62, ftostr62rj, 100 ); // 1234.56 right-justified
DECLARE_MENU_EDIT_TYPE(uint32_t, long5, ftostr5rj, 0.01f ); // 12345 right-justified
////////////////////////////////////////////
///////// Menu Item Draw Functions /////////
////////////////////////////////////////////
void draw_edit_screen(PGM_P const pstr, const char* const value=NULL);
typedef void (*selectFunc_t)();
void draw_select_screen(PGM_P const yes, PGM_P const no, const bool yesno, PGM_P const pref, const char * const string, PGM_P const suff);
void do_select_screen(PGM_P const yes, PGM_P const no, bool &yesno, PGM_P const pref, const char * const string=NULL, PGM_P const suff=NULL);
inline void do_select_screen_yn(bool &yesno, PGM_P const pref, const char * const string, PGM_P const suff) {
do_select_screen(PSTR(MSG_YES), PSTR(MSG_NO), yesno, pref, string, suff);
void set_ui_selection(const bool sel);
void do_select_screen(PGM_P const yes, PGM_P const no, selectFunc_t yesFunc, selectFunc_t noFunc, PGM_P const pref, const char * const string=NULL, PGM_P const suff=NULL);
inline void do_select_screen_yn(selectFunc_t yesFunc, selectFunc_t noFunc, PGM_P const pref, const char * const string=NULL, PGM_P const suff=NULL) {
do_select_screen(PSTR(MSG_YES), PSTR(MSG_NO), yesFunc, noFunc, pref, string, suff);
}
void draw_edit_screen(PGM_P const pstr, const char* const value=NULL);
void draw_menu_item(const bool sel, const uint8_t row, PGM_P const pstr, const char pre_char, const char post_char);
void draw_menu_item_static(const uint8_t row, PGM_P const pstr, const bool center=true, const bool invert=false, const char *valstr=NULL);
void _draw_menu_item_edit(const bool sel, const uint8_t row, PGM_P const pstr, const char* const data, const bool pgm);
@@ -119,9 +124,9 @@ DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float3); // 123 right-justif
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float52); // 123.45
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float43); // 1.234
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float5); // 12345 right-justified
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float51); // +1234.5
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float51); // 1234.5 right-justified
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float51sign); // +1234.5
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float52sign); // +123.45
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float62); // 1234.56 right-justified
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(long5); // 12345 right-justified
#define draw_menu_item_edit_bool(sel, row, pstr, pstr2, data, ...) DRAW_BOOL_SETTING(sel, row, pstr, data)
@@ -179,8 +184,10 @@ class TMenuItem : MenuItemBase {
static char* to_string(const int16_t value) { return NAME::strfunc(unscale(value)); }
public:
static void action_edit(PGM_P const pstr, type_t * const ptr, const type_t minValue, const type_t maxValue, const screenFunc_t callback=NULL, const bool live=false) {
const int16_t minv = scale(minValue);
init(pstr, ptr, minv, int16_t(scale(maxValue)) - minv, int16_t(scale(*ptr)) - minv, edit, callback, live);
// Make sure minv and maxv fit within int16_t
const int16_t minv = MAX(scale(minValue), INT16_MIN),
maxv = MIN(scale(maxValue), INT16_MAX);
init(pstr, ptr, minv, maxv - minv, scale(*ptr) - minv, edit, callback, live);
}
static void edit() { MenuItemBase::edit(to_string, load); }
};
@@ -199,8 +206,8 @@ DECLARE_MENU_EDIT_ITEM(float52);
DECLARE_MENU_EDIT_ITEM(float43);
DECLARE_MENU_EDIT_ITEM(float5);
DECLARE_MENU_EDIT_ITEM(float51);
DECLARE_MENU_EDIT_ITEM(float51sign);
DECLARE_MENU_EDIT_ITEM(float52sign);
DECLARE_MENU_EDIT_ITEM(float62);
DECLARE_MENU_EDIT_ITEM(long5);
class MenuItem_bool {
+10 -13
View File
@@ -571,14 +571,14 @@ void menu_backlash();
START_MENU();
MENU_BACK(MSG_ADVANCED_SETTINGS);
#define EDIT_QSTEPS(Q) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float62, MSG_##Q##STEPS, &planner.settings.axis_steps_per_mm[_AXIS(Q)], 5, 9999, _planner_refresh_positioning)
#define EDIT_QSTEPS(Q) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float51, MSG_##Q##STEPS, &planner.settings.axis_steps_per_mm[_AXIS(Q)], 5, 9999, _planner_refresh_positioning)
EDIT_QSTEPS(A);
EDIT_QSTEPS(B);
EDIT_QSTEPS(C);
#if ENABLED(DISTINCT_E_FACTORS)
#define EDIT_ESTEPS(N,E) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float62, MSG_E##N##STEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(E)], 5, 9999, _planner_refresh_e##E##_positioning)
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float62, MSG_ESTEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(active_extruder)], 5, 9999, _planner_refresh_positioning);
#define EDIT_ESTEPS(N,E) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float51, MSG_E##N##STEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(E)], 5, 9999, _planner_refresh_e##E##_positioning)
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float51, MSG_ESTEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(active_extruder)], 5, 9999, _planner_refresh_positioning);
EDIT_ESTEPS(1,0);
EDIT_ESTEPS(2,1);
#if E_STEPPERS > 2
@@ -594,7 +594,7 @@ void menu_backlash();
#endif // E_STEPPERS > 3
#endif // E_STEPPERS > 2
#elif E_STEPPERS
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float62, MSG_ESTEPS, &planner.settings.axis_steps_per_mm[E_AXIS], 5, 9999, _planner_refresh_positioning);
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float51, MSG_ESTEPS, &planner.settings.axis_steps_per_mm[E_AXIS], 5, 9999, _planner_refresh_positioning);
#endif
END_MENU();
@@ -604,16 +604,13 @@ void menu_backlash();
#include "../../module/configuration_store.h"
static void lcd_init_eeprom() {
ui.completion_feedback(settings.init_eeprom());
ui.goto_previous_screen();
}
static void lcd_init_eeprom_confirm() {
START_MENU();
MENU_BACK(MSG_ADVANCED_SETTINGS);
MENU_ITEM(function, MSG_INIT_EEPROM, lcd_init_eeprom);
END_MENU();
do_select_screen(
PSTR(MSG_BUTTON_INIT), PSTR(MSG_BUTTON_CANCEL),
[]{ ui.completion_feedback(settings.init_eeprom()); },
ui.goto_previous_screen,
PSTR(MSG_INIT_EEPROM), NULL, PSTR("?")
);
}
#endif
+17 -17
View File
@@ -50,13 +50,6 @@ static_assert(LEVEL_CORNERS_Z_HOP >= 0, "LEVEL_CORNERS_Z_HOP must be >= 0. Pleas
static bool leveling_was_active = false;
#endif
static inline void _lcd_level_bed_corners_back() {
#if HAS_LEVELING
set_bed_leveling_enabled(leveling_was_active);
#endif
ui.goto_previous_screen_no_defer();
}
/**
* Level corners, starting in the front-left corner.
*/
@@ -94,17 +87,23 @@ static inline void _lcd_goto_next_corner() {
}
static inline void menu_level_bed_corners() {
START_MENU();
MENU_ITEM(function,
#if ENABLED(LEVEL_CENTER_TOO)
MSG_LEVEL_BED_NEXT_POINT
#else
MSG_NEXT_CORNER
#endif
, _lcd_goto_next_corner
do_select_screen(
PSTR(MSG_BUTTON_NEXT), PSTR(MSG_BUTTON_DONE),
_lcd_goto_next_corner,
[]{
#if HAS_LEVELING
set_bed_leveling_enabled(leveling_was_active);
#endif
ui.goto_previous_screen_no_defer();
},
PSTR(
#if ENABLED(LEVEL_CENTER_TOO)
MSG_LEVEL_BED_NEXT_POINT
#else
MSG_NEXT_CORNER
#endif
), NULL, PSTR("?")
);
MENU_ITEM(function, MSG_BACK, _lcd_level_bed_corners_back);
END_MENU();
}
static inline void _lcd_level_bed_corners_homing() {
@@ -112,6 +111,7 @@ static inline void _lcd_level_bed_corners_homing() {
if (all_axes_homed()) {
bed_corner = 0;
ui.goto_screen(menu_level_bed_corners);
set_ui_selection(true);
_lcd_goto_next_corner();
}
}
+1
View File
@@ -46,3 +46,4 @@ void menu_game() {
}
#endif // HAS_GAME_MENU
@@ -44,6 +44,8 @@ static void lcd_power_loss_recovery_cancel() {
ui.return_to_status();
}
// TODO: Display long filename with Cancel/Resume buttons
// Requires supporting methods in PLR class.
void menu_job_recovery() {
ui.defer_status_screen();
START_MENU();
+11 -4
View File
@@ -101,10 +101,7 @@
}
void menu_abort_confirm() {
START_MENU();
MENU_BACK(MSG_MAIN);
MENU_ITEM(function, MSG_STOP_PRINT, lcd_abort_job);
END_MENU();
do_select_screen(PSTR(MSG_BUTTON_STOP), PSTR(MSG_BACK), lcd_abort_job, ui.goto_previous_screen, PSTR(MSG_STOP_PRINT), NULL, PSTR("?"));
}
#endif // MACHINE_CAN_STOP
@@ -139,6 +136,16 @@ void menu_led();
#endif
#endif
#if HAS_GAME_MENU
void menu_game();
#elif ENABLED(MARLIN_BRICKOUT)
void lcd_goto_brickout();
#elif ENABLED(MARLIN_INVADERS)
void lcd_goto_invaders();
#elif ENABLED(MARLIN_SNAKE)
void lcd_goto_snake();
#endif
void menu_main() {
START_MENU();
MENU_BACK(MSG_WATCH);
+10 -10
View File
@@ -250,17 +250,17 @@ void lcd_mixer_mix_edit() {
//
// Reset All V-Tools
//
inline void _lcd_reset_vtools() {
LCD_MESSAGEPGM(MSG_VTOOLS_RESET);
ui.return_to_status();
mixer.reset_vtools();
}
void menu_mixer_vtools_reset_confirm() {
START_MENU();
MENU_BACK(MSG_BACK);
MENU_ITEM(function, MSG_RESET_VTOOLS, _lcd_reset_vtools);
END_MENU();
do_select_screen(
PSTR(MSG_BUTTON_RESET), PSTR(MSG_BUTTON_CANCEL),
[]{
mixer.reset_vtools();
LCD_MESSAGEPGM(MSG_VTOOLS_RESET);
ui.return_to_status();
},
ui.goto_previous_screen,
PSTR(MSG_RESET_VTOOLS), NULL, PSTR("?")
);
}
void menu_mixer() {
+5 -11
View File
@@ -81,17 +81,12 @@ inline void sdcard_start_selected_file() {
#if ENABLED(SD_MENU_CONFIRM_START)
bool do_print_file;
void menu_sd_confirm() {
if (ui.should_draw())
do_select_screen(PSTR(MSG_BUTTON_PRINT), PSTR(MSG_BUTTON_CANCEL), do_print_file, PSTR(MSG_START_PRINT " "), card.longest_filename(), PSTR("?"));
if (ui.use_click()) {
if (do_print_file)
sdcard_start_selected_file();
else
ui.goto_previous_screen();
}
do_select_screen(
PSTR(MSG_BUTTON_PRINT), PSTR(MSG_BUTTON_CANCEL),
sdcard_start_selected_file, ui.goto_previous_screen,
PSTR(MSG_START_PRINT " "), card.longest_filename(), PSTR("?")
);
}
#endif
@@ -106,7 +101,6 @@ class MenuItem_sdfile {
sd_items = screen_items;
#endif
#if ENABLED(SD_MENU_CONFIRM_START)
do_print_file = false;
MenuItem_submenu::action(menu_sd_confirm);
#else
sdcard_start_selected_file();
+18 -38
View File
@@ -1,6 +1,6 @@
/**
* Marlin 3D Printer Firmware
* Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
* Copyright (C) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
@@ -31,52 +31,32 @@
#include "menu.h"
#include "../../module/printcounter.h"
inline void _lcd_reset_service(const int index) {
print_job_timer.resetServiceInterval(index);
BUZZ(200, 404);
ui.reset_status();
ui.return_to_status();
inline void _menu_service(const int index, PGM_P const name) {
char sram[30];
strncpy_P(sram, name, 29);
do_select_screen(
PSTR(MSG_BUTTON_RESET), PSTR(MSG_BUTTON_CANCEL),
[]{
print_job_timer.resetServiceInterval(index);
ui.completion_feedback(true);
ui.reset_status();
ui.return_to_status();
},
ui.goto_previous_screen,
PSTR(MSG_SERVICE_RESET), sram, PSTR("?")
);
}
#if SERVICE_INTERVAL_1 > 0
void menu_action_reset_service1() { _lcd_reset_service(1); }
void menu_service1() { _menu_service(1, PSTR(SERVICE_NAME_1)); }
#endif
#if SERVICE_INTERVAL_2 > 0
void menu_action_reset_service2() { _lcd_reset_service(2); }
void menu_service2() { _menu_service(2, PSTR(SERVICE_NAME_2)); }
#endif
#if SERVICE_INTERVAL_3 > 0
void menu_action_reset_service3() { _lcd_reset_service(3); }
#endif
inline void _menu_service(const int index) {
START_MENU();
MENU_BACK(MSG_MAIN);
switch (index) {
#if SERVICE_INTERVAL_1 > 0
case 1: MENU_ITEM(function, MSG_SERVICE_RESET, menu_action_reset_service1); break;
#endif
#if SERVICE_INTERVAL_2 > 0
case 2: MENU_ITEM(function, MSG_SERVICE_RESET, menu_action_reset_service2); break;
#endif
#if SERVICE_INTERVAL_3 > 0
case 3: MENU_ITEM(function, MSG_SERVICE_RESET, menu_action_reset_service3); break;
#endif
}
END_MENU();
}
#if SERVICE_INTERVAL_1 > 0
void menu_service1() { _menu_service(1); }
#endif
#if SERVICE_INTERVAL_2 > 0
void menu_service2() { _menu_service(2); }
#endif
#if SERVICE_INTERVAL_3 > 0
void menu_service3() { _menu_service(3); }
void menu_service3() { _menu_service(3, PSTR(SERVICE_NAME_3)); }
#endif
#endif // HAS_LCD_MENU && HAS_SERVICE_INTERVALS && PRINTCOUNTER
+42 -42
View File
@@ -32,7 +32,7 @@
#include "../../module/stepper_indirection.h"
#include "../../feature/tmc_util.h"
#define TMC_EDIT_STORED_I_RMS(ST) MENU_ITEM_EDIT_CALLBACK(uint16_4, MSG_##ST, &stepper##ST.val_mA, 100, 3000, refresh_stepper_current_##ST)
#define TMC_EDIT_STORED_I_RMS(ST,MSG) MENU_ITEM_EDIT_CALLBACK(uint16_4, MSG, &stepper##ST.val_mA, 100, 3000, refresh_stepper_current_##ST)
#if AXIS_IS_TMC(X)
void refresh_stepper_current_X() { stepperX.refresh_stepper_current(); }
@@ -78,50 +78,50 @@ void menu_tmc_current() {
START_MENU();
MENU_BACK(MSG_TMC_DRIVERS);
#if AXIS_IS_TMC(X)
TMC_EDIT_STORED_I_RMS(X);
TMC_EDIT_STORED_I_RMS(X, MSG_X);
#endif
#if AXIS_IS_TMC(Y)
TMC_EDIT_STORED_I_RMS(Y);
TMC_EDIT_STORED_I_RMS(Y, MSG_Y);
#endif
#if AXIS_IS_TMC(Z)
TMC_EDIT_STORED_I_RMS(Z);
TMC_EDIT_STORED_I_RMS(Z, MSG_Z);
#endif
#if AXIS_IS_TMC(X2)
TMC_EDIT_STORED_I_RMS(X2);
TMC_EDIT_STORED_I_RMS(X2, MSG_X2);
#endif
#if AXIS_IS_TMC(Y2)
TMC_EDIT_STORED_I_RMS(Y2);
TMC_EDIT_STORED_I_RMS(Y2, MSG_Y2);
#endif
#if AXIS_IS_TMC(Z2)
TMC_EDIT_STORED_I_RMS(Z2);
TMC_EDIT_STORED_I_RMS(Z2, MSG_Z2);
#endif
#if AXIS_IS_TMC(Z3)
TMC_EDIT_STORED_I_RMS(Z3);
TMC_EDIT_STORED_I_RMS(Z3, MSG_Z3);
#endif
#if AXIS_IS_TMC(E0)
TMC_EDIT_STORED_I_RMS(E0);
TMC_EDIT_STORED_I_RMS(E0, MSG_E1);
#endif
#if AXIS_IS_TMC(E1)
TMC_EDIT_STORED_I_RMS(E1);
TMC_EDIT_STORED_I_RMS(E1, MSG_E2);
#endif
#if AXIS_IS_TMC(E2)
TMC_EDIT_STORED_I_RMS(E2);
TMC_EDIT_STORED_I_RMS(E2, MSG_E3);
#endif
#if AXIS_IS_TMC(E3)
TMC_EDIT_STORED_I_RMS(E3);
TMC_EDIT_STORED_I_RMS(E3, MSG_E4);
#endif
#if AXIS_IS_TMC(E4)
TMC_EDIT_STORED_I_RMS(E4);
TMC_EDIT_STORED_I_RMS(E4, MSG_E5);
#endif
#if AXIS_IS_TMC(E5)
TMC_EDIT_STORED_I_RMS(E5);
TMC_EDIT_STORED_I_RMS(E5, MSG_E6);
#endif
END_MENU();
}
#if ENABLED(HYBRID_THRESHOLD)
#define TMC_EDIT_STORED_HYBRID_THRS(ST) MENU_ITEM_EDIT_CALLBACK(uint8, MSG_##ST, &stepper##ST.stored.hybrid_thrs, 0, 255, refresh_hybrid_thrs_##ST);
#define TMC_EDIT_STORED_HYBRID_THRS(ST, MSG) MENU_ITEM_EDIT_CALLBACK(uint8, MSG, &stepper##ST.stored.hybrid_thrs, 0, 255, refresh_hybrid_thrs_##ST);
#if AXIS_HAS_STEALTHCHOP(X)
void refresh_hybrid_thrs_X() { stepperX.refresh_hybrid_thrs(planner.settings.axis_steps_per_mm[X_AXIS]); }
@@ -167,43 +167,43 @@ void menu_tmc_current() {
START_MENU();
MENU_BACK(MSG_TMC_DRIVERS);
#if AXIS_HAS_STEALTHCHOP(X)
TMC_EDIT_STORED_HYBRID_THRS(X);
TMC_EDIT_STORED_HYBRID_THRS(X, MSG_X);
#endif
#if AXIS_HAS_STEALTHCHOP(Y)
TMC_EDIT_STORED_HYBRID_THRS(Y);
TMC_EDIT_STORED_HYBRID_THRS(Y, MSG_Y);
#endif
#if AXIS_HAS_STEALTHCHOP(Z)
TMC_EDIT_STORED_HYBRID_THRS(Z);
TMC_EDIT_STORED_HYBRID_THRS(Z, MSG_Z);
#endif
#if AXIS_HAS_STEALTHCHOP(X2)
TMC_EDIT_STORED_HYBRID_THRS(X2);
TMC_EDIT_STORED_HYBRID_THRS(X2, MSG_X2);
#endif
#if AXIS_HAS_STEALTHCHOP(Y2)
TMC_EDIT_STORED_HYBRID_THRS(Y2);
TMC_EDIT_STORED_HYBRID_THRS(Y2, MSG_Y2);
#endif
#if AXIS_HAS_STEALTHCHOP(Z2)
TMC_EDIT_STORED_HYBRID_THRS(Z2);
TMC_EDIT_STORED_HYBRID_THRS(Z2, MSG_Z2);
#endif
#if AXIS_HAS_STEALTHCHOP(Z3)
TMC_EDIT_STORED_HYBRID_THRS(Z3);
TMC_EDIT_STORED_HYBRID_THRS(Z3, MSG_Z3);
#endif
#if AXIS_HAS_STEALTHCHOP(E0)
TMC_EDIT_STORED_HYBRID_THRS(E0);
TMC_EDIT_STORED_HYBRID_THRS(E0, MSG_E1);
#endif
#if AXIS_HAS_STEALTHCHOP(E1)
TMC_EDIT_STORED_HYBRID_THRS(E1);
TMC_EDIT_STORED_HYBRID_THRS(E1, MSG_E2);
#endif
#if AXIS_HAS_STEALTHCHOP(E2)
TMC_EDIT_STORED_HYBRID_THRS(E2);
TMC_EDIT_STORED_HYBRID_THRS(E2, MSG_E3);
#endif
#if AXIS_HAS_STEALTHCHOP(E3)
TMC_EDIT_STORED_HYBRID_THRS(E3);
TMC_EDIT_STORED_HYBRID_THRS(E3, MSG_E4);
#endif
#if AXIS_HAS_STEALTHCHOP(E4)
TMC_EDIT_STORED_HYBRID_THRS(E4);
TMC_EDIT_STORED_HYBRID_THRS(E4, MSG_E5);
#endif
#if AXIS_HAS_STEALTHCHOP(E5)
TMC_EDIT_STORED_HYBRID_THRS(E5);
TMC_EDIT_STORED_HYBRID_THRS(E5, MSG_E6);
#endif
END_MENU();
}
@@ -243,7 +243,7 @@ void menu_tmc_current() {
#if HAS_STEALTHCHOP
#define TMC_EDIT_STEP_MODE(ST) MENU_ITEM_EDIT_CALLBACK(bool, MSG_##ST, &stepper##ST.stored.stealthChop_enabled, refresh_stepping_mode_##ST)
#define TMC_EDIT_STEP_MODE(ST, MSG) MENU_ITEM_EDIT_CALLBACK(bool, MSG, &stepper##ST.stored.stealthChop_enabled, refresh_stepping_mode_##ST)
#if AXIS_HAS_STEALTHCHOP(X)
void refresh_stepping_mode_X() { stepperX.refresh_stepping_mode(); }
@@ -290,43 +290,43 @@ void menu_tmc_current() {
STATIC_ITEM(MSG_TMC_STEALTH_ENABLED);
MENU_BACK(MSG_TMC_DRIVERS);
#if AXIS_HAS_STEALTHCHOP(X)
TMC_EDIT_STEP_MODE(X);
TMC_EDIT_STEP_MODE(X, MSG_X);
#endif
#if AXIS_HAS_STEALTHCHOP(Y)
TMC_EDIT_STEP_MODE(Y);
TMC_EDIT_STEP_MODE(Y, MSG_Y);
#endif
#if AXIS_HAS_STEALTHCHOP(Z)
TMC_EDIT_STEP_MODE(Z);
TMC_EDIT_STEP_MODE(Z, MSG_Z);
#endif
#if AXIS_HAS_STEALTHCHOP(X2)
TMC_EDIT_STEP_MODE(X2);
TMC_EDIT_STEP_MODE(X2, MSG_X2);
#endif
#if AXIS_HAS_STEALTHCHOP(Y2)
TMC_EDIT_STEP_MODE(Y2);
TMC_EDIT_STEP_MODE(Y2, MSG_Y2);
#endif
#if AXIS_HAS_STEALTHCHOP(Z2)
TMC_EDIT_STEP_MODE(Z2);
TMC_EDIT_STEP_MODE(Z2, MSG_Z2);
#endif
#if AXIS_HAS_STEALTHCHOP(Z3)
TMC_EDIT_STEP_MODE(Z3);
TMC_EDIT_STEP_MODE(Z3, MSG_Z3);
#endif
#if AXIS_HAS_STEALTHCHOP(E0)
TMC_EDIT_STEP_MODE(E0);
TMC_EDIT_STEP_MODE(E0, MSG_E1);
#endif
#if AXIS_HAS_STEALTHCHOP(E1)
TMC_EDIT_STEP_MODE(E1);
TMC_EDIT_STEP_MODE(E1, MSG_E2);
#endif
#if AXIS_HAS_STEALTHCHOP(E2)
TMC_EDIT_STEP_MODE(E2);
TMC_EDIT_STEP_MODE(E2, MSG_E3);
#endif
#if AXIS_HAS_STEALTHCHOP(E3)
TMC_EDIT_STEP_MODE(E3);
TMC_EDIT_STEP_MODE(E3, MSG_E4);
#endif
#if AXIS_HAS_STEALTHCHOP(E4)
TMC_EDIT_STEP_MODE(E4);
TMC_EDIT_STEP_MODE(E4, MSG_E5);
#endif
#if AXIS_HAS_STEALTHCHOP(E5)
TMC_EDIT_STEP_MODE(E5);
TMC_EDIT_STEP_MODE(E5, MSG_E6);
#endif
END_MENU();
}
+4 -2
View File
@@ -615,8 +615,10 @@ void _lcd_ubl_step_by_step() {
void _lcd_ubl_level_bed() {
START_MENU();
MENU_BACK(MSG_MOTION);
MENU_ITEM(gcode, MSG_UBL_ACTIVATE_MESH, PSTR("G29 A"));
MENU_ITEM(gcode, MSG_UBL_DEACTIVATE_MESH, PSTR("G29 D"));
if (planner.leveling_active)
MENU_ITEM(gcode, MSG_UBL_DEACTIVATE_MESH, PSTR("G29 D"));
else
MENU_ITEM(gcode, MSG_UBL_ACTIVATE_MESH, PSTR("G29 A"));
MENU_ITEM(submenu, MSG_UBL_STEP_BY_STEP_MENU, _lcd_ubl_step_by_step);
MENU_ITEM(function, MSG_UBL_MESH_EDIT, _lcd_ubl_output_map_lcd_cmd);
MENU_ITEM(submenu, MSG_UBL_STORAGE_MESH_MENU, _lcd_ubl_storage_mesh);
+26 -8
View File
@@ -25,6 +25,7 @@
// These displays all share the MarlinUI class
#if HAS_SPI_LCD || EITHER(MALYAN_LCD, EXTENSIBLE_UI)
#include "ultralcd.h"
#include "fontutils.h"
MarlinUI ui;
#include "../sd/cardreader.h"
#if ENABLED(EXTENSIBLE_UI)
@@ -192,24 +193,39 @@ millis_t next_button_update_ms;
#endif
void wrap_string(uint8_t y, const char * const string) {
uint8_t x = LCD_WIDTH;
void _wrap_string(uint8_t &x, uint8_t &y, const char * const string, read_byte_cb_t cb_read_byte) {
SETCURSOR(x, y);
if (string) {
uint8_t *p = (uint8_t*)string;
for (;;) {
if (x >= LCD_WIDTH) {
x = 0;
SETCURSOR(0, y++);
}
wchar_t ch;
p = get_utf8_value_cb(p, read_byte_ram, &ch);
p = get_utf8_value_cb(p, cb_read_byte, &ch);
if (!ch) break;
lcd_put_wchar(ch);
x++;
if (x >= LCD_WIDTH) {
x = 0; y++;
SETCURSOR(0, y);
}
}
}
}
void MarlinUI::draw_select_screen_prompt(PGM_P const pref, const char * const string/*=NULL*/, PGM_P const suff/*=NULL*/) {
const uint8_t plen = utf8_strlen_P(pref), slen = suff ? utf8_strlen_P(suff) : 0;
uint8_t x = 0, y = 0;
if (!string && plen + slen <= LCD_WIDTH) {
x = (LCD_WIDTH - plen - slen) / 2;
y = LCD_HEIGHT > 3 ? 1 : 0;
}
wrap_string_P(x, y, pref);
if (string) {
if (x) { x = 0; y++; } // Move to the start of the next line
wrap_string(x, y, string);
}
if (suff) wrap_string_P(x, y, suff);
}
#endif // HAS_LCD_MENU
void MarlinUI::init() {
@@ -668,6 +684,7 @@ void MarlinUI::update() {
static uint16_t max_display_update_time = 0;
static millis_t next_lcd_update_ms;
millis_t ms = millis();
#if HAS_LCD_MENU
@@ -729,11 +746,12 @@ void MarlinUI::update() {
refresh();
init_lcd(); // May revive the LCD if static electricity killed it
ms = millis();
next_lcd_update_ms = ms + LCD_UPDATE_INTERVAL; // delay LCD update until after SD activity completes
}
#endif // SDSUPPORT && SD_DETECT_PIN
const millis_t ms = millis();
if (ELAPSED(ms, next_lcd_update_ms)
#if HAS_GRAPHICAL_LCD
|| drawing_screen
+7 -1
View File
@@ -72,7 +72,11 @@
#define LCDWRITE(c) lcd_put_wchar(c)
#endif
void wrap_string(uint8_t y, const char * const string);
#include "fontutils.h"
void _wrap_string(uint8_t &x, uint8_t &y, const char * const string, read_byte_cb_t cb_read_byte);
inline void wrap_string_P(uint8_t &x, uint8_t &y, PGM_P const pstr) { _wrap_string(x, y, pstr, read_byte_rom); }
inline void wrap_string(uint8_t &x, uint8_t &y, const char * const string) { _wrap_string(x, y, string, read_byte_ram); }
#if ENABLED(SDSUPPORT)
#include "../sd/cardreader.h"
@@ -457,6 +461,8 @@ public:
static void ubl_plot(const uint8_t x, const uint8_t inverted_y);
#endif
static void draw_select_screen_prompt(PGM_P const pref, const char * const string=NULL, PGM_P const suff=NULL);
#elif HAS_SPI_LCD
static constexpr bool lcd_clicked = false;
+1 -1
View File
@@ -1,6 +1,6 @@
/**
* Marlin 3D Printer Firmware
* Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
* Copyright (C) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
+19 -1
View File
@@ -64,6 +64,10 @@
#include "../feature/bedlevel/bedlevel.h"
#endif
#if ENABLED(EXTENSIBLE_UI)
#include "../lcd/extensible_ui/ui_api.h"
#endif
#if HAS_SERVOS
#include "servo.h"
#endif
@@ -1120,6 +1124,10 @@ void MarlinSettings::postprocess() {
store_mesh(ubl.storage_slot);
#endif
#if ENABLED(EXTENSIBLE_UI)
if (!eeprom_error) ExtUI::onStoreSettings();
#endif
return !eeprom_error;
}
@@ -1874,7 +1882,13 @@ void MarlinSettings::postprocess() {
}
bool MarlinSettings::load() {
if (validate()) return _load();
if (validate()) {
const bool success = _load();
#if ENABLED(EXTENSIBLE_UI)
if (success) ExtUI::onLoadSettings();
#endif
return success;
}
reset();
return true;
}
@@ -2290,6 +2304,10 @@ void MarlinSettings::reset() {
DEBUG_ECHO_START();
DEBUG_ECHOLNPGM("Hardcoded Default Settings Loaded");
#if ENABLED(EXTENSIBLE_UI)
ExtUI::onFactoryReset();
#endif
}
#if DISABLED(DISABLE_M503)
+26 -15
View File
@@ -310,24 +310,35 @@ inline void do_probe_raise(const float z_raise) {
FORCE_INLINE void probe_specific_action(const bool deploy) {
#if ENABLED(PAUSE_BEFORE_DEPLOY_STOW)
do {
#if ENABLED(PAUSE_PROBE_DEPLOY_WHEN_TRIGGERED)
if (deploy == (READ(Z_MIN_PROBE_PIN) == Z_MIN_PROBE_ENDSTOP_INVERTING)) break;
#endif
BUZZ(100, 659);
BUZZ(100, 698);
BUZZ(100, 659);
BUZZ(100, 698);
PGM_P const ds_str = deploy ? PSTR(MSG_MANUAL_DEPLOY) : PSTR(MSG_MANUAL_STOW);
ui.return_to_status(); // To display the new status message
ui.set_status_P(ds_str, 99);
serialprintPGM(ds_str);
SERIAL_EOL();
PGM_P const ds_str = deploy ? PSTR(MSG_MANUAL_DEPLOY) : PSTR(MSG_MANUAL_STOW);
ui.return_to_status(); // To display the new status message
ui.set_status_P(ds_str, 99);
serialprintPGM(ds_str);
SERIAL_EOL();
KEEPALIVE_STATE(PAUSED_FOR_USER);
wait_for_user = true;
#if ENABLED(HOST_PROMPT_SUPPORT)
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Stow Probe"), PSTR("Continue"));
#endif
while (wait_for_user) idle();
ui.reset_status();
KEEPALIVE_STATE(IN_HANDLER);
KEEPALIVE_STATE(PAUSED_FOR_USER);
wait_for_user = true;
#if ENABLED(HOST_PROMPT_SUPPORT)
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Stow Probe"), PSTR("Continue"));
#endif
while (wait_for_user) idle();
ui.reset_status();
KEEPALIVE_STATE(IN_HANDLER);
} while(
#if ENABLED(PAUSE_PROBE_DEPLOY_WHEN_TRIGGERED)
true
#else
false
#endif
);
#endif // PAUSE_BEFORE_DEPLOY_STOW

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