mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2025-05-17 15:54:56 +02:00
JL LCD track status
This commit is contained in:
parent
83a5c52a0d
commit
5749a0d551
@ -2,7 +2,7 @@
|
|||||||
* © 2022 Paul M Antoine
|
* © 2022 Paul M Antoine
|
||||||
* © 2021 Neil McKechnie
|
* © 2021 Neil McKechnie
|
||||||
* © 2021 Mike S
|
* © 2021 Mike S
|
||||||
* © 2021-2024 Herb Morton
|
* © 2021-2025 Herb Morton
|
||||||
* © 2020-2023 Harald Barth
|
* © 2020-2023 Harald Barth
|
||||||
* © 2020-2021 M Steve Todd
|
* © 2020-2021 M Steve Todd
|
||||||
* © 2020-2021 Fred Decker
|
* © 2020-2021 Fred Decker
|
||||||
@ -789,6 +789,11 @@ void DCCEXParser::parseOne(Print *stream, byte *com, RingStream * ringStream)
|
|||||||
TrackManager::reportCurrent(stream); // <g limit...limit>
|
TrackManager::reportCurrent(stream); // <g limit...limit>
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
case "L"_hk: // <JL display row> track state and mA value on display
|
||||||
|
if (params<3) break;
|
||||||
|
TrackManager::reportCurrentLCD(p[1], p[2]); // Track power status
|
||||||
|
return;
|
||||||
|
|
||||||
case "A"_hk: // <JA> intercepted by EXRAIL// <JA> returns automations/routes
|
case "A"_hk: // <JA> intercepted by EXRAIL// <JA> returns automations/routes
|
||||||
if (params!=1) break; // <JA>
|
if (params!=1) break; // <JA>
|
||||||
StringFormatter::send(stream, F("<jA>\n"));
|
StringFormatter::send(stream, F("<jA>\n"));
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
* © 2022-2025 Chris Harlow
|
* © 2022-2025 Chris Harlow
|
||||||
* © 2022-2024 Harald Barth
|
* © 2022-2024 Harald Barth
|
||||||
* © 2023-2024 Paul M. Antoine
|
* © 2023-2024 Paul M. Antoine
|
||||||
* © 2024 Herb Morton
|
* © 2024-2025 Herb Morton
|
||||||
* © 2023 Colin Murdoch
|
* © 2023 Colin Murdoch
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
@ -42,6 +42,7 @@
|
|||||||
|
|
||||||
MotorDriver * TrackManager::track[MAX_TRACKS] = { NULL };
|
MotorDriver * TrackManager::track[MAX_TRACKS] = { NULL };
|
||||||
int16_t TrackManager::trackDCAddr[MAX_TRACKS] = { 0 };
|
int16_t TrackManager::trackDCAddr[MAX_TRACKS] = { 0 };
|
||||||
|
int16_t TrackManager::trackPwrMA[MAX_TRACKS] = { 0 };
|
||||||
|
|
||||||
int8_t TrackManager::lastTrack=-1;
|
int8_t TrackManager::lastTrack=-1;
|
||||||
bool TrackManager::progTrackSyncMain=false;
|
bool TrackManager::progTrackSyncMain=false;
|
||||||
@ -451,7 +452,7 @@ const FSH* TrackManager::getModeName(TRACK_MODE tm) {
|
|||||||
if(tm & TRACK_MODIFIER_AUTO)
|
if(tm & TRACK_MODIFIER_AUTO)
|
||||||
modename=F("MAIN A");
|
modename=F("MAIN A");
|
||||||
else if (tm & TRACK_MODIFIER_INV)
|
else if (tm & TRACK_MODIFIER_INV)
|
||||||
modename=F("MAIN I>\n");
|
modename=F("MAIN I");
|
||||||
else
|
else
|
||||||
modename=F("MAIN");
|
modename=F("MAIN");
|
||||||
}
|
}
|
||||||
@ -646,6 +647,37 @@ void TrackManager::reportCurrent(Print* stream) {
|
|||||||
StringFormatter::send(stream,F(">\n"));
|
StringFormatter::send(stream,F(">\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TrackManager::reportCurrentLCD(uint8_t display, byte row) {
|
||||||
|
int16_t trackPwrTotalMA = 0;
|
||||||
|
FOR_EACH_TRACK(t) {
|
||||||
|
bool pstate = TrackManager::isPowerOn(t); // checks if power is on or off
|
||||||
|
TRACK_MODE tMode=(TrackManager::getMode(t)); // gets to current power mode
|
||||||
|
int16_t DCAddr=(TrackManager::returnDCAddr(t));
|
||||||
|
|
||||||
|
if (pstate) { // if power is on do this section
|
||||||
|
trackPwrMA[t]=(3*trackPwrMA[t]>>2) + ((track[t]->getPower()==POWERMODE::OVERLOAD) ? -1 :
|
||||||
|
track[t]->raw2mA(track[t]->getCurrentRaw(false)));
|
||||||
|
trackPwrTotalMA += trackPwrMA[t];
|
||||||
|
if (tMode & TRACK_MODE_DC) { // Test if track is in DC or DCX mode
|
||||||
|
SCREEN(display, row+t, F("%c: %S %d %dmA"), t+'A', (TrackManager::getModeName(tMode)),DCAddr, trackPwrMA[t]>>2);
|
||||||
|
}
|
||||||
|
else { // formats without DCAddress
|
||||||
|
SCREEN(display, row+t, F("%c: %S %dmA"), t+'A', (TrackManager::getModeName(tMode)), trackPwrMA[t]>>2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else { // if power is off do this section
|
||||||
|
trackPwrMA[t] = 0;
|
||||||
|
if (tMode & TRACK_MODE_DC) { // DC / DCX
|
||||||
|
SCREEN(display, row+t, F("%c: %S %d"), t+'A', (TrackManager::getModeName(tMode)),DCAddr);
|
||||||
|
}
|
||||||
|
else { // Not DC or DCX
|
||||||
|
SCREEN(display, row+t, F("%c: %S"), t+'A', (TrackManager::getModeName(tMode)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SCREEN(display, row+lastTrack+1, F("%d Districts %dmA"), lastTrack+1, trackPwrTotalMA>>2);
|
||||||
|
}
|
||||||
|
|
||||||
void TrackManager::reportGauges(Print* stream) {
|
void TrackManager::reportGauges(Print* stream) {
|
||||||
StringFormatter::send(stream,F("<jG"));
|
StringFormatter::send(stream,F("<jG"));
|
||||||
FOR_EACH_TRACK(t) {
|
FOR_EACH_TRACK(t) {
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
* © 2022 Chris Harlow
|
* © 2022 Chris Harlow
|
||||||
* © 2022-2024 Harald Barth
|
* © 2022-2024 Harald Barth
|
||||||
* © 2023 Colin Murdoch
|
* © 2023 Colin Murdoch
|
||||||
|
* © 2025 Herb Morton
|
||||||
*
|
*
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
@ -87,6 +88,7 @@ class TrackManager {
|
|||||||
static void sampleCurrent();
|
static void sampleCurrent();
|
||||||
static void reportGauges(Print* stream);
|
static void reportGauges(Print* stream);
|
||||||
static void reportCurrent(Print* stream);
|
static void reportCurrent(Print* stream);
|
||||||
|
static void reportCurrentLCD(uint8_t display, byte row);
|
||||||
static void reportObsoleteCurrent(Print* stream);
|
static void reportObsoleteCurrent(Print* stream);
|
||||||
static void streamTrackState(Print* stream, byte t);
|
static void streamTrackState(Print* stream, byte t);
|
||||||
static bool isPowerOn(byte t);
|
static bool isPowerOn(byte t);
|
||||||
@ -113,6 +115,7 @@ class TrackManager {
|
|||||||
static void applyDCSpeed(byte t);
|
static void applyDCSpeed(byte t);
|
||||||
|
|
||||||
static int16_t trackDCAddr[MAX_TRACKS]; // dc address if TRACK_MODE_DC
|
static int16_t trackDCAddr[MAX_TRACKS]; // dc address if TRACK_MODE_DC
|
||||||
|
static int16_t trackPwrMA[MAX_TRACKS]; // for <JL ..> command
|
||||||
#ifdef ARDUINO_ARCH_ESP32
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
static byte tempProgTrack; // holds the prog track number during join
|
static byte tempProgTrack; // holds the prog track number during join
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user