Expand serial support in DUE/AVR hals exploiting the templated MarlinSerial classes (#11988)

This commit is contained in:
Eduardo José Tagle 2018-10-03 02:47:27 -03:00 committed by Scott Lahteine
parent f6f2246f59
commit d6955f25b2
14 changed files with 661 additions and 558 deletions

View file

@ -79,16 +79,32 @@ typedef int8_t pin_t;
//extern uint8_t MCUSR; //extern uint8_t MCUSR;
#define NUM_SERIAL 1 // Serial ports
#ifdef USBCON #ifdef USBCON
#if ENABLED(BLUETOOTH) #if ENABLED(BLUETOOTH)
#define MYSERIAL0 bluetoothSerial #define MYSERIAL0 bluetoothSerial
#else #else
#define MYSERIAL0 Serial #define MYSERIAL0 Serial
#endif #endif
#define NUM_SERIAL 1
#else #else
#define MYSERIAL0 customizedSerial #if !WITHIN(SERIAL_PORT, -1, 3)
#error "SERIAL_PORT must be from -1 to 3"
#endif
#define MYSERIAL0 customizedSerial1
#ifdef SERIAL_PORT_2
#if !WITHIN(SERIAL_PORT_2, -1, 3)
#error "SERIAL_PORT_2 must be from -1 to 3"
#elif SERIAL_PORT_2 == SERIAL_PORT
#error "SERIAL_PORT_2 must be different than SERIAL_PORT"
#endif
#define NUM_SERIAL 2
#define MYSERIAL1 customizedSerial2
#else
#define NUM_SERIAL 1
#endif
#endif #endif
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------

View file

@ -705,18 +705,37 @@
// Hookup ISR handlers // Hookup ISR handlers
ISR(SERIAL_REGNAME(USART,SERIAL_PORT,_RX_vect)) { ISR(SERIAL_REGNAME(USART,SERIAL_PORT,_RX_vect)) {
MarlinSerial<MarlinSerialCfg>::store_rxd_char(); MarlinSerial<MarlinSerialCfg1>::store_rxd_char();
} }
ISR(SERIAL_REGNAME(USART,SERIAL_PORT,_UDRE_vect)) { ISR(SERIAL_REGNAME(USART,SERIAL_PORT,_UDRE_vect)) {
MarlinSerial<MarlinSerialCfg>::_tx_udr_empty_irq(); MarlinSerial<MarlinSerialCfg1>::_tx_udr_empty_irq();
} }
// Preinstantiate // Preinstantiate
template class MarlinSerial<MarlinSerialCfg>; template class MarlinSerial<MarlinSerialCfg1>;
// Instantiate // Instantiate
MarlinSerial<MarlinSerialCfg> customizedSerial; MarlinSerial<MarlinSerialCfg1> customizedSerial1;
#ifdef SERIAL_PORT_2
// Hookup ISR handlers
ISR(SERIAL_REGNAME(USART,SERIAL_PORT_2,_RX_vect)) {
MarlinSerial<MarlinSerialCfg2>::store_rxd_char();
}
ISR(SERIAL_REGNAME(USART,SERIAL_PORT_2,_UDRE_vect)) {
MarlinSerial<MarlinSerialCfg2>::_tx_udr_empty_irq();
}
// Preinstantiate
template class MarlinSerial<MarlinSerialCfg2>;
// Instantiate
MarlinSerial<MarlinSerialCfg2> customizedSerial2;
#endif
#endif // !USBCON && (UBRRH || UBRR0H || UBRR1H || UBRR2H || UBRR3H) #endif // !USBCON && (UBRRH || UBRR0H || UBRR1H || UBRR2H || UBRR3H)

View file

@ -256,7 +256,7 @@
}; };
// Serial port configuration // Serial port configuration
struct MarlinSerialCfg { struct MarlinSerialCfg1 {
static constexpr int PORT = SERIAL_PORT; static constexpr int PORT = SERIAL_PORT;
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;
@ -268,7 +268,27 @@
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> customizedSerial; extern MarlinSerial<MarlinSerialCfg1> customizedSerial1;
#ifdef SERIAL_PORT_2
// Serial port configuration
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 // !USBCON #endif // !USBCON

View file

@ -29,6 +29,7 @@
// Includes // Includes
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
#include "../../inc/MarlinConfig.h"
#include "HAL.h" #include "HAL.h"
#include <Wire.h> #include <Wire.h>

View file

@ -41,9 +41,25 @@
#include "watchdog_Due.h" #include "watchdog_Due.h"
#include "HAL_timers_Due.h" #include "HAL_timers_Due.h"
// Serial ports
#if !WITHIN(SERIAL_PORT, -1, 3)
#error "SERIAL_PORT must be from -1 to 3"
#endif
// MYSERIAL0 required before MarlinSerial includes!
#define MYSERIAL0 customizedSerial1
#ifdef SERIAL_PORT_2
#if !WITHIN(SERIAL_PORT_2, -1, 3)
#error "SERIAL_PORT_2 must be from -1 to 3"
#elif SERIAL_PORT_2 == SERIAL_PORT
#error "SERIAL_PORT_2 must be different than SERIAL_PORT"
#endif
#define NUM_SERIAL 2
#define MYSERIAL1 customizedSerial2
#else
#define NUM_SERIAL 1 #define NUM_SERIAL 1
// Required before the include or compilation fails #endif
#define MYSERIAL0 customizedSerial
#include "MarlinSerial_Due.h" #include "MarlinSerial_Due.h"
#include "MarlinSerialUSB_Due.h" #include "MarlinSerialUSB_Due.h"

View file

@ -31,7 +31,7 @@
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Includes // Includes
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
#include "../../inc/MarlinConfig.h"
#include "HAL.h" #include "HAL.h"
#include "HAL_timers_Due.h" #include "HAL_timers_Due.h"

View file

@ -32,6 +32,7 @@
*/ */
#ifdef ARDUINO_ARCH_SAM #ifdef ARDUINO_ARCH_SAM
#include "../../inc/MarlinConfig.h"
#include "HAL.h" #include "HAL.h"
#include "InterruptVectors_Due.h" #include "InterruptVectors_Due.h"

View file

@ -285,7 +285,7 @@ void MarlinSerialUSB::printFloat(double number, uint8_t digits) {
} }
// Preinstantiate // Preinstantiate
MarlinSerialUSB customizedSerial; MarlinSerialUSB customizedSerial1;
#endif // SERIAL_PORT == -1 #endif // SERIAL_PORT == -1

View file

@ -89,7 +89,7 @@ private:
static void printFloat(double, uint8_t); static void printFloat(double, uint8_t);
}; };
extern MarlinSerialUSB customizedSerial; extern MarlinSerialUSB customizedSerial1;
#endif // SERIAL_PORT == -1 #endif // SERIAL_PORT == -1
#endif // MARLINSERIAL_DUE_H #endif // MARLINSERIAL_DUE_H

View file

@ -29,9 +29,6 @@
#include "../../inc/MarlinConfig.h" #include "../../inc/MarlinConfig.h"
// If not using the USB port as serial port
#if SERIAL_PORT >= 0
#include "MarlinSerial_Due.h" #include "MarlinSerial_Due.h"
#include "InterruptVectors_Due.h" #include "InterruptVectors_Due.h"
#include "../../Marlin.h" #include "../../Marlin.h"
@ -630,11 +627,24 @@
} }
} }
// If not using the USB port as serial port
#if SERIAL_PORT >= 0
// Preinstantiate // Preinstantiate
template class MarlinSerial<MarlinSerialCfg>; template class MarlinSerial<MarlinSerialCfg1>;
// Instantiate // Instantiate
MarlinSerial<MarlinSerialCfg> customizedSerial; MarlinSerial<MarlinSerialCfg1> customizedSerial1;
#endif
#ifdef SERIAL_PORT_2
// Preinstantiate
template class MarlinSerial<MarlinSerialCfg2>;
// Instantiate
MarlinSerial<MarlinSerialCfg2> customizedSerial2;
#endif #endif

View file

@ -31,8 +31,6 @@
#include "../shared/MarlinSerial.h" #include "../shared/MarlinSerial.h"
#if SERIAL_PORT >= 0
#include <WString.h> #include <WString.h>
#define DEC 10 #define DEC 10
@ -161,8 +159,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 MarlinSerialCfg { struct MarlinSerialCfg1 {
static constexpr int PORT = SERIAL_PORT; static constexpr int PORT = SERIAL_PORT;
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;
@ -174,8 +174,27 @@ struct MarlinSerialCfg {
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> customizedSerial; extern MarlinSerial<MarlinSerialCfg1> customizedSerial1;
#endif // SERIAL_PORT >= 0 #endif // SERIAL_PORT >= 0
#ifdef SERIAL_PORT_2
// Serial port configuration
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 // MARLINSERIAL_DUE_H #endif // MARLINSERIAL_DUE_H

View file

@ -27,6 +27,7 @@
#ifdef ARDUINO_ARCH_SAM #ifdef ARDUINO_ARCH_SAM
#include "../../inc/MarlinConfig.h"
#include "HAL.h" #include "HAL.h"
#include "HAL_timers_Due.h" #include "HAL_timers_Due.h"

View file

@ -60,19 +60,19 @@ void GcodeSuite::M111() {
SERIAL_ECHOPGM(MSG_DEBUG_OFF); SERIAL_ECHOPGM(MSG_DEBUG_OFF);
#if !defined(__AVR__) || !defined(USBCON) #if !defined(__AVR__) || !defined(USBCON)
#if ENABLED(SERIAL_STATS_RX_BUFFER_OVERRUNS) #if ENABLED(SERIAL_STATS_RX_BUFFER_OVERRUNS)
SERIAL_ECHOPAIR("\nBuffer Overruns: ", customizedSerial.buffer_overruns()); SERIAL_ECHOPAIR("\nBuffer Overruns: ", MYSERIAL0.buffer_overruns());
#endif #endif
#if ENABLED(SERIAL_STATS_RX_FRAMING_ERRORS) #if ENABLED(SERIAL_STATS_RX_FRAMING_ERRORS)
SERIAL_ECHOPAIR("\nFraming Errors: ", customizedSerial.framing_errors()); SERIAL_ECHOPAIR("\nFraming Errors: ", MYSERIAL0.framing_errors());
#endif #endif
#if ENABLED(SERIAL_STATS_DROPPED_RX) #if ENABLED(SERIAL_STATS_DROPPED_RX)
SERIAL_ECHOPAIR("\nDropped bytes: ", customizedSerial.dropped()); SERIAL_ECHOPAIR("\nDropped bytes: ", MYSERIAL0.dropped());
#endif #endif
#if ENABLED(SERIAL_STATS_MAX_RX_QUEUED) #if ENABLED(SERIAL_STATS_MAX_RX_QUEUED)
SERIAL_ECHOPAIR("\nMax RX Queue Size: ", customizedSerial.rxMaxEnqueued()); SERIAL_ECHOPAIR("\nMax RX Queue Size: ", MYSERIAL0.rxMaxEnqueued());
#endif #endif
#endif // !defined(__AVR__) || !defined(USBCON) #endif // !defined(__AVR__) || !defined(USBCON)
} }

View file

@ -562,11 +562,11 @@ void advance_command_queue() {
#if !defined(__AVR__) || !defined(USBCON) #if !defined(__AVR__) || !defined(USBCON)
#if ENABLED(SERIAL_STATS_DROPPED_RX) #if ENABLED(SERIAL_STATS_DROPPED_RX)
SERIAL_ECHOLNPAIR("Dropped bytes: ", customizedSerial.dropped()); SERIAL_ECHOLNPAIR("Dropped bytes: ", MYSERIAL0.dropped());
#endif #endif
#if ENABLED(SERIAL_STATS_MAX_RX_QUEUED) #if ENABLED(SERIAL_STATS_MAX_RX_QUEUED)
SERIAL_ECHOLNPAIR("Max RX Queue Size: ", customizedSerial.rxMaxEnqueued()); SERIAL_ECHOLNPAIR("Max RX Queue Size: ", MYSERIAL0.rxMaxEnqueued());
#endif #endif
#endif // !defined(__AVR__) || !defined(USBCON) #endif // !defined(__AVR__) || !defined(USBCON)