From 7b3b16b21190c5dfdb9fd7d09dcac09a2ed1aea7 Mon Sep 17 00:00:00 2001 From: Harald Barth Date: Mon, 23 Oct 2023 11:45:52 +0200 Subject: [PATCH] Divide out C for config and D for diag commands --- DCCEXParser.cpp | 80 +++++++++++++++++++++++++++++-------------------- DCCEXParser.h | 1 + GITHUB_SHA.h | 2 +- version.h | 3 +- 4 files changed, 51 insertions(+), 35 deletions(-) diff --git a/DCCEXParser.cpp b/DCCEXParser.cpp index dab213b..d79136f 100644 --- a/DCCEXParser.cpp +++ b/DCCEXParser.cpp @@ -49,7 +49,7 @@ Once a new OPCODE is decided upon, update this list. b, Write CV bit on main B, Write CV bit c, Request current command - C, + C, configure the CS d, D, Diagnostic commands e, Erase EEPROM @@ -693,7 +693,7 @@ void DCCEXParser::parseOne(Print *stream, byte *com, RingStream * ringStream) Sensor::printAll(stream); return; - case 's': // + case 's': // STATUS StringFormatter::send(stream, F("\n"), F(VERSION), F(ARDUINO_TYPE), DCC::getMotorShieldName(), F(GITHUB_SHA)); CommandDistributor::broadcastPower(); // is the only "get power status" command we have Turnout::printAll(stream); //send all Turnout states @@ -714,13 +714,17 @@ void DCCEXParser::parseOne(Print *stream, byte *com, RingStream * ringStream) case ' ': // < > StringFormatter::send(stream, F("\n")); return; + case 'C': // CONFIG + if (parseC(stream, params, p)) + return; + break; #ifndef DISABLE_DIAG - case 'D': // < > + case 'D': // DIAG if (parseD(stream, params, p)) return; break; #endif - case '=': // <= Track manager control > + case '=': // TACK MANAGER CONTROL <= [params]> if (TrackManager::parseJ(stream, params, p)) return; break; @@ -1114,19 +1118,28 @@ bool DCCEXParser::parseS(Print *stream, int16_t params, int16_t p[]) return false; } -bool DCCEXParser::parseD(Print *stream, int16_t params, int16_t p[]) -{ +bool DCCEXParser::parseC(Print *stream, int16_t params, int16_t p[]) { if (params == 0) return false; bool onOff = (params > 0) && (p[1] == 1 || p[1] == HASH_KEYWORD_ON); // dont care if other stuff or missing... just means off switch (p[0]) { - case HASH_KEYWORD_CABS: // - DCC::displayCabList(stream); +#ifndef DISABLE_PROG + case HASH_KEYWORD_PROGBOOST: + TrackManager::progTrackBoosted=true; + return true; +#endif + case HASH_KEYWORD_RESET: + DCCTimer::reset(); + break; // and if we didnt restart + case HASH_KEYWORD_SPEED28: + DCC::setGlobalSpeedsteps(28); + DIAG(F("28 Speedsteps")); return true; - case HASH_KEYWORD_RAM: // - StringFormatter::send(stream, F("Free memory=%d\n"), DCCTimer::getMinimumFreeMemory()); + case HASH_KEYWORD_SPEED128: + DCC::setGlobalSpeedsteps(128); + DIAG(F("128 Speedsteps")); return true; #ifndef DISABLE_PROG @@ -1146,12 +1159,33 @@ bool DCCEXParser::parseD(Print *stream, int16_t params, int16_t p[]) LCD(0, F("Ack Retry=%d Sum=%d"), p[2], DCCACK::setAckRetry(p[2])); // } } else { - StringFormatter::send(stream, F("Ack diag %S\n"), onOff ? F("on") : F("off")); + DIAG(F("Ack diag %S"), onOff ? F("on") : F("off")); Diag::ACK = onOff; } return true; #endif +default: // invalid/unknown + break; + } + return false; +} + +bool DCCEXParser::parseD(Print *stream, int16_t params, int16_t p[]) +{ + if (params == 0) + return false; + bool onOff = (params > 0) && (p[1] == 1 || p[1] == HASH_KEYWORD_ON); // dont care if other stuff or missing... just means off + switch (p[0]) + { + case HASH_KEYWORD_CABS: // + DCC::displayCabList(stream); + return true; + + case HASH_KEYWORD_RAM: // + DIAG(F("Free memory=%d"), DCCTimer::getMinimumFreeMemory()); + return true; + case HASH_KEYWORD_CMD: // Diag::CMD = onOff; return true; @@ -1173,34 +1207,14 @@ bool DCCEXParser::parseD(Print *stream, int16_t params, int16_t p[]) Diag::LCN = onOff; return true; #endif -#ifndef DISABLE_PROG - case HASH_KEYWORD_PROGBOOST: - TrackManager::progTrackBoosted=true; - return true; -#endif - case HASH_KEYWORD_RESET: - DCCTimer::reset(); - break; // and if we didnt restart - - #ifndef DISABLE_EEPROM case HASH_KEYWORD_EEPROM: // if (params >= 2) EEStore::dump(p[1]); return true; #endif - - case HASH_KEYWORD_SPEED28: - DCC::setGlobalSpeedsteps(28); - StringFormatter::send(stream, F("28 Speedsteps")); - return true; - - case HASH_KEYWORD_SPEED128: - DCC::setGlobalSpeedsteps(128); - StringFormatter::send(stream, F("128 Speedsteps")); - return true; - case HASH_KEYWORD_SERVO: // + case HASH_KEYWORD_ANOUT: // IODevice::writeAnalogue(p[1], p[2], params>3 ? p[3] : 0); break; @@ -1223,7 +1237,7 @@ bool DCCEXParser::parseD(Print *stream, int16_t params, int16_t p[]) break; default: // invalid/unknown - break; + return parseC(stream, params, p); } return false; } diff --git a/DCCEXParser.h b/DCCEXParser.h index 8a7367a..3c3382c 100644 --- a/DCCEXParser.h +++ b/DCCEXParser.h @@ -49,6 +49,7 @@ struct DCCEXParser static bool parseZ(Print * stream, int16_t params, int16_t p[]); static bool parseS(Print * stream, int16_t params, int16_t p[]); static bool parsef(Print * stream, int16_t params, int16_t p[]); + static bool parseC(Print * stream, int16_t params, int16_t p[]); static bool parseD(Print * stream, int16_t params, int16_t p[]); #ifndef IO_NO_HAL static bool parseI(Print * stream, int16_t params, int16_t p[]); diff --git a/GITHUB_SHA.h b/GITHUB_SHA.h index d46ef22..d2a7fd1 100644 --- a/GITHUB_SHA.h +++ b/GITHUB_SHA.h @@ -1 +1 @@ -#define GITHUB_SHA "devel-202309241855Z" +#define GITHUB_SHA "devel-202310230944Z" diff --git a/version.h b/version.h index 00fdc37..4daafba 100644 --- a/version.h +++ b/version.h @@ -3,7 +3,8 @@ #include "StringFormatter.h" -#define VERSION "5.1.16" +#define VERSION "5.1.17" +// 5.1.17 - Divide out C for config and D for diag commands // 5.1.16 - Remove I2C address from EXTT_TURNTABLE macro to work with MUX, requires separate HAL macro to create // 5.1.15 - LCC/Adapter support and Exrail feature-compile-out. // 5.1.14 - Fixed IFTTPOSITION