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

Compare commits

...

3 Commits

Author SHA1 Message Date
Reinder Feenstra
635d5912ae
Merge 8740af814d9d7e03e234ec6036c1725edc21e96b into 4125e73318a7b06a3723c443bc9c56da890b9fcd 2025-03-29 13:45:49 +00:00
Reinder Feenstra
8740af814d fix: all values except the opcode are case insensetive and threated as uppercase.
Extended accessory now uses an E instead of an A.
2025-03-29 08:45:40 +01:00
Reinder Feenstra
31f89ad4c4 Added broadcast for (extended) accessory commands.
see: https://github.com/DCC-EX/CommandStation-EX/issues/444
2025-03-28 22:47:13 +01:00
4 changed files with 14 additions and 1 deletions

View File

@ -152,6 +152,14 @@ void CommandDistributor::broadcastSensor(int16_t id, bool on ) {
broadcastReply(COMMAND_TYPE, F("<%c %d>\n"), on?'Q':'q', id);
}
void CommandDistributor::broadcastAccessory(int16_t address, byte port, bool gate, bool on) {
broadcastReply(COMMAND_TYPE, F("<y A %d %d %c %c>\n"), address, port, gate?'1':'0', on?'1':'0');
}
void CommandDistributor::broadcastExtendedAccessory(int16_t address, int16_t value) {
broadcastReply(COMMAND_TYPE, F("<y E %d %d>\n"), address, value);
}
void CommandDistributor::broadcastTurnout(int16_t id, bool isClosed ) {
// For DCC++ classic compatibility, state reported to JMRI is 1 for thrown and 0 for closed;
// The string below contains serial and Withrottle protocols which should

View File

@ -49,6 +49,8 @@ public :
static void broadcastLoco(byte slot);
static void broadcastForgetLoco(int16_t loco);
static void broadcastSensor(int16_t id, bool value);
static void broadcastAccessory(int16_t address, byte port, bool gate, bool on);
static void broadcastExtendedAccessory(int16_t address, int16_t value);
static void broadcastTurnout(int16_t id, bool isClosed);
static void broadcastTurntable(int16_t id, uint8_t position, bool moving);
static void broadcastClockTime(int16_t time, int8_t rate);

View File

@ -307,10 +307,12 @@ void DCC::setAccessory(int address, byte port, bool gate, byte onoff /*= 2*/) {
#if defined(EXRAIL_ACTIVE)
RMFT2::activateEvent(address<<2|port,gate);
#endif
CommandDistributor::broadcastAccessory(address, port, gate, true);
}
if (onoff != 1) {
b[1] &= ~0x08; // set C to 0
DCCWaveform::mainTrack.schedulePacket(b, 2, 3); // Repeat off packet three times
CommandDistributor::broadcastAccessory(address, port, gate, false);
}
}
@ -362,6 +364,7 @@ whole range of the 11 bits sent to track.
| ((address & 0x03)<<1); // mask 2 bits, shift up 1
b[2]=value;
DCCWaveform::mainTrack.schedulePacket(b, sizeof(b), repeats);
CommandDistributor::broadcastExtendedAccessory(address, value);
return true;
}

View File

@ -92,7 +92,7 @@ Once a new OPCODE is decided upon, update this list.
W, Write CV
x,
X, Invalid command response
y,
y, Accessory/extended accessory broadcast
Y, Output broadcast
z, Direct output
Z, Output configuration/control