diff --git a/DCCEXParser.cpp b/DCCEXParser.cpp index cfb7219..29e7074 100644 --- a/DCCEXParser.cpp +++ b/DCCEXParser.cpp @@ -579,6 +579,12 @@ bool DCCEXParser::parseZ(Print *stream, int16_t params, int16_t p[]) return true; case 3: // + if (p[0] < 0) + return false; + if (p[1] > 255 || p[1] < 0) + return false; + if (!(p[2] == 0 || p[2] == 1)) + return false; if (!Output::create(p[0], p[1], p[2], 1)) return false; StringFormatter::send(stream, F("\n")); diff --git a/Outputs.cpp b/Outputs.cpp index b7aa7bc..1e13807 100644 --- a/Outputs.cpp +++ b/Outputs.cpp @@ -100,14 +100,14 @@ void Output::activate(int s){ /////////////////////////////////////////////////////////////////////////////// -Output* Output::get(int n){ +Output* Output::get(uint16_t n){ Output *tt; for(tt=firstOutput;tt!=NULL && tt->data.id!=n;tt=tt->nextOutput); return(tt); } /////////////////////////////////////////////////////////////////////////////// -bool Output::remove(int n){ +bool Output::remove(uint16_t n){ Output *tt,*pp=NULL; for(tt=firstOutput;tt!=NULL && tt->data.id!=n;pp=tt,tt=tt->nextOutput); @@ -160,7 +160,7 @@ void Output::store(){ } /////////////////////////////////////////////////////////////////////////////// -Output *Output::create(int id, int pin, int iFlag, int v){ +Output *Output::create(uint16_t id, uint8_t pin, uint8_t iFlag, uint8_t v){ Output *tt; if(firstOutput==NULL){ diff --git a/Outputs.h b/Outputs.h index 319f704..a0431e0 100644 --- a/Outputs.h +++ b/Outputs.h @@ -23,25 +23,27 @@ struct OutputData { uint8_t oStatus; - uint8_t id; + uint16_t id; uint8_t pin; uint8_t iFlag; }; class Output{ - public: + +public: void activate(int s); - static Output* get(int); - static bool remove(int); + static Output* get(uint16_t); + static bool remove(uint16_t); static void load(); static void store(); - static Output *create(int, int, int, int=0); + static Output *create(uint16_t, uint8_t, uint8_t, uint8_t=0); static Output *firstOutput; struct OutputData data; Output *nextOutput; static void printAll(Print *); - private: - int num; // Chris has no idea what this is all about! + +private: + int num; // EEPROM pointer (Chris has no idea what this is all about!) }; // Output diff --git a/version.h b/version.h index 9b926cd..97e34c7 100644 --- a/version.h +++ b/version.h @@ -3,7 +3,8 @@ #include "StringFormatter.h" -#define VERSION "3.1.4" +#define VERSION "3.1.5" +// 3.1.5 Make output ID two bytes // 3.1.4 Refactor OLED and LCD drivers and remove unused code // 3.1.3 Add a loop delay to give more time for sensing an Ethernet cable connection // 3.1.2 Eliminate wait after write when prog is joined or prog power is off