1
0
mirror of https://github.com/DCC-EX/CommandStation-EX.git synced 2024-11-27 01:56:14 +01:00

UnoRev2 protection

This commit is contained in:
Asbelos 2021-02-09 13:43:40 +00:00
parent 6f70bec67e
commit f09eee25dd
4 changed files with 22 additions and 17 deletions

View File

@ -52,7 +52,7 @@ const int HASH_KEYWORD_ETHERNET = -30767;
const int HASH_KEYWORD_MAX = 16244; const int HASH_KEYWORD_MAX = 16244;
const int HASH_KEYWORD_MIN = 15978; const int HASH_KEYWORD_MIN = 15978;
int DCCEXParser::stashP[MAX_PARAMS]; int DCCEXParser::stashP[MAX_COMMAND_PARAMS];
bool DCCEXParser::stashBusy; bool DCCEXParser::stashBusy;
Print *DCCEXParser::stashStream = NULL; Print *DCCEXParser::stashStream = NULL;
@ -102,7 +102,7 @@ void DCCEXParser::loop(Stream &stream)
Sensor::checkAll(&stream); // Update and print changes Sensor::checkAll(&stream); // Update and print changes
} }
int DCCEXParser::splitValues(int result[MAX_PARAMS], const byte *cmd) int DCCEXParser::splitValues(int result[MAX_COMMAND_PARAMS], const byte *cmd)
{ {
byte state = 1; byte state = 1;
byte parameterCount = 0; byte parameterCount = 0;
@ -111,10 +111,10 @@ int DCCEXParser::splitValues(int result[MAX_PARAMS], const byte *cmd)
bool signNegative = false; bool signNegative = false;
// clear all parameters in case not enough found // clear all parameters in case not enough found
for (int i = 0; i < MAX_PARAMS; i++) for (int i = 0; i < MAX_COMMAND_PARAMS; i++)
result[i] = 0; result[i] = 0;
while (parameterCount < MAX_PARAMS) while (parameterCount < MAX_COMMAND_PARAMS)
{ {
byte hot = *remainingCmd; byte hot = *remainingCmd;
@ -161,7 +161,7 @@ int DCCEXParser::splitValues(int result[MAX_PARAMS], const byte *cmd)
return parameterCount; return parameterCount;
} }
int DCCEXParser::splitHexValues(int result[MAX_PARAMS], const byte *cmd) int DCCEXParser::splitHexValues(int result[MAX_COMMAND_PARAMS], const byte *cmd)
{ {
byte state = 1; byte state = 1;
byte parameterCount = 0; byte parameterCount = 0;
@ -169,10 +169,10 @@ int DCCEXParser::splitHexValues(int result[MAX_PARAMS], const byte *cmd)
const byte *remainingCmd = cmd + 1; // skips the opcode const byte *remainingCmd = cmd + 1; // skips the opcode
// clear all parameters in case not enough found // clear all parameters in case not enough found
for (int i = 0; i < MAX_PARAMS; i++) for (int i = 0; i < MAX_COMMAND_PARAMS; i++)
result[i] = 0; result[i] = 0;
while (parameterCount < MAX_PARAMS) while (parameterCount < MAX_COMMAND_PARAMS)
{ {
byte hot = *remainingCmd; byte hot = *remainingCmd;
@ -251,7 +251,7 @@ void DCCEXParser::parse(Print *stream, byte *com, bool blocking)
(void)EEPROM; // tell compiler not to warn this is unused (void)EEPROM; // tell compiler not to warn this is unused
if (Diag::CMD) if (Diag::CMD)
DIAG(F("\nPARSING:%s\n"), com); DIAG(F("\nPARSING:%s\n"), com);
int p[MAX_PARAMS]; int p[MAX_COMMAND_PARAMS];
while (com[0] == '<' || com[0] == ' ') while (com[0] == '<' || com[0] == ' ')
com++; // strip off any number of < or spaces com++; // strip off any number of < or spaces
byte params = splitValues(p, com); byte params = splitValues(p, com);
@ -770,13 +770,13 @@ bool DCCEXParser::parseD(Print *stream, int params, int p[])
} }
// CALLBACKS must be static // CALLBACKS must be static
bool DCCEXParser::stashCallback(Print *stream, int p[MAX_PARAMS]) bool DCCEXParser::stashCallback(Print *stream, int p[MAX_COMMAND_PARAMS])
{ {
if (stashBusy ) if (stashBusy )
return false; return false;
stashBusy = true; stashBusy = true;
stashStream = stream; stashStream = stream;
memcpy(stashP, p, MAX_PARAMS * sizeof(p[0])); memcpy(stashP, p, MAX_COMMAND_PARAMS * sizeof(p[0]));
return true; return true;
} }
void DCCEXParser::callback_W(int result) void DCCEXParser::callback_W(int result)

View File

@ -34,7 +34,7 @@ struct DCCEXParser
static void setFilter(FILTER_CALLBACK filter); static void setFilter(FILTER_CALLBACK filter);
static void setRMFTFilter(FILTER_CALLBACK filter); static void setRMFTFilter(FILTER_CALLBACK filter);
static void setAtCommandCallback(AT_COMMAND_CALLBACK filter); static void setAtCommandCallback(AT_COMMAND_CALLBACK filter);
static const int MAX_PARAMS=10; // Must not exceed this static const int MAX_COMMAND_PARAMS=10; // Must not exceed this
private: private:
@ -42,8 +42,8 @@ struct DCCEXParser
byte bufferLength=0; byte bufferLength=0;
bool inCommandPayload=false; bool inCommandPayload=false;
byte buffer[MAX_BUFFER+2]; byte buffer[MAX_BUFFER+2];
int splitValues( int result[MAX_PARAMS], const byte * command); int splitValues( int result[MAX_COMMAND_PARAMS], const byte * command);
int splitHexValues( int result[MAX_PARAMS], const byte * command); int splitHexValues( int result[MAX_COMMAND_PARAMS], const byte * command);
bool parseT(Print * stream, int params, int p[]); bool parseT(Print * stream, int params, int p[]);
bool parseZ(Print * stream, int params, int p[]); bool parseZ(Print * stream, int params, int p[]);
@ -55,8 +55,8 @@ struct DCCEXParser
static bool stashBusy; static bool stashBusy;
static Print * stashStream; static Print * stashStream;
static int stashP[MAX_PARAMS]; static int stashP[MAX_COMMAND_PARAMS];
bool stashCallback(Print * stream, int p[MAX_PARAMS]); bool stashCallback(Print * stream, int p[MAX_COMMAND_PARAMS]);
static void callback_W(int result); static void callback_W(int result);
static void callback_B(int result); static void callback_B(int result);
static void callback_R(int result); static void callback_R(int result);

View File

@ -17,6 +17,7 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with CommandStation. If not, see <https://www.gnu.org/licenses/>. * along with CommandStation. If not, see <https://www.gnu.org/licenses/>.
*/ */
#ifndef ARDUINO_AVR_UNO_WIFI_REV2
#include <Arduino.h> #include <Arduino.h>
#include "WifiInboundHandler.h" #include "WifiInboundHandler.h"
#include "RingStream.h" #include "RingStream.h"
@ -247,3 +248,5 @@ void WifiInboundHandler::purgeCurrentCIPSEND() {
pendingCipsend=false; pendingCipsend=false;
clientPendingCIPSEND=-1; clientPendingCIPSEND=-1;
} }
#endif

View File

@ -17,7 +17,8 @@
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with CommandStation. If not, see <https://www.gnu.org/licenses/>. along with CommandStation. If not, see <https://www.gnu.org/licenses/>.
*/ */
#ifndef ARDUINO_AVR_UNO_WIFI_REV2
// This code is NOT compiled on a unoWifiRev2 processor which uses a different architecture
#include "WifiInterface.h" /* config.h included there */ #include "WifiInterface.h" /* config.h included there */
#include <avr/pgmspace.h> #include <avr/pgmspace.h>
#include "DIAG.h" #include "DIAG.h"
@ -288,7 +289,6 @@ wifiSerialState WifiInterface::setup2(const FSH* SSid, const FSH* password,
const byte MAX_IP_LENGTH=15; const byte MAX_IP_LENGTH=15;
char ipString[MAX_IP_LENGTH+1]; char ipString[MAX_IP_LENGTH+1];
ipString[MAX_IP_LENGTH]='\0'; // protection against missing " character on end. ipString[MAX_IP_LENGTH]='\0'; // protection against missing " character on end.
byte ipLen=0;
for(byte ipLen=0;ipLen<MAX_IP_LENGTH;ipLen++) { for(byte ipLen=0;ipLen<MAX_IP_LENGTH;ipLen++) {
while(!wifiStream->available()); while(!wifiStream->available());
int ipChar=wifiStream->read(); int ipChar=wifiStream->read();
@ -362,3 +362,5 @@ void WifiInterface::loop() {
WifiInboundHandler::loop(); WifiInboundHandler::loop();
} }
} }
#endif