mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2024-11-26 17:46:14 +01:00
Merge branch '240-command-shows-flags-without-signal-aspect-information' into TrackManager
This commit is contained in:
commit
5f568c05b9
|
@ -189,7 +189,21 @@ void DCCEXParser::parse(const FSH * cmd) {
|
||||||
|
|
||||||
// See documentation on DCC class for info on this section
|
// See documentation on DCC class for info on this section
|
||||||
|
|
||||||
void DCCEXParser::parse(Print *stream, byte *com, RingStream * ringStream)
|
void DCCEXParser::parse(Print *stream, byte *com, RingStream *ringStream) {
|
||||||
|
// This function can get stings of the form "<C OMM AND>" or "C OMM AND"
|
||||||
|
// found is true first after the leading "<" has been passed
|
||||||
|
bool found = (com[0] != '<');
|
||||||
|
for (byte *c=com; c[0] != '\0'; c++) {
|
||||||
|
if (found) {
|
||||||
|
parseOne(stream, c, ringStream);
|
||||||
|
found=false;
|
||||||
|
}
|
||||||
|
if (c[0] == '<')
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DCCEXParser::parseOne(Print *stream, byte *com, RingStream * ringStream)
|
||||||
{
|
{
|
||||||
#ifndef DISABLE_EEPROM
|
#ifndef DISABLE_EEPROM
|
||||||
(void)EEPROM; // tell compiler not to warn this is unused
|
(void)EEPROM; // tell compiler not to warn this is unused
|
||||||
|
|
|
@ -33,6 +33,7 @@ struct DCCEXParser
|
||||||
|
|
||||||
static void parse(Print * stream, byte * command, RingStream * ringStream);
|
static void parse(Print * stream, byte * command, RingStream * ringStream);
|
||||||
static void parse(const FSH * cmd);
|
static void parse(const FSH * cmd);
|
||||||
|
static void parseOne(Print * stream, byte * command, RingStream * ringStream);
|
||||||
static void setFilter(FILTER_CALLBACK filter);
|
static void setFilter(FILTER_CALLBACK filter);
|
||||||
static void setRMFTFilter(FILTER_CALLBACK filter);
|
static void setRMFTFilter(FILTER_CALLBACK filter);
|
||||||
static void setAtCommandCallback(AT_COMMAND_CALLBACK filter);
|
static void setAtCommandCallback(AT_COMMAND_CALLBACK filter);
|
||||||
|
|
23
EXRAIL2.cpp
23
EXRAIL2.cpp
|
@ -172,7 +172,7 @@ int16_t LookList::find(int16_t value) {
|
||||||
for (int sigpos=0;;sigpos+=4) {
|
for (int sigpos=0;;sigpos+=4) {
|
||||||
VPIN sigid=GETFLASHW(RMFT2::SignalDefinitions+sigpos);
|
VPIN sigid=GETFLASHW(RMFT2::SignalDefinitions+sigpos);
|
||||||
if (sigid==0) break; // end of signal list
|
if (sigid==0) break; // end of signal list
|
||||||
doSignal(sigid & (~ SERVO_SIGNAL_FLAG) & (~ACTIVE_HIGH_SIGNAL_FLAG), SIGNAL_RED);
|
doSignal(sigid & SIGNAL_ID_MASK, SIGNAL_RED);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (progCounter=0;; SKIPOP){
|
for (progCounter=0;; SKIPOP){
|
||||||
|
@ -320,12 +320,23 @@ bool RMFT2::parseSlash(Print * stream, byte & paramCount, int16_t p[]) {
|
||||||
// Now stream the flags
|
// Now stream the flags
|
||||||
for (int id=0;id<MAX_FLAGS; id++) {
|
for (int id=0;id<MAX_FLAGS; id++) {
|
||||||
byte flag=flags[id];
|
byte flag=flags[id];
|
||||||
if (flag & ~TASK_FLAG) { // not interested in TASK_FLAG only. Already shown above
|
if (flag & ~TASK_FLAG & ~SIGNAL_MASK) { // not interested in TASK_FLAG only. Already shown above
|
||||||
StringFormatter::send(stream,F("\nflags[%d} "),id);
|
StringFormatter::send(stream,F("\nflags[%d] "),id);
|
||||||
if (flag & SECTION_FLAG) StringFormatter::send(stream,F(" RESERVED"));
|
if (flag & SECTION_FLAG) StringFormatter::send(stream,F(" RESERVED"));
|
||||||
if (flag & LATCH_FLAG) StringFormatter::send(stream,F(" LATCHED"));
|
if (flag & LATCH_FLAG) StringFormatter::send(stream,F(" LATCHED"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// do the signals
|
||||||
|
// flags[n] represents the state of the nth signal in the table
|
||||||
|
for (int sigslot=0;;sigslot++) {
|
||||||
|
VPIN sigid=GETFLASHW(RMFT2::SignalDefinitions+sigslot*4);
|
||||||
|
if (sigid==0) break; // end of signal list
|
||||||
|
byte flag=flags[sigslot] & SIGNAL_MASK; // obtain signal flags for this id
|
||||||
|
StringFormatter::send(stream,F("\n%S[%d]"),
|
||||||
|
(flag == SIGNAL_RED)? F("RED") : (flag==SIGNAL_GREEN) ? F("GREEN") : F("AMBER"),
|
||||||
|
sigid & SIGNAL_ID_MASK);
|
||||||
|
}
|
||||||
|
|
||||||
StringFormatter::send(stream,F(" *>\n"));
|
StringFormatter::send(stream,F(" *>\n"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -996,7 +1007,7 @@ int16_t RMFT2::getSignalSlot(VPIN id) {
|
||||||
// for a LED signal it will be same as redpin
|
// for a LED signal it will be same as redpin
|
||||||
// but for a servo signal it will also have SERVO_SIGNAL_FLAG set.
|
// but for a servo signal it will also have SERVO_SIGNAL_FLAG set.
|
||||||
|
|
||||||
if ((sigid & ~SERVO_SIGNAL_FLAG & ~ACTIVE_HIGH_SIGNAL_FLAG)!= id) continue; // keep looking
|
if ((sigid & SIGNAL_ID_MASK)!= id) continue; // keep looking
|
||||||
return sigpos/4; // relative slot in signals table
|
return sigpos/4; // relative slot in signals table
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -108,6 +108,7 @@ class LookList {
|
||||||
static void activateEvent(int16_t addr, bool active);
|
static void activateEvent(int16_t addr, bool active);
|
||||||
static const int16_t SERVO_SIGNAL_FLAG=0x4000;
|
static const int16_t SERVO_SIGNAL_FLAG=0x4000;
|
||||||
static const int16_t ACTIVE_HIGH_SIGNAL_FLAG=0x2000;
|
static const int16_t ACTIVE_HIGH_SIGNAL_FLAG=0x2000;
|
||||||
|
static const int16_t SIGNAL_ID_MASK=0x0FFF;
|
||||||
|
|
||||||
// Throttle Info Access functions built by exrail macros
|
// Throttle Info Access functions built by exrail macros
|
||||||
static const byte rosterNameCount;
|
static const byte rosterNameCount;
|
||||||
|
|
|
@ -60,9 +60,9 @@ protected:
|
||||||
union {
|
union {
|
||||||
struct {
|
struct {
|
||||||
bool closed : 1;
|
bool closed : 1;
|
||||||
bool _rfu: 2;
|
bool hidden : 1;
|
||||||
bool hidden: 1;
|
bool _rfu : 1;
|
||||||
uint8_t turnoutType : 4;
|
uint8_t turnoutType : 5;
|
||||||
};
|
};
|
||||||
uint8_t flags;
|
uint8_t flags;
|
||||||
};
|
};
|
||||||
|
|
|
@ -11,6 +11,11 @@
|
||||||
// TrackManager DCC & DC up to 8 Districts Architecture
|
// TrackManager DCC & DC up to 8 Districts Architecture
|
||||||
// Automatic ALIAS(name)
|
// Automatic ALIAS(name)
|
||||||
// Command Parser now accepts Underscore in Alias Names
|
// Command Parser now accepts Underscore in Alias Names
|
||||||
|
// 4.1.1 Bugfix: preserve turnout format
|
||||||
|
// Bugfix: parse multiple commands in one buffer string correct
|
||||||
|
// Bugfix: </> command signal status in Exrail
|
||||||
|
// 4.1.0 ...
|
||||||
|
//
|
||||||
// 4.0.2 EXRAIL additions:
|
// 4.0.2 EXRAIL additions:
|
||||||
// ACK defaults set to 50mA LIMIT, 2000uS MIN, 20000uS MAX
|
// ACK defaults set to 50mA LIMIT, 2000uS MIN, 20000uS MAX
|
||||||
// myFilter automatic detection (no need to call setFilter)
|
// myFilter automatic detection (no need to call setFilter)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user