mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2025-02-17 06:29:15 +01:00
Implement <1 MAIN> etc.
This commit is contained in:
parent
5872659ff2
commit
c5045e4cac
@ -11,6 +11,9 @@
|
|||||||
|
|
||||||
const char VERSION[] PROGMEM ="99.666";
|
const char VERSION[] PROGMEM ="99.666";
|
||||||
|
|
||||||
|
const int HASH_KEYWORD_PROG=-29718;
|
||||||
|
const int HASH_KEYWORD_MAIN=11339;
|
||||||
|
|
||||||
int DCCEXParser::stashP[MAX_PARAMS];
|
int DCCEXParser::stashP[MAX_PARAMS];
|
||||||
bool DCCEXParser::stashBusy;
|
bool DCCEXParser::stashBusy;
|
||||||
|
|
||||||
@ -84,6 +87,12 @@ void DCCEXParser::loop(Stream & stream) {
|
|||||||
runningValue=10*runningValue+(hot-'0');
|
runningValue=10*runningValue+(hot-'0');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (hot>='A' && hot<='Z') {
|
||||||
|
// Since JMRI got modified to send keywords in some rare cases, we need this
|
||||||
|
// Super Kluge to turn keywords into a hash value that can be recognised later
|
||||||
|
runningValue = ((runningValue << 5) + runningValue) ^ hot;
|
||||||
|
break;
|
||||||
|
}
|
||||||
result[parameterCount] = runningValue * (signNegative ?-1:1);
|
result[parameterCount] = runningValue * (signNegative ?-1:1);
|
||||||
parameterCount++;
|
parameterCount++;
|
||||||
state=1;
|
state=1;
|
||||||
@ -164,16 +173,30 @@ void DCCEXParser::parse(Print & stream, const char *com) {
|
|||||||
DCC::readCV(p[0],callback_R);
|
DCC::readCV(p[0],callback_R);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case '1': // POWERON <1>
|
case '1': // POWERON <1 [MAIN|PROG]>
|
||||||
DCCWaveform::mainTrack.setPowerMode(POWERMODE::ON);
|
case '0': // POWEROFF <0 [MAIN | PROG] >
|
||||||
DCCWaveform::progTrack.setPowerMode(POWERMODE::ON);
|
if (params>1) break;
|
||||||
StringFormatter::send(stream,F("<p1>"));
|
{
|
||||||
|
POWERMODE mode= opcode=='1'?POWERMODE::ON:POWERMODE::OFF;
|
||||||
|
if (params==0) {
|
||||||
|
DCCWaveform::mainTrack.setPowerMode(mode);
|
||||||
|
DCCWaveform::progTrack.setPowerMode(mode);
|
||||||
|
StringFormatter::send(stream,F("<p%c>"),opcode);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
case '0': // POWEROFF <0>
|
if (p[0]==HASH_KEYWORD_MAIN) {
|
||||||
DCCWaveform::mainTrack.setPowerMode(POWERMODE::OFF);
|
DCCWaveform::mainTrack.setPowerMode(mode);
|
||||||
DCCWaveform::progTrack.setPowerMode(POWERMODE::OFF);
|
StringFormatter::send(stream,F("<p%c MAIN>"),opcode);
|
||||||
StringFormatter::send(stream,F("<p0>"));
|
return;
|
||||||
|
}
|
||||||
|
if (p[0]==HASH_KEYWORD_PROG) {
|
||||||
|
DCCWaveform::progTrack.setPowerMode(mode);
|
||||||
|
StringFormatter::send(stream,F("<p%c PROG>"),opcode);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DIAG(F("keyword hash=%d\n"),p[0]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case 'c': // READ CURRENT <c>
|
case 'c': // READ CURRENT <c>
|
||||||
|
Loading…
Reference in New Issue
Block a user