diff --git a/.github/workflows/sha.yml b/.github/workflows/sha.yml index a01e236..8aca1a5 100644 --- a/.github/workflows/sha.yml +++ b/.github/workflows/sha.yml @@ -13,6 +13,7 @@ jobs: # Set the type of machine to run on runs-on: ubuntu-latest + if: github.ref == 'refs/heads/master' steps: # Checks out a copy of your repository on the ubuntu-latest machine - name: Checkout code diff --git a/DCC.cpp b/DCC.cpp index e9e9cee..0560c8b 100644 --- a/DCC.cpp +++ b/DCC.cpp @@ -45,11 +45,18 @@ const byte FN_GROUP_4=0x08; const byte FN_GROUP_5=0x10; FSH* DCC::shieldName=NULL; +byte DCC::joinRelay=UNUSED_PIN; -void DCC::begin(const FSH * motorShieldName, MotorDriver * mainDriver, MotorDriver* progDriver) { +void DCC::begin(const FSH * motorShieldName, MotorDriver * mainDriver, MotorDriver* progDriver, + byte joinRelayPin) { shieldName=(FSH *)motorShieldName; DIAG(F("\n"), F(VERSION), F(ARDUINO_TYPE), shieldName, F(GITHUB_SHA)); + joinRelay=joinRelayPin; + if (joinRelay!=UNUSED_PIN) { + pinMode(joinRelay,OUTPUT); + digitalWrite(joinRelay,LOW); // high is relay disengaged + } // Load stuff from EEprom (void)EEPROM; // tell compiler not to warn this is unused EEStore::init(); @@ -223,6 +230,7 @@ void DCC::writeCVBitMain(int cab, int cv, byte bNum, bool bValue) { } void DCC::setProgTrackSyncMain(bool on) { + if (joinRelay!=UNUSED_PIN) digitalWrite(joinRelay,on?HIGH:LOW); DCCWaveform::progTrackSyncMain=on; } void DCC::setProgTrackBoost(bool on) { diff --git a/DCC.h b/DCC.h index a7646a8..f1c4aa0 100644 --- a/DCC.h +++ b/DCC.h @@ -64,7 +64,8 @@ const byte MAX_LOCOS = 50; class DCC { public: - static void begin(const FSH * motorShieldName, MotorDriver *mainDriver, MotorDriver *progDriver); + static void begin(const FSH * motorShieldName, MotorDriver *mainDriver, MotorDriver *progDriver, + byte joinRelayPin=UNUSED_PIN); static void loop(); // Public DCC API functions @@ -109,6 +110,7 @@ private: byte groupFlags; unsigned long functions; }; + static byte joinRelay; static byte loopStatus; static void setThrottle2(uint16_t cab, uint8_t speedCode); static void updateLocoReminder(int loco, byte speedCode); diff --git a/GITHUB_SHA.h b/GITHUB_SHA.h index a22d209..70430b9 100644 --- a/GITHUB_SHA.h +++ b/GITHUB_SHA.h @@ -1 +1 @@ -#define GITHUB_SHA "0228345" +#define GITHUB_SHA "fbb9841" diff --git a/MotorDrivers.h b/MotorDrivers.h index a277bbf..b60dfb7 100644 --- a/MotorDrivers.h +++ b/MotorDrivers.h @@ -57,4 +57,9 @@ new MotorDriver(10, 12, UNUSED_PIN, 9, A0, 2.99, 2000, UNUSED_PIN), \ new MotorDriver(11, 13, UNUSED_PIN, UNUSED_PIN, A1, 2.99, 2000, UNUSED_PIN) +// IBT_2 Motor Board for Main and Arduino Motor Shield for Prog +#define IBT_2_WITH_ARDUINO F("IBT_2_WITH_ARDUINO_SHIELD"), \ + new MotorDriver(4, 5, 6, UNUSED_PIN, A5, 41.54, 5000, UNUSED_PIN), \ + new MotorDriver(11, 13, UNUSED_PIN, UNUSED_PIN, A1, 2.99, 2000, UNUSED_PIN) + #endif diff --git a/WifiInterface.cpp b/WifiInterface.cpp index 5d04400..4496776 100644 --- a/WifiInterface.cpp +++ b/WifiInterface.cpp @@ -35,7 +35,9 @@ Stream * WifiInterface::wifiStream; #ifndef WIFI_CONNECT_TIMEOUT // Tested how long it takes to FAIL an unknown SSID on firmware 1.7.4. -#define WIFI_CONNECT_TIMEOUT 14000 +// The ES should fail a connect in 15 seconds, we don't want to fail BEFORE that +// or ot will cause issues with the following commands. +#define WIFI_CONNECT_TIMEOUT 16000 #endif //////////////////////////////////////////////////////////////////////////////// diff --git a/config.example.h b/config.example.h index 6a6287d..82e3709 100644 --- a/config.example.h +++ b/config.example.h @@ -25,7 +25,6 @@ The configuration file for DCC-EX Command Station // +-----------------------v // #define MOTOR_SHIELD_TYPE STANDARD_MOTOR_SHIELD - ///////////////////////////////////////////////////////////////////////////////////// // // The IP port to talk to a WIFI or Ethernet shield. @@ -77,13 +76,6 @@ The configuration file for DCC-EX Command Station // this line exists or not. If you need to use an alternate channel (we recommend // using only 1,6, or 11) you may change it here. #define WIFI_CHANNEL 1 -// -///////////////////////////////////////////////////////////////////////////////////// -// -// Wifi connect timeout in milliseconds. Default is 14000 (14 seconds). You only need -// to set this if you have an extremely slow Wifi router. -// -//#define WIFI_CONNECT_TIMEOUT 14000 ///////////////////////////////////////////////////////////////////////////////////// // diff --git a/release_notes.md b/release_notes.md new file mode 100644 index 0000000..0893e1a --- /dev/null +++ b/release_notes.md @@ -0,0 +1,93 @@ +The DCC-EX Team is pleased to release CommandStation-EX-v3.0.0 as a Production Release. This release is a major re-write of earlier versions. We've re-architected the code-base so that it can better handle new features going forward. + +**Known Bugs:** + - **Consisting through JMRI** - currently does not work in this release. You may use the command to do this manually. + - **Wi-Fi** - works, but can be challenging to use if you want to switch between AP mode and STA station mode. + - **Pololu Motor Shield** - is supported with this release, but the user may have to play around with some timings to enable programming mode due to limitation in its current sensing circuitry + +**Summary of the key new features added to CommandStation-EX V3.0.3** + - ** command to write loco address and clear consist** + - ** command will allow for consist address** + - **Startup commands implemented** + +**Summary of the key new features added to CommandStation-EX V3.0.2:** +- **Create new output for current in mA for ```` command** - New current response outputs current in mA, overlimit current, and maximum board capable current +- **Simultaneously update JMRI to handle new current meter** + +**Summary of the key new features added to CommandStation-EX V3.0.1:** + - **Add back fix for jitter** + - **Add Turnouts, Outputs and Sensors to `````` command output** + + **Summary of the key new features added to CommandStation-EX V3.0.0:** + + - **New USB Browser Based Throttle** - WebThrottle-EX is a full front-end to controller to control the CS to run trains. + - **WiFi Support** - AP and station modes supported. Auto-detection of an ESP8266 WiFi module with AT firmware on a Mega's serial port. Connection to JMRI and WiThrottle clients. + - **Withrottle Integrations** - Act as a host for up to four WiThrottle clients concurrently. + - **Add LCD/OLED support** - OLED supported on Mega only + - **Improved CV programming routines** - checks for length of CV pulse, and breaks out of the wait state once it has received an ACK, now reading one CV per second. + - **Improved current sensing** - rewrote current sensing routines for safer operation. Current thresholds based on milliamps, not magic numbers + - **Individual track power control** - Ability to toggle power on either or both tracks, and to "JOIN" the tracks and make them output the same waveform for multiple power districts. + - **Single or Dual-Pin PWM output** - Allows control of H-bridges with PH/EN or dual PWM inputs + - **New, simpler function command** - `````` command allows setting functions based on their number, not based on a code as in `````` + - **Function reminders** - Function reminders are sent in addition to speed reminders + - **Functions to F28** - All NMRA functions are now supported + - **Filters and user functions** - Ability to filter commands in the parser and execute custom code based on them. (ex: Redirect Turnout commands via NRF24) + - **Diagnostic `````` commands** - See documentation for a full list of new diagnostic commands + - **Rewrote DCC++ Parser** - more efficient operation, accepts multi-char input and uses less RAM + - **Rewritten waveform generator** - capable of using any pin for DCC waveform out, eliminating the need for jumpers + - **Rewritten packet generator** - Simplify and make smaller, remove idea of "registers" from original code + - **Add free RAM messages** - Free RAM messages are now printed whenever there is a decerase in available RAM + - **Fix EEPROM bugs** + - **Number of locos discovery command** - ```<#>``` command + - **Support for more locomotives** - 20 locomotives on an UNO and 50 an a Mega. + - **Automatic slot managment** - slot variable in throttle/function commands are ignored and slot management is taken care of automatically. `````` command added to release locos from memory. + + +**Key Contributors** + +**Project Lead** +- Fred Decker - Holly Springs, North Carolina, USA (FlightRisk) + +**CommandStation-EX Developers** +- Chris Harlow - Bournemouth, UK (UKBloke) +- Harald Barth - Stockholm, Sweden (Haba) +- Fred Decker - Holly Springs, North Carolina, USA (FlightRisk) +- Dave Cutting - Logan, Utah, USA (Dave Cutting/ David Cutting) +- M Steve Todd - - Engine Driver and JMRI Interface +- Scott Catalanno - Pennsylvania +- Gregor Baues - Île-de-France, France (grbba) + +**exInstaller Software** +- Anthony W - Dayton, Ohio, USA (Dex, Dex++) + +**Website and Documentation** +- Mani Kumar - Bangalor, India (Mani / Mani Kumar) +- Fred Decker - Holly Springs, North Carolina, USA (FlightRisk) +- Dave Cutting - Logan, Utah, USA (Dave Cutting/ David Cutting) +- Roger Beschizza - Dorset, UK (Roger Beschizza) +- Keith Ledbetter - Chicago, Illinois, USA (Keith Ledbetter) +- Kevin Smith - (KCSmith) + +**WebThrotle-EX** +- Fred Decker - Holly Springs, NC (FlightRisk/FrightRisk) +- Mani Kumar - Bangalor, India (Mani /Mani Kumar) +- Matt H - + + + +**Beta Testing / Release Management / Support** +- Larry Dribin - Release Management +- Keith Ledbetter +- BradVan der Elst +- Andrew Pye +- Mike Bowers +- Randy McKenzie +- Roberto Bravin +- Sim Brigden +- Alan Lautenslager +- Martin Bafver +- Mário André Silva +- Anthony Kochevar +- Gajanatha Kobbekaduwe +- Sumner Patterson +- Paul - Virginia, USA