mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2025-06-29 18:45:23 +02:00
EXRAIL: ONRAILSYNCON/OFF events added
This commit is contained in:
parent
978671a688
commit
8fcc2b0083
@ -153,7 +153,14 @@ void setup()
|
|||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
#ifdef ARDUINO_ARCH_ESP32
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
|
#ifdef BOOSTER_INPUT
|
||||||
|
static bool oldactive = false;
|
||||||
if (dccSniffer) {
|
if (dccSniffer) {
|
||||||
|
bool newactive = dccSniffer->inputActive();
|
||||||
|
if (oldactive != newactive) {
|
||||||
|
RMFT2::railsyncEvent(newactive);
|
||||||
|
oldactive = newactive;
|
||||||
|
}
|
||||||
DCCPacket p = dccSniffer->fetchPacket();
|
DCCPacket p = dccSniffer->fetchPacket();
|
||||||
if (p.len() != 0) {
|
if (p.len() != 0) {
|
||||||
if (DCCDecoder::parse(p)) {
|
if (DCCDecoder::parse(p)) {
|
||||||
@ -161,6 +168,7 @@ void loop()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif // BOOSTER_INPUT
|
||||||
#endif // ARDUINO_ARCH_ESP32
|
#endif // ARDUINO_ARCH_ESP32
|
||||||
|
|
||||||
// The main sketch has responsibilities during loop()
|
// The main sketch has responsibilities during loop()
|
||||||
|
23
EXRAIL2.cpp
23
EXRAIL2.cpp
@ -88,6 +88,10 @@ LookList * RMFT2::onClockLookup=NULL;
|
|||||||
LookList * RMFT2::onRotateLookup=NULL;
|
LookList * RMFT2::onRotateLookup=NULL;
|
||||||
#endif
|
#endif
|
||||||
LookList * RMFT2::onOverloadLookup=NULL;
|
LookList * RMFT2::onOverloadLookup=NULL;
|
||||||
|
#ifdef BOOSTER_INPUT
|
||||||
|
LookList * RMFT2::onRailSyncOnLookup=NULL;
|
||||||
|
LookList * RMFT2::onRailSyncOffLookup=NULL;
|
||||||
|
#endif
|
||||||
byte * RMFT2::routeStateArray=nullptr;
|
byte * RMFT2::routeStateArray=nullptr;
|
||||||
const FSH * * RMFT2::routeCaptionArray=nullptr;
|
const FSH * * RMFT2::routeCaptionArray=nullptr;
|
||||||
int16_t * RMFT2::stashArray=nullptr;
|
int16_t * RMFT2::stashArray=nullptr;
|
||||||
@ -204,6 +208,10 @@ LookList* RMFT2::LookListLoader(OPCODE op1, OPCODE op2, OPCODE op3) {
|
|||||||
onRotateLookup=LookListLoader(OPCODE_ONROTATE);
|
onRotateLookup=LookListLoader(OPCODE_ONROTATE);
|
||||||
#endif
|
#endif
|
||||||
onOverloadLookup=LookListLoader(OPCODE_ONOVERLOAD);
|
onOverloadLookup=LookListLoader(OPCODE_ONOVERLOAD);
|
||||||
|
#ifdef BOOSTER_INPUT
|
||||||
|
onRailSyncOnLookup=LookListLoader(OPCODE_ONRAILSYNCON);
|
||||||
|
onRailSyncOffLookup=LookListLoader(OPCODE_ONRAILSYNCOFF);
|
||||||
|
#endif
|
||||||
// onLCCLookup is not the same so not loaded here.
|
// onLCCLookup is not the same so not loaded here.
|
||||||
|
|
||||||
// Second pass startup, define any turnouts or servos, set signals red
|
// Second pass startup, define any turnouts or servos, set signals red
|
||||||
@ -1121,6 +1129,10 @@ void RMFT2::loop2() {
|
|||||||
case OPCODE_ONROTATE:
|
case OPCODE_ONROTATE:
|
||||||
#endif
|
#endif
|
||||||
case OPCODE_ONOVERLOAD:
|
case OPCODE_ONOVERLOAD:
|
||||||
|
#ifdef BOOSTER_INPUT
|
||||||
|
case OPCODE_ONRAILSYNCON:
|
||||||
|
case OPCODE_ONRAILSYNCOFF:
|
||||||
|
#endif
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1343,7 +1355,16 @@ void RMFT2::powerEvent(int16_t track, bool overload) {
|
|||||||
onOverloadLookup->handleEvent(F("POWER"),track);
|
onOverloadLookup->handleEvent(F("POWER"),track);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef BOOSTER_INPUT
|
||||||
|
void RMFT2::railsyncEvent(bool on) {
|
||||||
|
if (Diag::CMD)
|
||||||
|
DIAG(F("railsyncEvent : %d"), on);
|
||||||
|
if (on)
|
||||||
|
onRailSyncOnLookup->handleEvent(F("RAILSYNCON"), 0);
|
||||||
|
else
|
||||||
|
onRailSyncOffLookup->handleEvent(F("RAILSYNCOFF"), 0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
// This function is used when setting pins so that a SET or RESET
|
// This function is used when setting pins so that a SET or RESET
|
||||||
// will cause any blink task on that pin to terminate.
|
// will cause any blink task on that pin to terminate.
|
||||||
// It will be compiled out of existence if no BLINK feature is used.
|
// It will be compiled out of existence if no BLINK feature is used.
|
||||||
|
@ -73,6 +73,7 @@ enum OPCODE : byte {OPCODE_THROW,OPCODE_CLOSE,OPCODE_TOGGLE_TURNOUT,
|
|||||||
OPCODE_ACON, OPCODE_ACOF,
|
OPCODE_ACON, OPCODE_ACOF,
|
||||||
OPCODE_ONACON, OPCODE_ONACOF,
|
OPCODE_ONACON, OPCODE_ONACOF,
|
||||||
OPCODE_ONOVERLOAD,
|
OPCODE_ONOVERLOAD,
|
||||||
|
OPCODE_ONRAILSYNCON,OPCODE_ONRAILSYNCOFF,
|
||||||
OPCODE_ROUTE_ACTIVE,OPCODE_ROUTE_INACTIVE,OPCODE_ROUTE_HIDDEN,
|
OPCODE_ROUTE_ACTIVE,OPCODE_ROUTE_INACTIVE,OPCODE_ROUTE_HIDDEN,
|
||||||
OPCODE_ROUTE_DISABLED,
|
OPCODE_ROUTE_DISABLED,
|
||||||
OPCODE_STASH,OPCODE_CLEAR_STASH,OPCODE_CLEAR_ALL_STASH,OPCODE_PICKUP_STASH,
|
OPCODE_STASH,OPCODE_CLEAR_STASH,OPCODE_CLEAR_ALL_STASH,OPCODE_PICKUP_STASH,
|
||||||
@ -188,6 +189,9 @@ class LookList {
|
|||||||
static void clockEvent(int16_t clocktime, bool change);
|
static void clockEvent(int16_t clocktime, bool change);
|
||||||
static void rotateEvent(int16_t id, bool change);
|
static void rotateEvent(int16_t id, bool change);
|
||||||
static void powerEvent(int16_t track, bool overload);
|
static void powerEvent(int16_t track, bool overload);
|
||||||
|
#ifdef BOOSTER_INPUT
|
||||||
|
static void railsyncEvent(bool on);
|
||||||
|
#endif
|
||||||
static bool signalAspectEvent(int16_t address, byte aspect );
|
static bool signalAspectEvent(int16_t address, byte aspect );
|
||||||
// Throttle Info Access functions built by exrail macros
|
// Throttle Info Access functions built by exrail macros
|
||||||
static const byte rosterNameCount;
|
static const byte rosterNameCount;
|
||||||
@ -255,7 +259,10 @@ private:
|
|||||||
static LookList * onRotateLookup;
|
static LookList * onRotateLookup;
|
||||||
#endif
|
#endif
|
||||||
static LookList * onOverloadLookup;
|
static LookList * onOverloadLookup;
|
||||||
|
#ifdef BOOSTER_INPUT
|
||||||
|
static LookList * onRailSyncOnLookup;
|
||||||
|
static LookList * onRailSyncOffLookup;
|
||||||
|
#endif
|
||||||
static const int countLCCLookup;
|
static const int countLCCLookup;
|
||||||
static int onLCCLookup[];
|
static int onLCCLookup[];
|
||||||
static const byte compileFeatures;
|
static const byte compileFeatures;
|
||||||
|
@ -119,6 +119,8 @@
|
|||||||
#undef ONCLOCKTIME
|
#undef ONCLOCKTIME
|
||||||
#undef ONCLOCKMINS
|
#undef ONCLOCKMINS
|
||||||
#undef ONOVERLOAD
|
#undef ONOVERLOAD
|
||||||
|
#undef ONRAILSYNCON
|
||||||
|
#undef ONRAILSYNCOFF
|
||||||
#undef ONGREEN
|
#undef ONGREEN
|
||||||
#undef ONRED
|
#undef ONRED
|
||||||
#undef ONROTATE
|
#undef ONROTATE
|
||||||
@ -288,6 +290,8 @@
|
|||||||
#define ONCLOCKTIME(hours,mins)
|
#define ONCLOCKTIME(hours,mins)
|
||||||
#define ONCLOCKMINS(mins)
|
#define ONCLOCKMINS(mins)
|
||||||
#define ONOVERLOAD(track_id)
|
#define ONOVERLOAD(track_id)
|
||||||
|
#define ONRAILSYNCON
|
||||||
|
#define ONRAILSYNCOFF
|
||||||
#define ONDEACTIVATE(addr,subaddr)
|
#define ONDEACTIVATE(addr,subaddr)
|
||||||
#define ONDEACTIVATEL(linear)
|
#define ONDEACTIVATEL(linear)
|
||||||
#define ONCLOSE(turnout_id)
|
#define ONCLOSE(turnout_id)
|
||||||
|
@ -584,6 +584,8 @@ int RMFT2::onLCCLookup[RMFT2::countLCCLookup];
|
|||||||
#define ONCLOCKTIME(hours,mins) OPCODE_ONTIME,V((STRIP_ZERO(hours)*60)+STRIP_ZERO(mins)),
|
#define ONCLOCKTIME(hours,mins) OPCODE_ONTIME,V((STRIP_ZERO(hours)*60)+STRIP_ZERO(mins)),
|
||||||
#define ONCLOCKMINS(mins) ONCLOCKTIME(25,mins)
|
#define ONCLOCKMINS(mins) ONCLOCKTIME(25,mins)
|
||||||
#define ONOVERLOAD(track_id) OPCODE_ONOVERLOAD,V(TRACK_NUMBER_##track_id),
|
#define ONOVERLOAD(track_id) OPCODE_ONOVERLOAD,V(TRACK_NUMBER_##track_id),
|
||||||
|
#define ONRAILSYNCON OPCODE_ONRAILSYNCON,0,0,
|
||||||
|
#define ONRAILSYNCOFF OPCODE_ONRAILSYNCOFF,0,0,
|
||||||
#define ONDEACTIVATE(addr,subaddr) OPCODE_ONDEACTIVATE,V(addr<<2|subaddr),
|
#define ONDEACTIVATE(addr,subaddr) OPCODE_ONDEACTIVATE,V(addr<<2|subaddr),
|
||||||
#define ONDEACTIVATEL(linear) OPCODE_ONDEACTIVATE,V(linear+3),
|
#define ONDEACTIVATEL(linear) OPCODE_ONDEACTIVATE,V(linear+3),
|
||||||
#define ONGREEN(signal_id) OPCODE_ONGREEN,V(signal_id),
|
#define ONGREEN(signal_id) OPCODE_ONGREEN,V(signal_id),
|
||||||
|
@ -1 +1 @@
|
|||||||
#define GITHUB_SHA "devel-202503312038Z"
|
#define GITHUB_SHA "devel-202504171929Z"
|
||||||
|
@ -103,6 +103,11 @@ Sniffer::Sniffer(byte snifferpin) {
|
|||||||
ESP_ERROR_CHECK(mcpwm_capture_enable_channel(MCPWM_UNIT_0, MCPWM_SELECT_CAP0, &MCPWM_cap_config));
|
ESP_ERROR_CHECK(mcpwm_capture_enable_channel(MCPWM_UNIT_0, MCPWM_SELECT_CAP0, &MCPWM_cap_config));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Sniffer::inputActive(){
|
||||||
|
unsigned long now = millis();
|
||||||
|
return ((now - lastendofpacket) < 1000);
|
||||||
|
}
|
||||||
|
|
||||||
#define DCC_TOO_SHORT 4000L // 4000 ticks are 50usec
|
#define DCC_TOO_SHORT 4000L // 4000 ticks are 50usec
|
||||||
#define DCC_ONE_LIMIT 6400L // 6400 ticks are 80usec
|
#define DCC_ONE_LIMIT 6400L // 6400 ticks are 80usec
|
||||||
|
|
||||||
@ -191,6 +196,7 @@ void IRAM_ATTR Sniffer::processInterrupt(int32_t capticks, bool posedge) {
|
|||||||
// blink_diag(1);
|
// blink_diag(1);
|
||||||
packeterror(); // or better?
|
packeterror(); // or better?
|
||||||
}
|
}
|
||||||
|
lastendofpacket = millis();
|
||||||
DCCPacket temppacket(dccbytes, dcclen);
|
DCCPacket temppacket(dccbytes, dcclen);
|
||||||
if (!(temppacket == prevpacket)) {
|
if (!(temppacket == prevpacket)) {
|
||||||
// we have something new to offer to the fetch routine
|
// we have something new to offer to the fetch routine
|
||||||
|
@ -57,6 +57,7 @@ public:
|
|||||||
interrupts();
|
interrupts();
|
||||||
return p;
|
return p;
|
||||||
};
|
};
|
||||||
|
bool inputActive();
|
||||||
private:
|
private:
|
||||||
// keep these vars in processInterrupt only
|
// keep these vars in processInterrupt only
|
||||||
uint64_t bitfield = 0;
|
uint64_t bitfield = 0;
|
||||||
@ -73,5 +74,7 @@ private:
|
|||||||
bool fetchflag = false;
|
bool fetchflag = false;
|
||||||
std::list<DCCPacket> outpacket;
|
std::list<DCCPacket> outpacket;
|
||||||
DCCPacket prevpacket;
|
DCCPacket prevpacket;
|
||||||
|
volatile unsigned long lastendofpacket = 0; // timestamp millis
|
||||||
|
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user