1
0
mirror of https://github.com/DCC-EX/CommandStation-EX.git synced 2024-11-26 17:46:14 +01:00

SENDLOCO/START mixup

This commit is contained in:
Asbelos 2021-08-15 17:17:41 +01:00
parent 3ee7ba0b53
commit 1e61c2cd61
4 changed files with 17 additions and 10 deletions

View File

@ -547,12 +547,18 @@ void RMFT2::loop2() {
case OPCODE_START: case OPCODE_START:
{ {
// Create new task and transfer loco..... int newPc=locateRouteStart(GET_OPERAND(1));
// but cheat by swapping prog counters with new task
int newPc=locateRouteStart(operand);
if (newPc<0) break; if (newPc<0) break;
new RMFT2(progCounter+3); // give new task my prog counter new RMFT2(newPc);
progCounter=newPc; // and I'll carry on from new task position }
break;
case OPCODE_SENDLOCO: // cab, route
{
int newPc=locateRouteStart(GET_OPERAND(1));
if (newPc<0) break;
RMFT2* newtask=new RMFT2(newPc); // create new task
newtask->loco=operand;
} }
break; break;

View File

@ -39,7 +39,7 @@ enum OPCODE : byte {OPCODE_THROW,OPCODE_CLOSE,
OPCODE_SERVO,OPCODE_SIGNAL,OPCODE_TURNOUT, OPCODE_SERVO,OPCODE_SIGNAL,OPCODE_TURNOUT,
OPCODE_PAD,OPCODE_FOLLOW,OPCODE_CALL,OPCODE_RETURN, OPCODE_PAD,OPCODE_FOLLOW,OPCODE_CALL,OPCODE_RETURN,
OPCODE_JOIN,OPCODE_UNJOIN,OPCODE_READ_LOCO1,OPCODE_READ_LOCO2,OPCODE_POM, OPCODE_JOIN,OPCODE_UNJOIN,OPCODE_READ_LOCO1,OPCODE_READ_LOCO2,OPCODE_POM,
OPCODE_START,OPCODE_SETLOCO, OPCODE_START,OPCODE_SETLOCO,OPCODE_SENDLOCO,
OPCODE_PAUSE, OPCODE_RESUME, OPCODE_PAUSE, OPCODE_RESUME,
OPCODE_ONCLOSE, OPCODE_ONTHROW, OPCODE_SERVOTURNOUT, OPCODE_PINTURNOUT, OPCODE_ONCLOSE, OPCODE_ONTHROW, OPCODE_SERVOTURNOUT, OPCODE_PINTURNOUT,
OPCODE_PRINT, OPCODE_PRINT,

View File

@ -88,6 +88,7 @@
#define RETURN #define RETURN
#define REV(speed) #define REV(speed)
#define START(route) #define START(route)
#define SENDLOCO(cab,route)
#define SERVO(id,position,profile) #define SERVO(id,position,profile)
#define SETLOCO(loco) #define SETLOCO(loco)
#define SET(sensor_id) #define SET(sensor_id)
@ -168,6 +169,7 @@ const int StringMacroTracker1=__COUNTER__;
#undef START #undef START
#undef SEQUENCE #undef SEQUENCE
#undef SERVO #undef SERVO
#undef SENDLOCO
#undef SETLOCO #undef SETLOCO
#undef SET #undef SET
#undef SPEED #undef SPEED
@ -226,6 +228,7 @@ const int StringMacroTracker1=__COUNTER__;
#define RESUME OPCODE_RESUME,NOP, #define RESUME OPCODE_RESUME,NOP,
#define RETURN OPCODE_RETURN,NOP, #define RETURN OPCODE_RETURN,NOP,
#define REV(speed) OPCODE_REV,V(speed), #define REV(speed) OPCODE_REV,V(speed),
#define SENDLOCO(cab,route) OPCODE_START,V(cab),OPCODE_PAD,V(route),
#define START(route) OPCODE_START,V(route), #define START(route) OPCODE_START,V(route),
#define SERVO(id,position,profile) OPCODE_SERVO,V(id),OPCODE_PAD,V(position),OPCODE_PAD,V(PCA9685::ProfileType::profile), #define SERVO(id,position,profile) OPCODE_SERVO,V(id),OPCODE_PAD,V(position),OPCODE_PAD,V(PCA9685::ProfileType::profile),
#define SETLOCO(loco) OPCODE_SETLOCO,V(loco), #define SETLOCO(loco) OPCODE_SETLOCO,V(loco),

View File

@ -26,10 +26,8 @@
EXRAIL // myAutomation must start with the EXRAIL instruction EXRAIL // myAutomation must start with the EXRAIL instruction
// This is the default starting route, AKA SEQUENCE(0) // This is the default starting route, AKA SEQUENCE(0)
SETLOCO(3) // set current loco id... SENDLOCO(3,1) // send loco 3 off along route 1
START(1) // send current loco off along route 1 SENDLOCO(10,2) // send loco 10 off along route 2
SETLOCO(10) // set current loco id...
START(2) // send current loco off along route 2
DONE // This just ends the startup thread, leaving 2 others running. DONE // This just ends the startup thread, leaving 2 others running.
/* SEQUENCE(1) is a simple shuttle between 2 sensors /* SEQUENCE(1) is a simple shuttle between 2 sensors