mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2024-11-24 16:46:13 +01:00
Compare commits
1 Commits
ab3404a018
...
5f98d7b22f
Author | SHA1 | Date | |
---|---|---|---|
|
5f98d7b22f |
|
@ -272,50 +272,3 @@ void CommandDistributor::broadcastRaw(clientType type, char * msg) {
|
||||||
void CommandDistributor::broadcastTrackState(const FSH* format,byte trackLetter, int16_t dcAddr) {
|
void CommandDistributor::broadcastTrackState(const FSH* format,byte trackLetter, int16_t dcAddr) {
|
||||||
broadcastReply(COMMAND_TYPE, format,trackLetter, dcAddr);
|
broadcastReply(COMMAND_TYPE, format,trackLetter, dcAddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
Print * CommandDistributor::getVirtualLCDSerial(byte screen, byte row) {
|
|
||||||
Print * stream=virtualLCDSerial;
|
|
||||||
#ifdef CD_HANDLE_RING
|
|
||||||
rememberVLCDClient=RingStream::NO_CLIENT;
|
|
||||||
if (!stream && virtualLCDClient!=RingStream::NO_CLIENT) {
|
|
||||||
// If we are broadcasting from a wifi/eth process we need to complete its output
|
|
||||||
// before merging broadcasts in the ring, then reinstate it in case
|
|
||||||
// the process continues to output to its client.
|
|
||||||
if ((rememberVLCDClient = ring->peekTargetMark()) != RingStream::NO_CLIENT) {
|
|
||||||
ring->commit();
|
|
||||||
}
|
|
||||||
ring->mark(virtualLCDClient);
|
|
||||||
stream=ring;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (stream) StringFormatter::send(stream,F("<@ %d %d \""), screen,row);
|
|
||||||
return stream;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CommandDistributor::commitVirtualLCDSerial() {
|
|
||||||
#ifdef CD_HANDLE_RING
|
|
||||||
if (virtualLCDClient!=RingStream::NO_CLIENT) {
|
|
||||||
StringFormatter::send(ring,F("\">\n"));
|
|
||||||
ring->commit();
|
|
||||||
if (rememberVLCDClient!=RingStream::NO_CLIENT) ring->mark(rememberVLCDClient);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
StringFormatter::send(virtualLCDSerial,F("\">\n"));
|
|
||||||
}
|
|
||||||
|
|
||||||
void CommandDistributor::setVirtualLCDSerial(Print * stream) {
|
|
||||||
#ifdef CD_HANDLE_RING
|
|
||||||
virtualLCDClient=RingStream::NO_CLIENT;
|
|
||||||
if (stream && stream->availableForWrite()==RingStream::THIS_IS_A_RINGSTREAM) {
|
|
||||||
virtualLCDClient=((RingStream *) stream)->peekTargetMark();
|
|
||||||
virtualLCDSerial=nullptr;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
virtualLCDSerial=stream;
|
|
||||||
}
|
|
||||||
|
|
||||||
Print* CommandDistributor::virtualLCDSerial=nullptr;
|
|
||||||
byte CommandDistributor::virtualLCDClient=0xFF;
|
|
||||||
byte CommandDistributor::rememberVLCDClient=0;
|
|
|
@ -59,14 +59,6 @@ public :
|
||||||
template<typename... Targs> static void broadcastReply(clientType type, Targs... msg);
|
template<typename... Targs> static void broadcastReply(clientType type, Targs... msg);
|
||||||
static void forget(byte clientId);
|
static void forget(byte clientId);
|
||||||
|
|
||||||
// Handling code for virtual LCD receiver.
|
|
||||||
static Print * getVirtualLCDSerial(byte screen, byte row);
|
|
||||||
static void commitVirtualLCDSerial();
|
|
||||||
static void setVirtualLCDSerial(Print * stream);
|
|
||||||
private:
|
|
||||||
static Print * virtualLCDSerial;
|
|
||||||
static byte virtualLCDClient;
|
|
||||||
static byte rememberVLCDClient;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -913,13 +913,6 @@ void DCCEXParser::parseOne(Print *stream, byte *com, RingStream * ringStream)
|
||||||
case 'L': // LCC interface implemented in EXRAIL parser
|
case 'L': // LCC interface implemented in EXRAIL parser
|
||||||
break; // Will <X> if not intercepted by EXRAIL
|
break; // Will <X> if not intercepted by EXRAIL
|
||||||
|
|
||||||
case '@': // JMRI saying "give me virtual LCD msgs"
|
|
||||||
CommandDistributor::setVirtualLCDSerial(stream);
|
|
||||||
StringFormatter::send(stream,
|
|
||||||
F("<@ 0 0 \"DCC-EX v" VERSION "\">\n"
|
|
||||||
"<@ 0 1 \"Lic GPLv3\">\n"));
|
|
||||||
return;
|
|
||||||
|
|
||||||
default: //anything else will diagnose and drop out to <X>
|
default: //anything else will diagnose and drop out to <X>
|
||||||
DIAG(F("Opcode=%c params=%d"), opcode, params);
|
DIAG(F("Opcode=%c params=%d"), opcode, params);
|
||||||
for (int i = 0; i < params; i++)
|
for (int i = 0; i < params; i++)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user