From b6f8889e8c958deda4bb4201d375730fb9632489 Mon Sep 17 00:00:00 2001 From: peteGSX <97784652+peteGSX@users.noreply.github.com> Date: Thu, 20 Apr 2023 07:08:11 +1000 Subject: [PATCH] Disable most programming functions --- DCCEXParser.cpp | 6 ++ EXRAIL2.cpp | 6 +- EXRAILMacros.h | 2 +- config.example.h | 13 +++- config.h.txt | 169 ----------------------------------------------- 5 files changed, 23 insertions(+), 173 deletions(-) delete mode 100644 config.h.txt diff --git a/DCCEXParser.cpp b/DCCEXParser.cpp index 07c679b..728b157 100644 --- a/DCCEXParser.cpp +++ b/DCCEXParser.cpp @@ -369,6 +369,7 @@ void DCCEXParser::parseOne(Print *stream, byte *com, RingStream * ringStream) return; break; +#ifndef DISABLE_PROG case 'w': // WRITE CV on MAIN DCC::writeCVByteMain(p[0], p[1], p[2]); return; @@ -376,6 +377,7 @@ void DCCEXParser::parseOne(Print *stream, byte *com, RingStream * ringStream) case 'b': // WRITE CV BIT ON MAIN DCC::writeCVBitMain(p[0], p[1], p[2], p[3]); return; +#endif case 'M': // WRITE TRANSPARENT DCC PACKET MAIN case 'P': // WRITE TRANSPARENT DCC PACKET PROG

@@ -393,6 +395,7 @@ void DCCEXParser::parseOne(Print *stream, byte *com, RingStream * ringStream) } return; +#ifndef DISABLE_PROG case 'W': // WRITE CV ON PROG if (!stashCallback(stream, p, ringStream)) break; @@ -427,7 +430,9 @@ void DCCEXParser::parseOne(Print *stream, byte *com, RingStream * ringStream) DCC::writeCVBit(p[0], p[1], p[2], callback_B); return; +#endif case 'R': // READ CV ON PROG +#ifndef DISABLE_PROG if (params == 1) { // -- uses verify callback if (!stashCallback(stream, p, ringStream)) @@ -442,6 +447,7 @@ void DCCEXParser::parseOne(Print *stream, byte *com, RingStream * ringStream) DCC::readCV(p[0], callback_R); return; } +#endif if (params == 0) { // New read loco id if (!stashCallback(stream, p, ringStream)) diff --git a/EXRAIL2.cpp b/EXRAIL2.cpp index 5b6986b..d273b9c 100644 --- a/EXRAIL2.cpp +++ b/EXRAIL2.cpp @@ -704,11 +704,13 @@ void RMFT2::loop2() { DCC::setThrottle(0,1,true); // pause all locos on the track pausingTask=this; break; - + +#ifndef DISABLE_PROG case OPCODE_POM: if (loco) DCC::writeCVByteMain(loco, operand, getOperand(1)); break; - +#endif + case OPCODE_POWEROFF: TrackManager::setPower(POWERMODE::OFF); TrackManager::setJoin(false); diff --git a/EXRAILMacros.h b/EXRAILMacros.h index 633ce5a..c6846c0 100644 --- a/EXRAILMacros.h +++ b/EXRAILMacros.h @@ -325,7 +325,7 @@ const HIGHFLASH int16_t RMFT2::SignalDefinitions[] = { #define ONTHROW(turnout_id) OPCODE_ONTHROW,V(turnout_id), #define ONCHANGE(sensor_id) OPCODE_ONCHANGE,V(sensor_id), #define PAUSE OPCODE_PAUSE,0,0, -#define PIN_TURNOUT(id,pin,description...) OPCODE_PINTURNOUT,V(id),OPCODE_PAD,V(pin), +#define PIN_TURNOUT(id,pin,description...) OPCODE_PINTURNOUT,V(id),OPCODE_PAD,V(pin), #define POM(cv,value) OPCODE_POM,V(cv),OPCODE_PAD,V(value), #define POWEROFF OPCODE_POWEROFF,0,0, #define POWERON OPCODE_POWERON,0,0, diff --git a/config.example.h b/config.example.h index 2a8a11a..728c1dd 100644 --- a/config.example.h +++ b/config.example.h @@ -141,7 +141,7 @@ The configuration file for DCC-EX Command Station // // If you do not need the EEPROM at all, you can disable all the code that saves // data in the EEPROM. You might want to do that if you are in a Arduino UNO -// and want to use the EX-RAIL automation. Otherwise you do not have enough RAM +// and want to use the EXRAIL automation. Otherwise you do not have enough RAM // to do that. Of course, then none of the EEPROM related commands work. // // EEPROM does not work on ESP32. So on ESP32, EEPROM will always be disabled, @@ -149,6 +149,17 @@ The configuration file for DCC-EX Command Station // // #define DISABLE_EEPROM +///////////////////////////////////////////////////////////////////////////////////// +// DISABLE PROG +// +// If you do not need programming capability, you can disable all programming related +// commands. You might want to do that if you are using an Arduino UNO and still want +// to use EXRAIL automation, as the Uno is lacking in RAM and Flash to run both. +// +// Note this disables all programming functionality, including EXRAIL. +// +// #define DISABLE_PROG + ///////////////////////////////////////////////////////////////////////////////////// // REDEFINE WHERE SHORT/LONG ADDR break is. According to NMRA the last short address // is 127 and the first long address is 128. There are manufacturers which have diff --git a/config.h.txt b/config.h.txt deleted file mode 100644 index 98cc3fc..0000000 --- a/config.h.txt +++ /dev/null @@ -1,169 +0,0 @@ -/********************************************************************** - -Config.h -COPYRIGHT (c) 2013-2016 Gregg E. Berman -COPYRIGHT (c) 2020 Fred Decker - -The configuration file for DCC++ EX Command Station - -**********************************************************************/ -///////////////////////////////////////////////////////////////////////////////////// -// NOTE: Before connecting these boards and selecting one in this software -// check the quick install guides!!! Some of these boards require a voltage -// generating resitor on the current sense pin of the device. Failure to select -// the correct resistor could damage the sense pin on your Arduino or destroy -// the device. -// -// DEFINE MOTOR_SHIELD_TYPE BELOW ACCORDING TO THE FOLLOWING TABLE: -// -// STANDARD_MOTOR_SHIELD : Arduino Motor shield Rev3 based on the L298 with 18V 2A per channel -// POLOLU_MOTOR_SHIELD : Pololu MC33926 Motor Driver (not recommended for prog track) -// FUNDUMOTO_SHIELD : Fundumoto Shield, no current sensing (not recommended, no short protection) -// FIREBOX_MK1 : The Firebox MK1 -// FIREBOX_MK1S : The Firebox MK1S -// | -// +-----------------------v -// -// #define STANDARD_MOTOR_SHIELD F("STANDARD_MOTOR_SHIELD"), -// new MotorDriver(3, 12, UNUSED_PIN, 9, A0, 0.488, 1500, UNUSED_PIN), -// new MotorDriver(11, 13, UNUSED_PIN, 8, A1, 0.488, 1500, UNUSED_PIN) - -#define MOTOR_SHIELD_TYPE STANDARD_MOTOR_SHIELD - -///////////////////////////////////////////////////////////////////////////////////// -// -// The IP port to talk to a WIFI or Ethernet shield. -// -#define IP_PORT 2560 - -///////////////////////////////////////////////////////////////////////////////////// -// -// NOTE: Only supported on Arduino Mega -// Set to false if you not even want it on the Arduino Mega -// -//#define ENABLE_WIFI true - -///////////////////////////////////////////////////////////////////////////////////// -// -// DEFINE WiFi Parameters (only in effect if WIFI is on) -// -// If DONT_TOUCH_WIFI_CONF is set, all WIFI config will be done with -// the <+> commands and this sketch will not change anything over -// AT commands and the other WIFI_* defines below do not have any effect. -//#define DONT_TOUCH_WIFI_CONF -// -// WIFI_SSID is the network name IF you want to use your existing home network. -// Do NOT change this if you want to use the WiFi in Access Point (AP) mode. -// -// If you do NOT set the WIFI_SSID, the WiFi chip will first try -// to connect to the previously configured network and if that fails -// fall back to Access Point mode. The SSID of the AP will be -// automatically set to DCCEX_*. -// -// Your SSID may not conain ``"'' (double quote, ASCII 0x22). -#define WIFI_SSID "Your network name" -// -// WIFI_PASSWORD is the network password for your home network or if -// you want to change the password from default AP mode password -// to the AP password you want. -// Your password may not conain ``"'' (double quote, ASCII 0x22). -#define WIFI_PASSWORD "deadcafe" -// -// WIFI_HOSTNAME: You probably don't need to change this -#define WIFI_HOSTNAME "dccex" -// -///////////////////////////////////////////////////////////////////////////////////// -// -// 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 - -///////////////////////////////////////////////////////////////////////////////////// -// -// ENABLE_ETHERNET: Set to true if you have an Arduino Ethernet card (wired). This -// is not for Wifi. You will then need the Arduino Ethernet library as well -// -//#define ENABLE_ETHERNET true - - -///////////////////////////////////////////////////////////////////////////////////// -// -// DEFINE STATIC IP ADDRESS *OR* COMMENT OUT TO USE DHCP -// -//#define IP_ADDRESS { 192, 168, 1, 31 } - -///////////////////////////////////////////////////////////////////////////////////// -// -// DEFINE MAC ADDRESS ARRAY FOR ETHERNET COMMUNICATIONS INTERFACE -// -// Uncomment to use with Ethernet Shields -// -// Ethernet Shields do not have have a MAC address in hardware. There may be one on -// a sticker on the Shield that you should use. Otherwise choose one of the ones below -// Be certain that no other device on your network has this same MAC address! -// -// 52:b8:8a:8e:ce:21 -// e3:e9:73:e1:db:0d -// 54:2b:13:52:ac:0c - -// NOTE: This is not used with ESP8266 WiFi modules. - -//#define MAC_ADDRESS { 0x52, 0xB8, 0x8A, 0x8E, 0xCE, 0x21 } // MAC address of your networking card found on the sticker on your card or take one from above - -// -// #define MAC_ADDRESS { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEF } - -///////////////////////////////////////////////////////////////////////////////////// -// -// DEFINE LCD SCREEN USAGE BY THE BASE STATION -// -// Note: This feature requires an I2C enabled LCD screen using a Hitachi HD44780 -// controller and a PCF8574 based I2C 'backpack', -// OR an I2C Oled screen based on SSD1306 (128x64 or 128x32) controller, -// OR an I2C Oled screen based on SH1106 (132x64) controller. -// To enable, uncomment one of the lines below - -// define LCD_DRIVER for I2C LCD address 0x3f,16 cols, 2 rows -//#define LCD_DRIVER {SubBus_4,0x27},20,4 - -//OR define OLED_DRIVER width,height in pixels (address auto detected) -#if defined(ARDUINO_ARCH_STM32) -#define OLED_DRIVER 0x3c, 128, 64 -#else -#define OLED_DRIVER {SubBus_0,0x3c}, 128, 32 -#endif - -#define SCROLLMODE 1 - -///////////////////////////////////////////////////////////////////////////////////// -// DISABLE EEPROM -// -// If you do not need the EEPROM at all, you can disable all the code that saves -// data in the EEPROM. You might want to do that if you are in a Arduino UNO -// and want to use the EX-RAIL automation. Otherwise you do not have enough RAM -// to do that. Of course, then none of the EEPROM related commands work. -// -#define DISABLE_EEPROM - - -///////////////////////////////////////////////////////////////////////////////////// -// -// DEFINE TURNOUTS/ACCESSORIES FOLLOW NORM RCN-213 -// -// According to norm RCN-213 a DCC packet with a 1 is closed/straight -// and one with a 0 is thrown/diverging. In DCC++ Classic, and in previous -// versions of DCC++EX, a turnout throw command was implemented in the packet as -// '1' and a close command as '0'. The #define below makes the states -// match with the norm. But we don't want to cause havoc on existent layouts, -// so we define this only for new installations. If you don't want this, -// don't add it to your config.h. -//#define DCC_TURNOUTS_RCN_213 - -// The following #define likewise inverts the behaviour of the command -// for triggering DCC Accessory Decoders, so that generates a -// DCC packet with D=1 (close turnout) and generates D=0 -// (throw turnout). -//#define DCC_ACCESSORY_RCN_213 - -/////////////////////////////////////////////////////////////////////////////////////