From 720a073ef028d4ac20cb80a644d1a1204f227a81 Mon Sep 17 00:00:00 2001 From: uvos Date: Mon, 31 Jan 2022 21:29:39 +0100 Subject: [PATCH] add status reporting line on every change of train and turnout state --- main.cpp | 56 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/main.cpp b/main.cpp index 30c135a..df0fff6 100644 --- a/main.cpp +++ b/main.cpp @@ -137,6 +137,15 @@ void setPower(bool on) } } +void printTurnoutState(uint8_t id, Serial* serial) +{ + snprintf(buffer, SNPRINTF_BUFFER_SIZE, + "NUMBER: %u ADDRESS: %u SUBADDRESS: %u CURRENT PACKET: %x DIRECTION: %u\n", + id, turnouts[id].getAddress(), turnouts[id].getSubaddress(), + turnouts[id].getPacket(), turnouts[id].getDirection()); + serial->write(buffer, SNPRINTF_BUFFER_SIZE); +} + int turnoutDispatch(char* inBuffer, Serial* serial) { if( strcmp(inBuffer, "add") == 0 ) @@ -154,12 +163,8 @@ int turnoutDispatch(char* inBuffer, Serial* serial) subaddress = strtol(token, nullptr, 10); turnouts.push_back(Turnout(address, subaddress)); - - uint8_t size = snprintf(buffer, SNPRINTF_BUFFER_SIZE, "TUNROUT saved! NUMBER: %u ADDRESS: %u SUBADDRESS: %u\n", - turnouts.count()-1, - address, - turnouts.back().getSubaddress()); - serial->write(buffer, size); + serial->write_p(PSTR("TUNROUT saved! ")); + printTurnoutState(turnouts.count()-1, serial); save_state(); return 0; @@ -170,12 +175,7 @@ int turnoutDispatch(char* inBuffer, Serial* serial) { serial->write_p(PSTR("Turnouts:\n")); for(uint8_t i = 0; i < turnouts.count(); i++) - { - snprintf(buffer, SNPRINTF_BUFFER_SIZE, "NUMBER: %u ADDRESS: %u SUBADDRESS: %u CURRENT PACKET: %x DIRECTION: %u\n", - i, turnouts[i].getAddress(), turnouts[i].getSubaddress(), - turnouts[i].getPacket(), turnouts[i].getDirection()); - serial->write(buffer, SNPRINTF_BUFFER_SIZE); - } + printTurnoutState(i, serial); serial->putChar('\n'); return 0; } @@ -195,6 +195,7 @@ int turnoutDispatch(char* inBuffer, Serial* serial) turnouts[id].setDirection(direction); serial->write_p(PSTR("Set turnout direction ")); serial->write(direction ? "right\n" : "left\n"); + printTurnoutState(id, serial); return 0; } } @@ -245,6 +246,16 @@ int turnoutDispatch(char* inBuffer, Serial* serial) return -3; } +void printTrainState(int id, Serial* serial) +{ + snprintf(buffer, SNPRINTF_BUFFER_SIZE, + "NUMBER: %u ADDRESS: %u CURRENT PACKET: %x SPEED: %i FUNCTIONS: %s FUNCTIONMASK: %s\n", + id, trains[id].getAddress(), + trains[id].getLastPacket(), trains[id].getSpeed(), + bit_rep[trains[id].getFunctions() & 0x0F], bit_rep[trains[id].getFunctionMask() & 0x0F]); + serial->write(buffer, SNPRINTF_BUFFER_SIZE); +} + int trainDispatch(char* inBuffer, Serial* serial) { if( strcmp(inBuffer, "add") == 0 ) @@ -262,13 +273,9 @@ int trainDispatch(char* inBuffer, Serial* serial) functionMask = strtol(token, nullptr, 2); trains.push_back(Train(address, functionMask)); - - uint8_t size = snprintf(buffer, SNPRINTF_BUFFER_SIZE, "TRAIN saved! NUMBER: %u ADDRESS: %u FUNCTIONS: %s FUNCTIONMASK: %s\n", - trains.count(), - address, - bit_rep[trains.back().getFunctions() & 0x0F], - bit_rep[trains.back().getFunctionMask() & 0x0F]); - serial->write(buffer, size); + + serial->write_p(PSTR("TRAIN saved! ")); + printTrainState(trains.count()-1, serial); save_state(); return 0; @@ -279,13 +286,7 @@ int trainDispatch(char* inBuffer, Serial* serial) { serial->write_p(PSTR("Trains:\n")); for(uint8_t i = 0; i < trains.count(); i++) - { - snprintf(buffer, SNPRINTF_BUFFER_SIZE, "NUMBER: %u ADDRESS: %u CURRENT PACKET: %x SPEED: %i FUNCTIONS: %s FUNCTIONMASK: %s\n", - i, trains[i].getAddress(), - trains[i].getLastPacket(), trains[i].getSpeed(), - bit_rep[trains[i].getFunctions() & 0x0F], bit_rep[trains[i].getFunctionMask() & 0x0F]); - serial->write(buffer, SNPRINTF_BUFFER_SIZE); - } + printTrainState(i, serial); serial->putChar('\n'); return 0; } @@ -322,6 +323,7 @@ int trainDispatch(char* inBuffer, Serial* serial) token = strtok(NULL, " "); trains[id].setSpeed(atoi(token)); serial->write_p(PSTR("Set Train speed\n")); + printTrainState(id, serial); return 0; } else if(token != NULL && strcmp(token, "function") == 0 ) @@ -336,6 +338,7 @@ int trainDispatch(char* inBuffer, Serial* serial) serial->write_p(PSTR("Set Train function ")); serial->write(functionId); serial->write(on ? " on\n" : " off\n"); + printTrainState(id, serial); return 0; } } @@ -383,6 +386,7 @@ int trainDispatch(char* inBuffer, Serial* serial) else if( token != NULL && (strcmp(token, "stop") == 0 || strcmp(token, "p") == 0)) { trains[id].stop(); + printTrainState(id, serial); return 0; } else if( token != NULL && strcmp(token, "delete") == 0)