Template struct simplification for serial (#11990)

This commit is contained in:
AnoNymous 2018-10-03 18:01:21 +02:00 committed by Scott Lahteine
parent 348004c34f
commit 001f26b642
4 changed files with 38 additions and 68 deletions

View file

@ -705,35 +705,35 @@
// Hookup ISR handlers // Hookup ISR handlers
ISR(SERIAL_REGNAME(USART,SERIAL_PORT,_RX_vect)) { ISR(SERIAL_REGNAME(USART,SERIAL_PORT,_RX_vect)) {
MarlinSerial<MarlinSerialCfg1>::store_rxd_char(); MarlinSerial<MarlinSerialCfg<SERIAL_PORT>>::store_rxd_char();
} }
ISR(SERIAL_REGNAME(USART,SERIAL_PORT,_UDRE_vect)) { ISR(SERIAL_REGNAME(USART,SERIAL_PORT,_UDRE_vect)) {
MarlinSerial<MarlinSerialCfg1>::_tx_udr_empty_irq(); MarlinSerial<MarlinSerialCfg<SERIAL_PORT>>::_tx_udr_empty_irq();
} }
// Preinstantiate // Preinstantiate
template class MarlinSerial<MarlinSerialCfg1>; template class MarlinSerial<MarlinSerialCfg<SERIAL_PORT>>;
// Instantiate // Instantiate
MarlinSerial<MarlinSerialCfg1> customizedSerial1; MarlinSerial<MarlinSerialCfg<SERIAL_PORT>> customizedSerial1;
#ifdef SERIAL_PORT_2 #ifdef SERIAL_PORT_2
// Hookup ISR handlers // Hookup ISR handlers
ISR(SERIAL_REGNAME(USART,SERIAL_PORT_2,_RX_vect)) { ISR(SERIAL_REGNAME(USART,SERIAL_PORT_2,_RX_vect)) {
MarlinSerial<MarlinSerialCfg2>::store_rxd_char(); MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>>::store_rxd_char();
} }
ISR(SERIAL_REGNAME(USART,SERIAL_PORT_2,_UDRE_vect)) { ISR(SERIAL_REGNAME(USART,SERIAL_PORT_2,_UDRE_vect)) {
MarlinSerial<MarlinSerialCfg2>::_tx_udr_empty_irq(); MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>>::_tx_udr_empty_irq();
} }
// Preinstantiate // Preinstantiate
template class MarlinSerial<MarlinSerialCfg2>; template class MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>>;
// Instantiate // Instantiate
MarlinSerial<MarlinSerialCfg2> customizedSerial2; MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>> customizedSerial2;
#endif #endif

View file

@ -255,9 +255,9 @@
static void printFloat(double, uint8_t); static void printFloat(double, uint8_t);
}; };
// Serial port configuration template <uint8_t serial>
struct MarlinSerialCfg1 { struct MarlinSerialCfg {
static constexpr int PORT = SERIAL_PORT; static constexpr int PORT = serial;
static constexpr unsigned int RX_SIZE = RX_BUFFER_SIZE; static constexpr unsigned int RX_SIZE = RX_BUFFER_SIZE;
static constexpr unsigned int TX_SIZE = TX_BUFFER_SIZE; static constexpr unsigned int TX_SIZE = TX_BUFFER_SIZE;
static constexpr bool XONOFF = bSERIAL_XON_XOFF; static constexpr bool XONOFF = bSERIAL_XON_XOFF;
@ -267,29 +267,14 @@
static constexpr bool RX_FRAMING_ERRORS = bSERIAL_STATS_RX_FRAMING_ERRORS; static constexpr bool RX_FRAMING_ERRORS = bSERIAL_STATS_RX_FRAMING_ERRORS;
static constexpr bool MAX_RX_QUEUED = bSERIAL_STATS_MAX_RX_QUEUED; static constexpr bool MAX_RX_QUEUED = bSERIAL_STATS_MAX_RX_QUEUED;
}; };
extern MarlinSerial<MarlinSerialCfg<SERIAL_PORT>> customizedSerial1;
extern MarlinSerial<MarlinSerialCfg1> customizedSerial1;
#ifdef SERIAL_PORT_2 #ifdef SERIAL_PORT_2
// Serial port configuration extern MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>> customizedSerial2;
struct MarlinSerialCfg2 {
static constexpr int PORT = SERIAL_PORT_2;
static constexpr unsigned int RX_SIZE = RX_BUFFER_SIZE;
static constexpr unsigned int TX_SIZE = TX_BUFFER_SIZE;
static constexpr bool XONOFF = bSERIAL_XON_XOFF;
static constexpr bool EMERGENCYPARSER = bEMERGENCY_PARSER;
static constexpr bool DROPPED_RX = bSERIAL_STATS_DROPPED_RX;
static constexpr bool RX_OVERRUNS = bSERIAL_STATS_RX_BUFFER_OVERRUNS;
static constexpr bool RX_FRAMING_ERRORS = bSERIAL_STATS_RX_FRAMING_ERRORS;
static constexpr bool MAX_RX_QUEUED = bSERIAL_STATS_MAX_RX_QUEUED;
};
extern MarlinSerial<MarlinSerialCfg2> customizedSerial2;
#endif #endif
#endif // !USBCON #endif // !USBCON
// Use the UART for Bluetooth in AT90USB configurations // Use the UART for Bluetooth in AT90USB configurations

View file

@ -631,20 +631,20 @@ void MarlinSerial<Cfg>::printFloat(double number, uint8_t digits) {
#if SERIAL_PORT >= 0 #if SERIAL_PORT >= 0
// Preinstantiate // Preinstantiate
template class MarlinSerial<MarlinSerialCfg1>; template class MarlinSerial<MarlinSerialCfg<SERIAL_PORT>>;
// Instantiate // Instantiate
MarlinSerial<MarlinSerialCfg1> customizedSerial1; MarlinSerial<MarlinSerialCfg<SERIAL_PORT>> customizedSerial1;
#endif #endif
#ifdef SERIAL_PORT_2 #ifdef SERIAL_PORT_2
// Preinstantiate // Preinstantiate
template class MarlinSerial<MarlinSerialCfg2>; template class MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>>;
// Instantiate // Instantiate
MarlinSerial<MarlinSerialCfg2> customizedSerial2; MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>> customizedSerial2;
#endif #endif

View file

@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
#pragma once
/** /**
* MarlinSerial_Due.h - Hardware serial library for Arduino DUE * MarlinSerial_Due.h - Hardware serial library for Arduino DUE
@ -26,9 +27,6 @@
* Based on MarlinSerial for AVR, copyright (c) 2006 Nicholas Zambetti. All right reserved. * Based on MarlinSerial for AVR, copyright (c) 2006 Nicholas Zambetti. All right reserved.
*/ */
#ifndef MARLINSERIAL_DUE_H
#define MARLINSERIAL_DUE_H
#include "../shared/MarlinSerial.h" #include "../shared/MarlinSerial.h"
#include <WString.h> #include <WString.h>
@ -159,11 +157,10 @@ private:
static void printFloat(double, uint8_t); static void printFloat(double, uint8_t);
}; };
#if SERIAL_PORT >= 0
// Serial port configuration // Serial port configuration
struct MarlinSerialCfg1 { template <uint8_t serial>
static constexpr int PORT = SERIAL_PORT; struct MarlinSerialCfg {
static constexpr int PORT = serial;
static constexpr unsigned int RX_SIZE = RX_BUFFER_SIZE; static constexpr unsigned int RX_SIZE = RX_BUFFER_SIZE;
static constexpr unsigned int TX_SIZE = TX_BUFFER_SIZE; static constexpr unsigned int TX_SIZE = TX_BUFFER_SIZE;
static constexpr bool XONOFF = bSERIAL_XON_XOFF; static constexpr bool XONOFF = bSERIAL_XON_XOFF;
@ -174,27 +171,15 @@ private:
static constexpr bool MAX_RX_QUEUED = bSERIAL_STATS_MAX_RX_QUEUED; static constexpr bool MAX_RX_QUEUED = bSERIAL_STATS_MAX_RX_QUEUED;
}; };
extern MarlinSerial<MarlinSerialCfg1> customizedSerial1; #if SERIAL_PORT >= 0
extern MarlinSerial<MarlinSerialCfg<SERIAL_PORT>> customizedSerial1;
#endif // SERIAL_PORT >= 0 #endif // SERIAL_PORT >= 0
#ifdef SERIAL_PORT_2 #ifdef SERIAL_PORT_2
// Serial port configuration extern MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>> customizedSerial2;
struct MarlinSerialCfg2 {
static constexpr int PORT = SERIAL_PORT_2;
static constexpr unsigned int RX_SIZE = RX_BUFFER_SIZE;
static constexpr unsigned int TX_SIZE = TX_BUFFER_SIZE;
static constexpr bool XONOFF = bSERIAL_XON_XOFF;
static constexpr bool EMERGENCYPARSER = bEMERGENCY_PARSER;
static constexpr bool DROPPED_RX = bSERIAL_STATS_DROPPED_RX;
static constexpr bool RX_OVERRUNS = bSERIAL_STATS_RX_BUFFER_OVERRUNS;
static constexpr bool RX_FRAMING_ERRORS = bSERIAL_STATS_RX_FRAMING_ERRORS;
static constexpr bool MAX_RX_QUEUED = bSERIAL_STATS_MAX_RX_QUEUED;
};
extern MarlinSerial<MarlinSerialCfg2> customizedSerial2;
#endif #endif
#endif // MARLINSERIAL_DUE_H