Refactor serial class with templates (#20783)
This commit is contained in:
		@@ -29,6 +29,8 @@
 | 
			
		||||
  #include "watchdog.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
DefaultSerial USBSerial(false, UsbSerial);
 | 
			
		||||
 | 
			
		||||
uint32_t HAL_adc_reading = 0;
 | 
			
		||||
 | 
			
		||||
// U8glib required functions
 | 
			
		||||
 
 | 
			
		||||
@@ -60,12 +60,15 @@ extern "C" volatile uint32_t _millis;
 | 
			
		||||
  #define ST7920_DELAY_3 DELAY_NS(750)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef ForwardSerial0Type< decltype(UsbSerial) > DefaultSerial;
 | 
			
		||||
extern DefaultSerial USBSerial;
 | 
			
		||||
 | 
			
		||||
#define _MSERIAL(X) MSerial##X
 | 
			
		||||
#define MSERIAL(X) _MSERIAL(X)
 | 
			
		||||
#define MSerial0 MSerial
 | 
			
		||||
 | 
			
		||||
#if SERIAL_PORT == -1
 | 
			
		||||
  #define MYSERIAL0 UsbSerial
 | 
			
		||||
  #define MYSERIAL0 USBSerial
 | 
			
		||||
#elif WITHIN(SERIAL_PORT, 0, 3)
 | 
			
		||||
  #define MYSERIAL0 MSERIAL(SERIAL_PORT)
 | 
			
		||||
#else
 | 
			
		||||
@@ -74,7 +77,7 @@ extern "C" volatile uint32_t _millis;
 | 
			
		||||
 | 
			
		||||
#ifdef SERIAL_PORT_2
 | 
			
		||||
  #if SERIAL_PORT_2 == -1
 | 
			
		||||
    #define MYSERIAL1 UsbSerial
 | 
			
		||||
    #define MYSERIAL1 USBSerial
 | 
			
		||||
  #elif WITHIN(SERIAL_PORT_2, 0, 3)
 | 
			
		||||
    #define MYSERIAL1 MSERIAL(SERIAL_PORT_2)
 | 
			
		||||
  #else
 | 
			
		||||
@@ -84,7 +87,7 @@ extern "C" volatile uint32_t _millis;
 | 
			
		||||
 | 
			
		||||
#ifdef MMU2_SERIAL_PORT
 | 
			
		||||
  #if MMU2_SERIAL_PORT == -1
 | 
			
		||||
    #define MMU2_SERIAL UsbSerial
 | 
			
		||||
    #define MMU2_SERIAL USBSerial
 | 
			
		||||
  #elif WITHIN(MMU2_SERIAL_PORT, 0, 3)
 | 
			
		||||
    #define MMU2_SERIAL MSERIAL(MMU2_SERIAL_PORT)
 | 
			
		||||
  #else
 | 
			
		||||
@@ -94,7 +97,7 @@ extern "C" volatile uint32_t _millis;
 | 
			
		||||
 | 
			
		||||
#ifdef LCD_SERIAL_PORT
 | 
			
		||||
  #if LCD_SERIAL_PORT == -1
 | 
			
		||||
    #define LCD_SERIAL UsbSerial
 | 
			
		||||
    #define LCD_SERIAL USBSerial
 | 
			
		||||
  #elif WITHIN(LCD_SERIAL_PORT, 0, 3)
 | 
			
		||||
    #define LCD_SERIAL MSERIAL(LCD_SERIAL_PORT)
 | 
			
		||||
  #else
 | 
			
		||||
 
 | 
			
		||||
@@ -25,19 +25,19 @@
 | 
			
		||||
#include "MarlinSerial.h"
 | 
			
		||||
 | 
			
		||||
#if USING_SERIAL_0
 | 
			
		||||
  MarlinSerial MSerial(LPC_UART0);
 | 
			
		||||
  MSerialT MSerial(true, LPC_UART0);
 | 
			
		||||
  extern "C" void UART0_IRQHandler() { MSerial.IRQHandler(); }
 | 
			
		||||
#endif
 | 
			
		||||
#if USING_SERIAL_1
 | 
			
		||||
  MarlinSerial MSerial1((LPC_UART_TypeDef *) LPC_UART1);
 | 
			
		||||
  MSerialT MSerial1(true, (LPC_UART_TypeDef *) LPC_UART1);
 | 
			
		||||
  extern "C" void UART1_IRQHandler() { MSerial1.IRQHandler(); }
 | 
			
		||||
#endif
 | 
			
		||||
#if USING_SERIAL_2
 | 
			
		||||
  MarlinSerial MSerial2(LPC_UART2);
 | 
			
		||||
  MSerialT MSerial2(true, LPC_UART2);
 | 
			
		||||
  extern "C" void UART2_IRQHandler() { MSerial2.IRQHandler(); }
 | 
			
		||||
#endif
 | 
			
		||||
#if USING_SERIAL_3
 | 
			
		||||
  MarlinSerial MSerial3(LPC_UART3);
 | 
			
		||||
  MSerialT MSerial3(true, LPC_UART3);
 | 
			
		||||
  extern "C" void UART3_IRQHandler() { MSerial3.IRQHandler(); }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,6 +28,7 @@
 | 
			
		||||
#if ENABLED(EMERGENCY_PARSER)
 | 
			
		||||
  #include "../../feature/e_parser.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include "../../core/serial_hook.h"
 | 
			
		||||
 | 
			
		||||
#ifndef SERIAL_PORT
 | 
			
		||||
  #define SERIAL_PORT 0
 | 
			
		||||
@@ -41,27 +42,20 @@
 | 
			
		||||
 | 
			
		||||
class MarlinSerial : public HardwareSerial<RX_BUFFER_SIZE, TX_BUFFER_SIZE> {
 | 
			
		||||
public:
 | 
			
		||||
  MarlinSerial(LPC_UART_TypeDef *UARTx) :
 | 
			
		||||
    HardwareSerial<RX_BUFFER_SIZE, TX_BUFFER_SIZE>(UARTx)
 | 
			
		||||
    #if ENABLED(EMERGENCY_PARSER)
 | 
			
		||||
      , emergency_state(EmergencyParser::State::EP_RESET)
 | 
			
		||||
    #endif
 | 
			
		||||
    { }
 | 
			
		||||
  MarlinSerial(LPC_UART_TypeDef *UARTx) : HardwareSerial<RX_BUFFER_SIZE, TX_BUFFER_SIZE>(UARTx) { }
 | 
			
		||||
 | 
			
		||||
  void end() {}
 | 
			
		||||
 | 
			
		||||
  #if ENABLED(EMERGENCY_PARSER)
 | 
			
		||||
    bool recv_callback(const char c) override {
 | 
			
		||||
      emergency_parser.update(emergency_state, c);
 | 
			
		||||
      emergency_parser.update(static_cast<Serial0Type<MarlinSerial> *>(this)->emergency_state, c);
 | 
			
		||||
      return true; // do not discard character
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    EmergencyParser::State emergency_state;
 | 
			
		||||
    static inline bool emergency_parser_enabled() { return true; }
 | 
			
		||||
  #endif
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern MarlinSerial MSerial;
 | 
			
		||||
extern MarlinSerial MSerial1;
 | 
			
		||||
extern MarlinSerial MSerial2;
 | 
			
		||||
extern MarlinSerial MSerial3;
 | 
			
		||||
typedef Serial0Type<MarlinSerial> MSerialT;
 | 
			
		||||
extern MSerialT MSerial;
 | 
			
		||||
extern MSerialT MSerial1;
 | 
			
		||||
extern MSerialT MSerial2;
 | 
			
		||||
extern MSerialT MSerial3;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user