mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2025-03-31 10:40:12 +02:00
Auto prog power diagnostics and cleanup
This commit is contained in:
parent
603c8e4fcd
commit
a86b65ced0
28
DCC.cpp
28
DCC.cpp
@ -513,8 +513,9 @@ void DCC::ackManagerLoop(bool blocking) {
|
|||||||
switch (opcode) {
|
switch (opcode) {
|
||||||
case BASELINE:
|
case BASELINE:
|
||||||
if (DCCWaveform::progTrack.getPowerMode() == POWERMODE::OFF) {
|
if (DCCWaveform::progTrack.getPowerMode() == POWERMODE::OFF) {
|
||||||
DCCWaveform::progTrack.setPowerMode(POWERMODE::ON);
|
if (Diag::ACK) DIAG(F("\nAuto Prog power on"));
|
||||||
DCCWaveform::progTrack.sentResetsSincePacket = 0;
|
DCCWaveform::progTrack.setPowerMode(POWERMODE::ON);
|
||||||
|
DCCWaveform::progTrack.sentResetsSincePacket = 0;
|
||||||
DCCWaveform::progTrack.autoPowerOff=true;
|
DCCWaveform::progTrack.autoPowerOff=true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -582,8 +583,7 @@ void DCC::ackManagerLoop(bool blocking) {
|
|||||||
case ITC1: // If True Callback(0 or 1) (if prevous WACK got an ACK)
|
case ITC1: // If True Callback(0 or 1) (if prevous WACK got an ACK)
|
||||||
if (ackReceived) {
|
if (ackReceived) {
|
||||||
ackManagerProg = NULL; // all done now
|
ackManagerProg = NULL; // all done now
|
||||||
DCCWaveform::progTrack.doAutoPowerOff();
|
callback(opcode==ITC0?0:1);
|
||||||
callback(opcode==ITC0?0:1);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -591,8 +591,7 @@ void DCC::ackManagerLoop(bool blocking) {
|
|||||||
case ITCB: // If True callback(byte)
|
case ITCB: // If True callback(byte)
|
||||||
if (ackReceived) {
|
if (ackReceived) {
|
||||||
ackManagerProg = NULL; // all done now
|
ackManagerProg = NULL; // all done now
|
||||||
DCCWaveform::progTrack.doAutoPowerOff();
|
callback(ackManagerByte);
|
||||||
callback(ackManagerByte);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -600,16 +599,14 @@ void DCC::ackManagerLoop(bool blocking) {
|
|||||||
case NAKFAIL: // If nack callback(-1)
|
case NAKFAIL: // If nack callback(-1)
|
||||||
if (!ackReceived) {
|
if (!ackReceived) {
|
||||||
ackManagerProg = NULL; // all done now
|
ackManagerProg = NULL; // all done now
|
||||||
DCCWaveform::progTrack.doAutoPowerOff();
|
callback(-1);
|
||||||
callback(-1);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FAIL: // callback(-1)
|
case FAIL: // callback(-1)
|
||||||
ackManagerProg = NULL;
|
ackManagerProg = NULL;
|
||||||
DCCWaveform::progTrack.doAutoPowerOff();
|
callback(-1);
|
||||||
callback(-1);
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case STARTMERGE:
|
case STARTMERGE:
|
||||||
@ -641,7 +638,6 @@ void DCC::ackManagerLoop(bool blocking) {
|
|||||||
case COMBINELOCOID:
|
case COMBINELOCOID:
|
||||||
// ackManagerStash is cv17, ackManagerByte is CV 18
|
// ackManagerStash is cv17, ackManagerByte is CV 18
|
||||||
ackManagerProg=NULL;
|
ackManagerProg=NULL;
|
||||||
DCCWaveform::progTrack.doAutoPowerOff();
|
|
||||||
callback( ackManagerByte + ((ackManagerStash - 192) << 8));
|
callback( ackManagerByte + ((ackManagerStash - 192) << 8));
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -656,7 +652,7 @@ void DCC::ackManagerLoop(bool blocking) {
|
|||||||
case SKIPTARGET:
|
case SKIPTARGET:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
DIAG(F("!! ackOp %d FAULT!!"),opcode);
|
DIAG(F("\n!! ackOp %d FAULT!!"),opcode);
|
||||||
ackManagerProg=NULL;
|
ackManagerProg=NULL;
|
||||||
callback( -1);
|
callback( -1);
|
||||||
return;
|
return;
|
||||||
@ -666,8 +662,12 @@ void DCC::ackManagerLoop(bool blocking) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
void DCC::callback(int value) {
|
void DCC::callback(int value) {
|
||||||
if (Diag::ACK) DIAG(F("\nCallback(%d)\n"),value);
|
if (DCCWaveform::progTrack.autoPowerOff) {
|
||||||
(ackManagerCallback)( value);
|
if (Diag::ACK) DIAG(F("\nAuto Prog power off"));
|
||||||
|
DCCWaveform::progTrack.doAutoPowerOff();
|
||||||
|
}
|
||||||
|
if (Diag::ACK) DIAG(F("\nCallback(%d)\n"),value);
|
||||||
|
(ackManagerCallback)( value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DCC::displayCabList(Print * stream) {
|
void DCC::displayCabList(Print * stream) {
|
||||||
|
@ -184,6 +184,7 @@ void DCCEXParser::parse(Print * stream, byte *com, bool blocking) {
|
|||||||
|
|
||||||
DCC::setThrottle(cab,tspeed,direction);
|
DCC::setThrottle(cab,tspeed,direction);
|
||||||
if (params==4) StringFormatter::send(stream,F("<T %d %d %d>"), p[0], p[2],p[3]);
|
if (params==4) StringFormatter::send(stream,F("<T %d %d %d>"), p[0], p[2],p[3]);
|
||||||
|
else StringFormatter::send(stream,F("<O>"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case 'f': // FUNCTION <f CAB BYTE1 [BYTE2]>
|
case 'f': // FUNCTION <f CAB BYTE1 [BYTE2]>
|
||||||
|
Loading…
Reference in New Issue
Block a user