From d40bf0d6b271baa6cea9181faef8470ac033fd3c Mon Sep 17 00:00:00 2001 From: B Date: Fri, 18 Apr 2025 17:53:18 -0700 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20GD32=20ignoring=20SERIAL?= =?UTF-8?q?=5FDMA=20on=20init=20(#27800)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/GD32_MFL/MarlinSerial.cpp | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/Marlin/src/HAL/GD32_MFL/MarlinSerial.cpp b/Marlin/src/HAL/GD32_MFL/MarlinSerial.cpp index c9b76a4ca4..271247295c 100644 --- a/Marlin/src/HAL/GD32_MFL/MarlinSerial.cpp +++ b/Marlin/src/HAL/GD32_MFL/MarlinSerial.cpp @@ -60,10 +60,9 @@ MarlinSerial& MarlinSerial::get_instance(usart::USART_Base Base, pin_size_t rxPi static MarlinSerial* current_serial_instance = nullptr; static void emergency_callback() { - if (current_serial_instance) { - uint8_t last_data = current_serial_instance->get_last_data(); - emergency_parser.update(current_serial_instance->emergency_state, last_data); - } + if (!current_serial_instance) return; + const uint8_t last_data = current_serial_instance->get_last_data(); + emergency_parser.update(current_serial_instance->emergency_state, last_data); } void MarlinSerial::register_emergency_callback(void (*callback)()) { @@ -72,26 +71,23 @@ MarlinSerial& MarlinSerial::get_instance(usart::USART_Base Base, pin_size_t rxPi #endif void MarlinSerial::begin(unsigned long baudrate, uint16_t config) { - UsartSerial::begin(baudrate, config); - #if DISABLED(SERIAL_DMA) - #if ENABLED(EMERGENCY_PARSER) - current_serial_instance = this; - register_emergency_callback(emergency_callback); - #endif + UsartSerial::begin(baudrate, config, ENABLED(SERIAL_DMA)); + #if ENABLED(EMERGENCY_PARSER) && DISABLED(SERIAL_DMA) + current_serial_instance = this; + register_emergency_callback(emergency_callback); #endif } void MarlinSerial::updateRxDmaBuffer() { #if ENABLED(EMERGENCY_PARSER) // Get the number of bytes available in the receive buffer - size_t available_bytes = usart_.available_for_read(true); - uint8_t data; + const size_t available_bytes = usart_.available_for_read(true); // Process only the available data for (size_t i = 0; i < available_bytes; ++i) { - if (usart_.read_rx_buffer(data)) { + uint8_t data; + if (usart_.read_rx_buffer(data)) emergency_parser.update(emergency_state, data); - } } #endif // Call the base class implementation to handle any additional updates