mirror of
https://github.com/MarlinFirmware/Marlin.git
synced 2024-11-23 12:04:19 +00:00
MMU2 as standard serial device (#20771)
This commit is contained in:
parent
7c786506e1
commit
1d5862a39b
@ -3601,10 +3601,7 @@
|
||||
//#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
|
||||
#elif HAS_PRUSA_MMU2
|
||||
// Serial port used for communication with MMU2.
|
||||
// For AVR enable the UART port used for the MMU. (e.g., mmuSerial)
|
||||
// For 32-bit boards check your HAL for available serial ports. (e.g., Serial2)
|
||||
#define MMU2_SERIAL_PORT 2
|
||||
#define MMU2_SERIAL mmuSerial
|
||||
|
||||
// Use hardware reset for MMU if a pin is defined for it
|
||||
//#define MMU2_RST_PIN 23
|
||||
|
@ -97,6 +97,13 @@ typedef int8_t pin_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef MMU2_SERIAL_PORT
|
||||
#if !WITHIN(MMU2_SERIAL_PORT, -1, 3)
|
||||
#error "MMU2_SERIAL_PORT must be from -1 to 3. Please update your configuration."
|
||||
#endif
|
||||
#define MMU2_SERIAL mmuSerial
|
||||
#endif
|
||||
|
||||
#ifdef LCD_SERIAL_PORT
|
||||
#if !WITHIN(LCD_SERIAL_PORT, -1, 3)
|
||||
#error "LCD_SERIAL_PORT must be from -1 to 3. Please update your configuration."
|
||||
|
@ -59,6 +59,14 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef MMU2_SERIAL_PORT
|
||||
#if WITHIN(MMU2_SERIAL_PORT, 0, 3)
|
||||
#define MMU2_SERIAL MSERIAL(SERIAL_PORT)
|
||||
#else
|
||||
#error "MMU2_SERIAL_PORT must be from 0 to 3. Please update your configuration."
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef LCD_SERIAL_PORT
|
||||
#if LCD_SERIAL_PORT == -1
|
||||
#define LCD_SERIAL lcdSerial
|
||||
|
@ -82,6 +82,16 @@ extern "C" volatile uint32_t _millis;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef MMU2_SERIAL_PORT
|
||||
#if MMU2_SERIAL_PORT == -1
|
||||
#define MMU2_SERIAL UsbSerial
|
||||
#elif WITHIN(MMU2_SERIAL_PORT, 0, 3)
|
||||
#define MMU2_SERIAL MSERIAL(MMU2_SERIAL_PORT)
|
||||
#else
|
||||
#error "MMU2_SERIAL_PORT must be from -1 to 3. Please update your configuration."
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef LCD_SERIAL_PORT
|
||||
#if LCD_SERIAL_PORT == -1
|
||||
#define LCD_SERIAL UsbSerial
|
||||
|
@ -57,6 +57,16 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef MMU2_SERIAL_PORT
|
||||
#if MMU2_SERIAL_PORT == -1
|
||||
#define MMU2_SERIAL Serial
|
||||
#elif WITHIN(MMU2_SERIAL_PORT, 0, 3)
|
||||
#define MMU2_SERIAL MSERIAL(MMU2_SERIAL_PORT)
|
||||
#else
|
||||
#error "MMU2_SERIAL_PORT must be from -1 to 3. Please update your configuration."
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef LCD_SERIAL_PORT
|
||||
#if LCD_SERIAL_PORT == -1
|
||||
#define LCD_SERIAL Serial
|
||||
|
@ -21,13 +21,13 @@
|
||||
#ifdef ADAFRUIT_GRAND_CENTRAL_M4
|
||||
|
||||
/**
|
||||
* Framework doesn't define some serial to save sercom resources
|
||||
* Framework doesn't define some serials to save sercom resources
|
||||
* hence if these are used I need to define them
|
||||
*/
|
||||
|
||||
#include "../../inc/MarlinConfig.h"
|
||||
|
||||
#if SERIAL_PORT == 1 || SERIAL_PORT_2 == 1
|
||||
#if USING_SERIAL_1
|
||||
Uart Serial2(&sercom4, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX);
|
||||
void SERCOM4_0_Handler() { Serial2.IrqHandler(); }
|
||||
void SERCOM4_1_Handler() { Serial2.IrqHandler(); }
|
||||
@ -35,7 +35,7 @@
|
||||
void SERCOM4_3_Handler() { Serial2.IrqHandler(); }
|
||||
#endif
|
||||
|
||||
#if SERIAL_PORT == 2 || SERIAL_PORT_2 == 2
|
||||
#if USING_SERIAL_2
|
||||
Uart Serial3(&sercom1, PIN_SERIAL3_RX, PIN_SERIAL3_TX, PAD_SERIAL3_RX, PAD_SERIAL3_TX);
|
||||
void SERCOM1_0_Handler() { Serial3.IrqHandler(); }
|
||||
void SERCOM1_1_Handler() { Serial3.IrqHandler(); }
|
||||
@ -43,7 +43,7 @@
|
||||
void SERCOM1_3_Handler() { Serial3.IrqHandler(); }
|
||||
#endif
|
||||
|
||||
#if SERIAL_PORT == 3 || SERIAL_PORT_2 == 3
|
||||
#if USING_SERIAL_3
|
||||
Uart Serial4(&sercom5, PIN_SERIAL4_RX, PIN_SERIAL4_TX, PAD_SERIAL4_RX, PAD_SERIAL4_TX);
|
||||
void SERCOM5_0_Handler() { Serial4.IrqHandler(); }
|
||||
void SERCOM5_1_Handler() { Serial4.IrqHandler(); }
|
||||
|
@ -65,6 +65,16 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef MMU2_SERIAL_PORT
|
||||
#if MMU2_SERIAL_PORT == -1
|
||||
#define MMU2_SERIAL SerialUSB
|
||||
#elif WITHIN(MMU2_SERIAL_PORT, 1, 6)
|
||||
#define MMU2_SERIAL MSERIAL(MMU2_SERIAL_PORT)
|
||||
#else
|
||||
#error "MMU2_SERIAL_PORT must be -1 or from 1 to 6. Please update your configuration."
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef LCD_SERIAL_PORT
|
||||
#if LCD_SERIAL_PORT == -1
|
||||
#define LCD_SERIAL SerialUSB
|
||||
|
@ -48,6 +48,10 @@
|
||||
DECLARE_SERIAL_PORT_EXP(SERIAL_PORT_2)
|
||||
#endif
|
||||
|
||||
#if defined(MMU2_SERIAL_PORT) && MMU2_SERIAL_PORT >= 0
|
||||
DECLARE_SERIAL_PORT_EXP(MMU2_SERIAL_PORT)
|
||||
#endif
|
||||
|
||||
#if defined(LCD_SERIAL_PORT) && LCD_SERIAL_PORT >= 0
|
||||
DECLARE_SERIAL_PORT_EXP(LCD_SERIAL_PORT)
|
||||
#endif
|
||||
|
@ -99,6 +99,18 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef MMU2_SERIAL_PORT
|
||||
#if MMU2_SERIAL_PORT == -1
|
||||
#define MMU2_SERIAL UsbSerial
|
||||
#elif WITHIN(MMU2_SERIAL_PORT, 1, NUM_UARTS)
|
||||
#define MMU2_SERIAL MSERIAL(MMU2_SERIAL_PORT)
|
||||
#elif NUM_UARTS == 5
|
||||
#error "MMU2_SERIAL_PORT must be -1 or from 1 to 5. Please update your configuration."
|
||||
#else
|
||||
#error "MMU2_SERIAL_PORT must be -1 or from 1 to 3. Please update your configuration."
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef LCD_SERIAL_PORT
|
||||
#if LCD_SERIAL_PORT == -1
|
||||
#define LCD_SERIAL UsbSerial
|
||||
|
@ -91,8 +91,6 @@ MMU2 mmu2;
|
||||
#define MMU2_NO_TOOL 99
|
||||
#define MMU_BAUD 115200
|
||||
|
||||
#define mmuSerial MMU2_SERIAL
|
||||
|
||||
bool MMU2::enabled, MMU2::ready, MMU2::mmu_print_saved;
|
||||
#if HAS_PRUSA_MMU2S
|
||||
bool MMU2::mmu2s_triggered;
|
||||
@ -132,7 +130,7 @@ void MMU2::init() {
|
||||
SET_OUTPUT(MMU2_RST_PIN);
|
||||
#endif
|
||||
|
||||
mmuSerial.begin(MMU_BAUD);
|
||||
MMU2_SERIAL.begin(MMU_BAUD);
|
||||
extruder = MMU2_NO_TOOL;
|
||||
|
||||
safe_delay(10);
|
||||
@ -385,8 +383,8 @@ bool MMU2::rx_start() {
|
||||
bool MMU2::rx_str_P(const char* str) {
|
||||
uint8_t i = strlen(rx_buffer);
|
||||
|
||||
while (mmuSerial.available()) {
|
||||
rx_buffer[i++] = mmuSerial.read();
|
||||
while (MMU2_SERIAL.available()) {
|
||||
rx_buffer[i++] = MMU2_SERIAL.read();
|
||||
rx_buffer[i] = '\0';
|
||||
|
||||
if (i == sizeof(rx_buffer) - 1) {
|
||||
@ -417,7 +415,7 @@ bool MMU2::rx_str_P(const char* str) {
|
||||
void MMU2::tx_str_P(const char* str) {
|
||||
clear_rx_buffer();
|
||||
uint8_t len = strlen_P(str);
|
||||
LOOP_L_N(i, len) mmuSerial.write(pgm_read_byte(str++));
|
||||
LOOP_L_N(i, len) MMU2_SERIAL.write(pgm_read_byte(str++));
|
||||
rx_buffer[0] = '\0';
|
||||
prev_request = millis();
|
||||
}
|
||||
@ -428,7 +426,7 @@ void MMU2::tx_str_P(const char* str) {
|
||||
void MMU2::tx_printf_P(const char* format, int argument = -1) {
|
||||
clear_rx_buffer();
|
||||
uint8_t len = sprintf_P(tx_buffer, format, argument);
|
||||
LOOP_L_N(i, len) mmuSerial.write(tx_buffer[i]);
|
||||
LOOP_L_N(i, len) MMU2_SERIAL.write(tx_buffer[i]);
|
||||
rx_buffer[0] = '\0';
|
||||
prev_request = millis();
|
||||
}
|
||||
@ -439,7 +437,7 @@ void MMU2::tx_printf_P(const char* format, int argument = -1) {
|
||||
void MMU2::tx_printf_P(const char* format, int argument1, int argument2) {
|
||||
clear_rx_buffer();
|
||||
uint8_t len = sprintf_P(tx_buffer, format, argument1, argument2);
|
||||
LOOP_L_N(i, len) mmuSerial.write(tx_buffer[i]);
|
||||
LOOP_L_N(i, len) MMU2_SERIAL.write(tx_buffer[i]);
|
||||
rx_buffer[0] = '\0';
|
||||
prev_request = millis();
|
||||
}
|
||||
@ -448,7 +446,7 @@ void MMU2::tx_printf_P(const char* format, int argument1, int argument2) {
|
||||
* Empty the rx buffer
|
||||
*/
|
||||
void MMU2::clear_rx_buffer() {
|
||||
while (mmuSerial.available()) mmuSerial.read();
|
||||
while (MMU2_SERIAL.available()) MMU2_SERIAL.read();
|
||||
rx_buffer[0] = '\0';
|
||||
}
|
||||
|
||||
|
@ -512,7 +512,10 @@
|
||||
#endif
|
||||
|
||||
// Flag the indexed serial ports that are in use
|
||||
#define ANY_SERIAL_IS(N) (defined(SERIAL_PORT) && SERIAL_PORT == (N)) || (defined(SERIAL_PORT_2) && SERIAL_PORT_2 == (N)) || (defined(LCD_SERIAL_PORT) && LCD_SERIAL_PORT == (N))
|
||||
#define ANY_SERIAL_IS(N) (defined(SERIAL_PORT) && SERIAL_PORT == (N)) || \
|
||||
(defined(SERIAL_PORT_2) && SERIAL_PORT_2 == (N)) || \
|
||||
(defined(MMU2_SERIAL_PORT) && MMU2_SERIAL_PORT == (N)) || \
|
||||
(defined(LCD_SERIAL_PORT) && LCD_SERIAL_PORT == (N))
|
||||
#if ANY_SERIAL_IS(-1)
|
||||
#define USING_SERIAL_DEFAULT
|
||||
#endif
|
||||
|
@ -588,10 +588,6 @@
|
||||
#error "SERIAL_PORT must be defined."
|
||||
#elif defined(SERIAL_PORT_2) && SERIAL_PORT_2 == SERIAL_PORT
|
||||
#error "SERIAL_PORT_2 cannot be the same as SERIAL_PORT."
|
||||
#elif defined(LCD_SERIAL_PORT) && LCD_SERIAL_PORT == SERIAL_PORT
|
||||
#error "LCD_SERIAL_PORT cannot be the same as SERIAL_PORT."
|
||||
#elif defined(LCD_SERIAL_PORT) && LCD_SERIAL_PORT == SERIAL_PORT_2
|
||||
#error "LCD_SERIAL_PORT cannot be the same as SERIAL_PORT_2."
|
||||
#endif
|
||||
#if !(defined(__AVR__) && defined(USBCON))
|
||||
#if ENABLED(SERIAL_XON_XOFF) && RX_BUFFER_SIZE < 1024
|
||||
@ -2389,11 +2385,26 @@ static_assert(hbm[Z_AXIS] >= 0, "HOMING_BUMP_MM.Z must be greater than or equal
|
||||
#error "SERIAL_PORT is set to -1, but the MOTHERBOARD has no native USB support. Set SERIAL_PORT to a valid value for your board."
|
||||
#elif SERIAL_PORT_2 == -1
|
||||
#error "SERIAL_PORT_2 is set to -1, but the MOTHERBOARD has no native USB support. Set SERIAL_PORT_2 to a valid value for your board."
|
||||
#elif MMU2_SERIAL_PORT == -1
|
||||
#error "MMU2_SERIAL_PORT is set to -1, but the MOTHERBOARD has no native USB support. Set MMU2_SERIAL_PORT to a valid value for your board."
|
||||
#elif LCD_SERIAL_PORT == -1
|
||||
#error "LCD_SERIAL_PORT is set to -1, but the MOTHERBOARD has no native USB support. Set LCD_SERIAL_PORT to a valid value for your board."
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
* MMU2 require a dedicated serial port
|
||||
*/
|
||||
#ifdef MMU2_SERIAL_PORT
|
||||
#if MMU2_SERIAL_PORT == SERIAL_PORT
|
||||
#error "MMU2_SERIAL_PORT cannot be the same as SERIAL_PORT."
|
||||
#elif defined(SERIAL_PORT_2) && MMU2_SERIAL_PORT == SERIAL_PORT_2
|
||||
#error "MMU2_SERIAL_PORT cannot be the same as SERIAL_PORT_2."
|
||||
#elif defined(LCD_SERIAL_PORT) && MMU2_SERIAL_PORT == LCD_SERIAL_PORT
|
||||
#error "MMU2_SERIAL_PORT cannot be the same as LCD_SERIAL_PORT."
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Serial displays require a dedicated serial port
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user