diff --git a/DCCEXParser.cpp b/DCCEXParser.cpp index bcc25d7..2e1a1a1 100644 --- a/DCCEXParser.cpp +++ b/DCCEXParser.cpp @@ -501,8 +501,16 @@ void DCCEXParser::parseOne(Print *stream, byte *com, RingStream * ringStream) return; case 'c': // SEND METER RESPONSES - // No longer supported because of multiple tracks + // No longer supported because of multiple tracks See and break; + + case 'G': // Track current gauge limits + TrackManager::reportGauges(stream); // + return; + + case 'I': // Track current + TrackManager::reportCurrent(stream); // + return; case 'Q': // SENSORS Sensor::printAll(stream); diff --git a/TrackManager.cpp b/TrackManager.cpp index cbb672a..f07415b 100644 --- a/TrackManager.cpp +++ b/TrackManager.cpp @@ -423,7 +423,26 @@ POWERMODE TrackManager::getProgPower() { return track[t]->getPower(); return POWERMODE::OFF; } - + +void TrackManager::reportCurrent(Print* stream) { + StringFormatter::send(stream,F("getPower()==POWERMODE::OVERLOAD) ? -1 : + track[t]->raw2mA(track[t]->getCurrentRaw(false))); + } + StringFormatter::send(stream,F(">\n")); +} + +void TrackManager::reportGauges(Print* stream) { + StringFormatter::send(stream,F("raw2mA(track[t]->getRawCurrentTripValue())); + } + StringFormatter::send(stream,F(">\n")); +} + void TrackManager::setJoinRelayPin(byte joinRelayPin) { joinRelay=joinRelayPin; if (joinRelay!=UNUSED_PIN) { diff --git a/TrackManager.h b/TrackManager.h index 90a9345..07f33ca 100644 --- a/TrackManager.h +++ b/TrackManager.h @@ -77,6 +77,8 @@ class TrackManager { static bool isJoined() { return progTrackSyncMain;} static void setJoinRelayPin(byte joinRelayPin); static void sampleCurrent(); + static void reportGauges(Print* stream); + static void reportCurrent(Print* stream); static int16_t joinRelay; static bool progTrackSyncMain; // true when prog track is a siding switched to main static bool progTrackBoosted; // true when prog track is not current limited