mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2025-03-14 18:13:09 +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) {
|
bool DCC::setMomentum(int locoId,int16_t millis_per_notch) {
|
||||||
if (locoId<0 || millis_per_notch<0) return false;
|
if (locoId==0 && millis_per_notch>=0) {
|
||||||
if (locoId==0) defaultMomentum=millis_per_notch;
|
defaultMomentum=millis_per_notch;
|
||||||
else {
|
return true;
|
||||||
auto reg=lookupSpeedTable(locoId);
|
|
||||||
if (reg<0) return false;
|
|
||||||
speedTable[reg].millis_per_notch=millis_per_notch;
|
|
||||||
}
|
}
|
||||||
|
// 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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,7 +68,8 @@ Once a new OPCODE is decided upon, update this list.
|
|||||||
K, Reserved for future use - Potentially Railcom
|
K, Reserved for future use - Potentially Railcom
|
||||||
l, Loco speedbyte/function map broadcast
|
l, Loco speedbyte/function map broadcast
|
||||||
L, Reserved for LCC interface (implemented in EXRAIL)
|
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
|
M, Write DCC packet
|
||||||
n, Reserved for SensorCam
|
n, Reserved for SensorCam
|
||||||
N, Reserved for Sensorcam
|
N, Reserved for Sensorcam
|
||||||
|
@ -566,6 +566,10 @@ void RMFT2::loop2() {
|
|||||||
forward=DCC::getThrottleDirection(loco)^invert;
|
forward=DCC::getThrottleDirection(loco)^invert;
|
||||||
driveLoco(operand);
|
driveLoco(operand);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case OPCODE_MOMENTUM:
|
||||||
|
DCC::setMomentum(loco,operand);
|
||||||
|
break;
|
||||||
|
|
||||||
case OPCODE_FORGET:
|
case OPCODE_FORGET:
|
||||||
if (loco!=0) {
|
if (loco!=0) {
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
//
|
//
|
||||||
enum OPCODE : byte {OPCODE_THROW,OPCODE_CLOSE,OPCODE_TOGGLE_TURNOUT,
|
enum OPCODE : byte {OPCODE_THROW,OPCODE_CLOSE,OPCODE_TOGGLE_TURNOUT,
|
||||||
OPCODE_FWD,OPCODE_REV,OPCODE_SPEED,OPCODE_INVERT_DIRECTION,
|
OPCODE_FWD,OPCODE_REV,OPCODE_SPEED,OPCODE_INVERT_DIRECTION,
|
||||||
|
OPCODE_MOMENTUM,
|
||||||
OPCODE_RESERVE,OPCODE_FREE,
|
OPCODE_RESERVE,OPCODE_FREE,
|
||||||
OPCODE_AT,OPCODE_AFTER,
|
OPCODE_AT,OPCODE_AFTER,
|
||||||
OPCODE_AFTEROVERLOAD,OPCODE_AUTOSTART,
|
OPCODE_AFTEROVERLOAD,OPCODE_AUTOSTART,
|
||||||
|
@ -98,6 +98,7 @@
|
|||||||
#undef LCC
|
#undef LCC
|
||||||
#undef LCCX
|
#undef LCCX
|
||||||
#undef LCN
|
#undef LCN
|
||||||
|
#undef MOMENTUM
|
||||||
#undef MOVETT
|
#undef MOVETT
|
||||||
#undef ACON
|
#undef ACON
|
||||||
#undef ACOF
|
#undef ACOF
|
||||||
@ -265,6 +266,7 @@
|
|||||||
#define LCC(eventid)
|
#define LCC(eventid)
|
||||||
#define LCCX(senderid,eventid)
|
#define LCCX(senderid,eventid)
|
||||||
#define LCD(row,msg)
|
#define LCD(row,msg)
|
||||||
|
#define MOMENTUM(mspertick)
|
||||||
#define SCREEN(display,row,msg)
|
#define SCREEN(display,row,msg)
|
||||||
#define LCN(msg)
|
#define LCN(msg)
|
||||||
#define MESSAGE(msg)
|
#define MESSAGE(msg)
|
||||||
|
@ -551,6 +551,7 @@ int RMFT2::onLCCLookup[RMFT2::countLCCLookup];
|
|||||||
#define STEALTH_GLOBAL(code...)
|
#define STEALTH_GLOBAL(code...)
|
||||||
#define LCN(msg) PRINT(msg)
|
#define LCN(msg) PRINT(msg)
|
||||||
#define MESSAGE(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 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 ONACTIVATE(addr,subaddr) OPCODE_ONACTIVATE,V(addr<<2|subaddr),
|
||||||
#define ONACTIVATEL(linear) OPCODE_ONACTIVATE,V(linear+3),
|
#define ONACTIVATEL(linear) OPCODE_ONACTIVATE,V(linear+3),
|
||||||
|
Loading…
Reference in New Issue
Block a user