mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2024-12-23 12:51:24 +01:00
EXRAIL MOMENTUM
This commit is contained in:
parent
8a623aa1cb
commit
ab72a75d8f
16
DCC.cpp
16
DCC.cpp
@ -914,13 +914,17 @@ int DCC::lookupSpeedTable(int locoId, bool autoCreate) {
|
||||
}
|
||||
|
||||
bool DCC::setMomentum(int locoId,int16_t millis_per_notch) {
|
||||
if (locoId<0 || millis_per_notch<0) return false;
|
||||
if (locoId==0) defaultMomentum=millis_per_notch;
|
||||
else {
|
||||
auto reg=lookupSpeedTable(locoId);
|
||||
if (reg<0) return false;
|
||||
speedTable[reg].millis_per_notch=millis_per_notch;
|
||||
if (locoId==0 && millis_per_notch>=0) {
|
||||
defaultMomentum=millis_per_notch;
|
||||
return true;
|
||||
}
|
||||
// millis=-1 is ok and means this loco should use the default.
|
||||
// We dont copy the default here because it can be changed
|
||||
// while running and have immediate effect on all locos using -1.
|
||||
if (locoId<=0 || millis_per_notch<-1) return false;
|
||||
auto reg=lookupSpeedTable(locoId);
|
||||
if (reg<0) return false; // table full
|
||||
speedTable[reg].millis_per_notch=millis_per_notch;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -68,7 +68,8 @@ Once a new OPCODE is decided upon, update this list.
|
||||
K, Reserved for future use - Potentially Railcom
|
||||
l, Loco speedbyte/function map broadcast
|
||||
L, Reserved for LCC interface (implemented in EXRAIL)
|
||||
m, message to throttles broadcast
|
||||
m, message to throttles (broadcast output)
|
||||
m, set momentum
|
||||
M, Write DCC packet
|
||||
n, Reserved for SensorCam
|
||||
N, Reserved for Sensorcam
|
||||
|
@ -566,6 +566,10 @@ void RMFT2::loop2() {
|
||||
forward=DCC::getThrottleDirection(loco)^invert;
|
||||
driveLoco(operand);
|
||||
break;
|
||||
|
||||
case OPCODE_MOMENTUM:
|
||||
DCC::setMomentum(loco,operand);
|
||||
break;
|
||||
|
||||
case OPCODE_FORGET:
|
||||
if (loco!=0) {
|
||||
|
@ -35,6 +35,7 @@
|
||||
//
|
||||
enum OPCODE : byte {OPCODE_THROW,OPCODE_CLOSE,OPCODE_TOGGLE_TURNOUT,
|
||||
OPCODE_FWD,OPCODE_REV,OPCODE_SPEED,OPCODE_INVERT_DIRECTION,
|
||||
OPCODE_MOMENTUM,
|
||||
OPCODE_RESERVE,OPCODE_FREE,
|
||||
OPCODE_AT,OPCODE_AFTER,
|
||||
OPCODE_AFTEROVERLOAD,OPCODE_AUTOSTART,
|
||||
|
@ -98,6 +98,7 @@
|
||||
#undef LCC
|
||||
#undef LCCX
|
||||
#undef LCN
|
||||
#undef MOMENTUM
|
||||
#undef MOVETT
|
||||
#undef ACON
|
||||
#undef ACOF
|
||||
@ -265,6 +266,7 @@
|
||||
#define LCC(eventid)
|
||||
#define LCCX(senderid,eventid)
|
||||
#define LCD(row,msg)
|
||||
#define MOMENTUM(mspertick)
|
||||
#define SCREEN(display,row,msg)
|
||||
#define LCN(msg)
|
||||
#define MESSAGE(msg)
|
||||
|
@ -551,6 +551,7 @@ int RMFT2::onLCCLookup[RMFT2::countLCCLookup];
|
||||
#define STEALTH_GLOBAL(code...)
|
||||
#define LCN(msg) PRINT(msg)
|
||||
#define MESSAGE(msg) PRINT(msg)
|
||||
#define MOMENTUM(mspertick) OPCODE_MOMENTUM,V(mspertick),
|
||||
#define MOVETT(id,steps,activity) OPCODE_SERVO,V(id),OPCODE_PAD,V(steps),OPCODE_PAD,V(EXTurntable::activity),OPCODE_PAD,V(0),
|
||||
#define ONACTIVATE(addr,subaddr) OPCODE_ONACTIVATE,V(addr<<2|subaddr),
|
||||
#define ONACTIVATEL(linear) OPCODE_ONACTIVATE,V(linear+3),
|
||||
|
Loading…
Reference in New Issue
Block a user