Support a third serial port (#21784)
This commit is contained in:
		@@ -103,6 +103,13 @@ typedef int8_t pin_t;
 | 
			
		||||
    #endif
 | 
			
		||||
    #define MYSERIAL2 customizedSerial2
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #ifdef SERIAL_PORT_3
 | 
			
		||||
    #if !WITHIN(SERIAL_PORT_3, -1, 3)
 | 
			
		||||
      #error "SERIAL_PORT_3 must be from 0 to 3, or -1 for USB Serial."
 | 
			
		||||
    #endif
 | 
			
		||||
    #define MYSERIAL3 customizedSerial3
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef MMU2_SERIAL_PORT
 | 
			
		||||
 
 | 
			
		||||
@@ -585,6 +585,22 @@ MSerialT1 customizedSerial1(MSerialT1::HasEmergencyParser);
 | 
			
		||||
 | 
			
		||||
#endif // SERIAL_PORT_2
 | 
			
		||||
 | 
			
		||||
#ifdef SERIAL_PORT_3
 | 
			
		||||
 | 
			
		||||
  // Hookup ISR handlers
 | 
			
		||||
  ISR(SERIAL_REGNAME(USART, SERIAL_PORT_3, _RX_vect)) {
 | 
			
		||||
    MarlinSerial<MarlinSerialCfg<SERIAL_PORT_3>>::store_rxd_char();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ISR(SERIAL_REGNAME(USART, SERIAL_PORT_3, _UDRE_vect)) {
 | 
			
		||||
    MarlinSerial<MarlinSerialCfg<SERIAL_PORT_3>>::_tx_udr_empty_irq();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  template class MarlinSerial< MarlinSerialCfg<SERIAL_PORT_3> >;
 | 
			
		||||
  MSerialT3 customizedSerial3(MSerialT3::HasEmergencyParser);
 | 
			
		||||
 | 
			
		||||
#endif // SERIAL_PORT_3
 | 
			
		||||
 | 
			
		||||
#ifdef MMU2_SERIAL_PORT
 | 
			
		||||
 | 
			
		||||
  ISR(SERIAL_REGNAME(USART, MMU2_SERIAL_PORT, _RX_vect)) {
 | 
			
		||||
 
 | 
			
		||||
@@ -246,6 +246,11 @@
 | 
			
		||||
    extern MSerialT2 customizedSerial2;
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #ifdef SERIAL_PORT_3
 | 
			
		||||
    typedef Serial1Class< MarlinSerial< MarlinSerialCfg<SERIAL_PORT_3> > > MSerialT3;
 | 
			
		||||
    extern MSerialT3 customizedSerial3;
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#endif // !USBCON
 | 
			
		||||
 | 
			
		||||
#ifdef MMU2_SERIAL_PORT
 | 
			
		||||
 
 | 
			
		||||
@@ -68,6 +68,16 @@ extern DefaultSerial4 MSerial3;
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef SERIAL_PORT_3
 | 
			
		||||
  #if SERIAL_PORT_3 == -1 || ENABLED(EMERGENCY_PARSER)
 | 
			
		||||
    #define MYSERIAL3 customizedSerial3
 | 
			
		||||
  #elif WITHIN(SERIAL_PORT_3, 0, 3)
 | 
			
		||||
    #define MYSERIAL3 MSERIAL(SERIAL_PORT_3)
 | 
			
		||||
  #else
 | 
			
		||||
    #error "SERIAL_PORT_3 must be from 0 to 3, or -1 for USB Serial."
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef MMU2_SERIAL_PORT
 | 
			
		||||
  #if WITHIN(MMU2_SERIAL_PORT, 0, 3)
 | 
			
		||||
    #define MMU2_SERIAL MSERIAL(MMU2_SERIAL_PORT)
 | 
			
		||||
 
 | 
			
		||||
@@ -486,4 +486,9 @@ void MarlinSerial<Cfg>::flushTX() {
 | 
			
		||||
  MSerialT2 customizedSerial2(MarlinSerialCfg<SERIAL_PORT_2>::EMERGENCYPARSER);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(SERIAL_PORT_3) && SERIAL_PORT_3 >= 0
 | 
			
		||||
  template class MarlinSerial< MarlinSerialCfg<SERIAL_PORT_3> >;
 | 
			
		||||
  MSerialT3 customizedSerial3(MarlinSerialCfg<SERIAL_PORT_3>::EMERGENCYPARSER);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif // ARDUINO_ARCH_SAM
 | 
			
		||||
 
 | 
			
		||||
@@ -149,3 +149,8 @@ struct MarlinSerialCfg {
 | 
			
		||||
  typedef Serial1Class< MarlinSerial< MarlinSerialCfg<SERIAL_PORT_2> > > MSerialT2;
 | 
			
		||||
  extern MSerialT2 customizedSerial2;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(SERIAL_PORT_3) && SERIAL_PORT_3 >= 0
 | 
			
		||||
  typedef Serial1Class< MarlinSerial< MarlinSerialCfg<SERIAL_PORT_3> > > MSerialT3;
 | 
			
		||||
  extern MSerialT3 customizedSerial3;
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -134,6 +134,9 @@ size_t MarlinSerialUSB::write(const uint8_t c) {
 | 
			
		||||
#if SERIAL_PORT_2 == -1
 | 
			
		||||
  MSerialT2 customizedSerial2(TERN0(EMERGENCY_PARSER, true));
 | 
			
		||||
#endif
 | 
			
		||||
#if SERIAL_PORT_3 == -1
 | 
			
		||||
  MSerialT3 customizedSerial3(TERN0(EMERGENCY_PARSER, true));
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif // HAS_USB_SERIAL
 | 
			
		||||
#endif // ARDUINO_ARCH_SAM
 | 
			
		||||
 
 | 
			
		||||
@@ -59,3 +59,7 @@ struct MarlinSerialUSB {
 | 
			
		||||
  extern MSerialT2 customizedSerial2;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if SERIAL_PORT_3 == -1
 | 
			
		||||
  typedef Serial1Class<MarlinSerialUSB> MSerialT3;
 | 
			
		||||
  extern MSerialT3 customizedSerial3;
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -84,6 +84,16 @@ extern DefaultSerial1 USBSerial;
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef SERIAL_PORT_3
 | 
			
		||||
  #if SERIAL_PORT_3 == -1
 | 
			
		||||
    #define MYSERIAL3 USBSerial
 | 
			
		||||
  #elif WITHIN(SERIAL_PORT_3, 0, 3)
 | 
			
		||||
    #define MYSERIAL3 MSERIAL(SERIAL_PORT_3)
 | 
			
		||||
  #else
 | 
			
		||||
    #error "SERIAL_PORT_3 must be from 0 to 3. You can also use -1 if the board supports Native USB."
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef MMU2_SERIAL_PORT
 | 
			
		||||
  #if MMU2_SERIAL_PORT == -1
 | 
			
		||||
    #define MMU2_SERIAL USBSerial
 | 
			
		||||
 
 | 
			
		||||
@@ -68,6 +68,16 @@
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef SERIAL_PORT_3
 | 
			
		||||
  #if SERIAL_PORT_3 == -1
 | 
			
		||||
    #define MYSERIAL3 MSerial0
 | 
			
		||||
  #elif WITHIN(SERIAL_PORT_3, 1, 6)
 | 
			
		||||
    #define MYSERIAL3 MSERIAL(SERIAL_PORT_3)
 | 
			
		||||
  #else
 | 
			
		||||
    #error "SERIAL_PORT_3 must be from 1 to 6. You can also use -1 if the board supports Native USB."
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef MMU2_SERIAL_PORT
 | 
			
		||||
  #if MMU2_SERIAL_PORT == -1
 | 
			
		||||
    #define MMU2_SERIAL MSerial0
 | 
			
		||||
 
 | 
			
		||||
@@ -98,6 +98,17 @@
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef SERIAL_PORT_3
 | 
			
		||||
  #if SERIAL_PORT_3 == -1
 | 
			
		||||
    #define MYSERIAL3 UsbSerial
 | 
			
		||||
  #elif WITHIN(SERIAL_PORT_3, 1, NUM_UARTS)
 | 
			
		||||
    #define MYSERIAL3 MSERIAL(SERIAL_PORT_3)
 | 
			
		||||
  #else
 | 
			
		||||
    #define MYSERIAL3 MSERIAL(1) // dummy port
 | 
			
		||||
    static_assert(false, "SERIAL_PORT_3 must be from 1 to " STRINGIFY(NUM_UARTS) ". You can also use -1 if the board supports Native USB.")
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef MMU2_SERIAL_PORT
 | 
			
		||||
  #if MMU2_SERIAL_PORT == -1
 | 
			
		||||
    #define MMU2_SERIAL UsbSerial
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user