Skip to content

Commit d9eddae

Browse files
author
Kristian Kalweit
committed
move speed save from task -> locoslot. I don't like how the restore works. I would prefer a method at locoslot, but there are any calls to DCC until now. Maybe by reason.
1 parent 1515948 commit d9eddae

File tree

4 files changed

+20
-3
lines changed

4 files changed

+20
-3
lines changed

EXRAIL2.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff 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:

EXRAIL2.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff 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];

LocoSlot.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff 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;

LocoSlot.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff 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

0 commit comments

Comments
 (0)