1
0
mirror of https://github.com/DCC-EX/CommandStation-EX.git synced 2025-06-15 12:05:23 +02:00

Compare commits

...

2 Commits

Author SHA1 Message Date
Ash-4
378452479b JL track status command 2025-05-31 10:17:20 -05:00
Ash-4
94b0a7e364 Provide ability to set WiFi false on ESP32 2025-05-31 10:08:50 -05:00
5 changed files with 51 additions and 5 deletions

View File

@ -31,6 +31,7 @@
* © 2020-2021 Chris Harlow, Harald Barth, David Cutting,
* Fred Decker, Gregor Baues, Anthony W - Dayton
* © 2023 Nathan Kellenicki
* © 2025 Herb Morton
* All rights reserved.
*
* This file is part of CommandStation-EX
@ -109,9 +110,10 @@ void setup()
WifiInterface::setup(WIFI_SERIAL_LINK_SPEED, F(WIFI_SSID), F(WIFI_PASSWORD), F(WIFI_HOSTNAME), IP_PORT, WIFI_CHANNEL, WIFI_FORCE_AP);
#endif // WIFI_ON
#else
// ESP32 needs wifi on always
#if WIFI_ON
PASSWDCHECK(WIFI_PASSWORD); // compile time check
WifiESP::setup(WIFI_SSID, WIFI_PASSWORD, WIFI_HOSTNAME, IP_PORT, WIFI_CHANNEL, WIFI_FORCE_AP);
#endif // WIFI_ON
#endif // ARDUINO_ARCH_ESP32
#if ETHERNET_ON
@ -176,9 +178,11 @@ void loop()
#endif //WIFI_ON
#else //ARDUINO_ARCH_ESP32
#if WIFI_ON
#ifndef WIFI_TASK_ON_CORE0
WifiESP::loop();
#endif
#endif //WIFI_ON
#endif //ARDUINO_ARCH_ESP32
#if ETHERNET_ON
EthernetInterface::loop();

View File

@ -2,7 +2,7 @@
* © 2022 Paul M Antoine
* © 2021 Neil McKechnie
* © 2021 Mike S
* © 2021-2024 Herb Morton
* © 2021-2025 Herb Morton
* © 2020-2023 Harald Barth
* © 2020-2021 M Steve Todd
* © 2020-2021 Fred Decker
@ -796,6 +796,11 @@ void DCCEXParser::parseOne(Print *stream, byte *com, RingStream * ringStream)
TrackManager::reportCurrent(stream); // <g limit...limit>
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
if (params!=1) break; // <JA>
StringFormatter::send(stream, F("<jA>\n"));

View File

@ -2,7 +2,7 @@
* © 2022-2025 Chris Harlow
* © 2022-2024 Harald Barth
* © 2023-2024 Paul M. Antoine
* © 2024 Herb Morton
* © 2024-2025 Herb Morton
* © 2023 Colin Murdoch
* All rights reserved.
*
@ -42,6 +42,7 @@
MotorDriver * TrackManager::track[MAX_TRACKS] = { NULL };
int16_t TrackManager::trackDCAddr[MAX_TRACKS] = { 0 };
int16_t TrackManager::trackPwrMA[MAX_TRACKS] = { 0 };
int8_t TrackManager::lastTrack=-1;
bool TrackManager::progTrackSyncMain=false;
@ -451,7 +452,7 @@ const FSH* TrackManager::getModeName(TRACK_MODE tm) {
if(tm & TRACK_MODIFIER_AUTO)
modename=F("MAIN A");
else if (tm & TRACK_MODIFIER_INV)
modename=F("MAIN I>\n");
modename=F("MAIN I");
else
modename=F("MAIN");
}
@ -646,6 +647,37 @@ void TrackManager::reportCurrent(Print* stream) {
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) {
StringFormatter::send(stream,F("<jG"));
FOR_EACH_TRACK(t) {

View File

@ -2,6 +2,7 @@
* © 2022 Chris Harlow
* © 2022-2024 Harald Barth
* © 2023 Colin Murdoch
* © 2025 Herb Morton
*
* All rights reserved.
*
@ -87,6 +88,7 @@ class TrackManager {
static void sampleCurrent();
static void reportGauges(Print* stream);
static void reportCurrent(Print* stream);
static void reportCurrentLCD(uint8_t display, byte row);
static void reportObsoleteCurrent(Print* stream);
static void streamTrackState(Print* stream, byte t);
static bool isPowerOn(byte t);
@ -113,6 +115,7 @@ class TrackManager {
static void applyDCSpeed(byte t);
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
static byte tempProgTrack; // holds the prog track number during join
#endif

View File

@ -4,6 +4,8 @@
#include "StringFormatter.h"
#define VERSION "5.5.30"
// 5.5.31 - <JL screen startRow> track status command
// - Provide for WiFi false on ESP32
// 5.5.30 - EXRAIL </> shows why tasks are waiting
// 5.5.29 - Resolved compiler warnings
// 5.5.28 - DCC Queue memory leak fix