From 32240c97e2ca880daa589ad7c8f28f000ea793ba Mon Sep 17 00:00:00 2001 From: Asbelos Date: Fri, 24 Jul 2020 12:00:07 +0100 Subject: [PATCH] SAMD support issues --- CVReader.ino | 5 +++-- Hardware.cpp | 12 ++++++------ StringFormatter.cpp | 5 ++--- StringFormatter.h | 9 +++++++++ 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/CVReader.ino b/CVReader.ino index 31c813c..9c378ec 100644 --- a/CVReader.ino +++ b/CVReader.ino @@ -85,7 +85,8 @@ void setup() { // The main sketch has responsibilities during setup() // Responsibility 1: Start the usb connection for diagnostics and possible JMRI input - Serial.begin(115200); + // DIAGSERAL is normally Serial but uses SerialUSB on a SAMD processor + DIAGSERIAL.begin(115200); // Responsibility 2: Start the DCC engine. DCC::begin(); @@ -122,7 +123,7 @@ void loop() { DCC::loop(); // Responsibility 2: handle any incoming commands on USB connection - serialParser.loop(Serial); + serialParser.loop(DIAGSERIAL); // Responsibility 3: Optionally handle any incoming WiFi traffic #ifdef WIFI diff --git a/Hardware.cpp b/Hardware.cpp index 5b3aa51..91e475d 100644 --- a/Hardware.cpp +++ b/Hardware.cpp @@ -17,7 +17,8 @@ * along with CommandStation. If not, see . */ #include -#include // use IDE menu Tools..Manage Libraries to locate and install TimerOne +//#include // use IDE menu Tools..Manage Libraries to locate and install TimerOne +#include // use IDE menu Tools..Manage Libraries to locate and install TimerOne #include "avdweb_AnalogReadFast.h" #include "Hardware.h" #include "Config.h" @@ -82,11 +83,10 @@ unsigned int Hardware::getCurrentMilliamps(bool isMainTrack, int raw) { } void Hardware::setCallback(int duration, void (*isr)()) { - Timer1.initialize(duration); - // We don't want the timer to set pins because these often clash with motor shields etc. - Timer1.disablePwm(TIMER1_A_PIN); - Timer1.disablePwm(TIMER1_B_PIN); - Timer1.attachInterrupt(isr); + TimerA.initialize(); + TimerA.setPeriod(duration); + TimerA.attachInterrupt(isr); + TimerA.start(); } // shortcut to cpu dependent high speed write diff --git a/StringFormatter.cpp b/StringFormatter.cpp index 6fa1a9e..f7e7f25 100644 --- a/StringFormatter.cpp +++ b/StringFormatter.cpp @@ -18,12 +18,11 @@ */ #include "StringFormatter.h" #include - - + void StringFormatter::print( const __FlashStringHelper* input...) { va_list args; va_start(args, input); - send2(Serial,input,args); + send2(DIAGSERIAL,input,args); } void StringFormatter::send(Print & stream, const __FlashStringHelper* input...) { diff --git a/StringFormatter.h b/StringFormatter.h index 888eca9..7b25329 100644 --- a/StringFormatter.h +++ b/StringFormatter.h @@ -19,6 +19,15 @@ #ifndef StringFormatter_h #define StringFormatter_h #include + +#if defined(ARDUINO_ARCH_SAMD) + // Some processors use a gcc compiler that renames va_list!!! + #include + #define DIAGSERIAL SerialUSB +#elif defined(ARDUINO_ARCH_AVR) + #define DIAGSERIAL Serial +#endif + class StringFormatter { public: