File tree Expand file tree Collapse file tree 4 files changed +20
-3
lines changed Expand file tree Collapse file tree 4 files changed +20
-3
lines changed Original file line number Diff line number Diff line change @@ -609,11 +609,19 @@ void RMFT2::loop2() {
609609 break ;
610610
611611 case OPCODE_SAVESPEED:
612- if (loco) saveSpeed = DCC::getThrottleSpeedByte (loco);
612+ if (loco) {
613+ auto slot=LocoSlot::getSlot (loco,false );
614+ if (slot) {
615+ slot->saveSpeed ();
616+ }
617+ }
613618 break ;
614619
615620 case OPCODE_RESTORESPEED:
616- if (loco) DCC::setThrottle (loco,saveSpeed,invert);
621+ if (loco) {
622+ auto slot=LocoSlot::getSlot (loco,false );
623+ if (slot) DCC::setThrottle (loco,slot->getSavedSpeed (),invert);
624+ }
617625 break ;
618626
619627 case OPCODE_RESERVE:
Original file line number Diff line number Diff line change @@ -302,7 +302,6 @@ class LookList {
302302 uint16_t loco;
303303 bool invert;
304304 byte pauseSpeed;
305- byte saveSpeed;
306305 int onEventStartPosition;
307306 byte stackDepth;
308307 int callStack[MAX_STACK_DEPTH];
Original file line number Diff line number Diff line change @@ -31,6 +31,7 @@ void LocoSlot::prepare(uint16_t locoId) {
3131 momentumA=MOMENTUM_USE_DEFAULT;
3232 momentumD=MOMENTUM_USE_DEFAULT;
3333 targetSpeed=128 ;
34+ savedSpeed=128 ;
3435 blockOccupied=0 ;
3536
3637 snifferSpeedCode=128 ; // default direction forward
@@ -80,6 +81,11 @@ void LocoSlot::forget() {
8081 chainModified=true ;
8182}
8283
84+ void LocoSlot::saveSpeed () {
85+ // targetSpeed should eventually to be the speed we want to reach and save
86+ savedSpeed=targetSpeed;
87+ }
88+
8389/* static */ void LocoSlot::forgetAll () {
8490 // remove entire list
8591 LocoSlot * killnext=nullptr ;
Original file line number Diff line number Diff line change @@ -45,6 +45,7 @@ class LocoSlot {
4545 uint16_t blockOccupied; // railcom detected block
4646
4747 byte targetSpeed; // speed set by throttle
48+ byte savedSpeed;
4849 byte speedCode; // current DCC speed and direction
4950 byte snifferSpeedCode; // sniffer speed and direction
5051 byte momentumA; // momentum accelerating
@@ -82,6 +83,8 @@ class LocoSlot {
8283 void setMomentumBase (uint32_t v) { momentum_base=v; }
8384 byte getTargetSpeed () { return targetSpeed; }
8485 void setTargetSpeed (byte v) { targetSpeed=v; }
86+ byte getSavedSpeed () { return savedSpeed; }
87+ void setSavedSpeed (byte v) { savedSpeed=v; }
8588
8689 byte getSpeedCode () { return speedCode; }
8790 void setSpeedCode (byte v) { speedCode=v; }
@@ -92,6 +95,7 @@ class LocoSlot {
9295 uint16_t getBlockOccupied () { return blockOccupied; }
9396 void setBlockOccupied (uint16_t v) { blockOccupied=v; }
9497 void forget ();
98+ void saveSpeed ();
9599
96100};
97101#endif
You can’t perform that action at this time.
0 commit comments