mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2024-11-23 08:06:13 +01:00
Speed broadcast
This commit is contained in:
parent
a4fc10d466
commit
b8293d07f2
|
@ -24,6 +24,7 @@
|
||||||
#include "DIAG.h"
|
#include "DIAG.h"
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "DCCWaveform.h"
|
#include "DCCWaveform.h"
|
||||||
|
#include "DCC.h"
|
||||||
|
|
||||||
const byte NO_CLIENT=255;
|
const byte NO_CLIENT=255;
|
||||||
|
|
||||||
|
@ -93,8 +94,10 @@ void CommandDistributor::broadcastTurnout(int16_t id, bool isClosed ) {
|
||||||
broadcast();
|
broadcast();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommandDistributor::broadcastLoco(int16_t cab, int16_t slot, byte speed, uint32_t functions) {
|
void CommandDistributor::broadcastLoco(byte slot) {
|
||||||
StringFormatter::send(broadcastBufferWriter,F("<l %d %d %d %x>\n"), cab,slot,speed,functions);
|
DCC::LOCO * sp=&DCC::speedTable[slot];
|
||||||
|
StringFormatter::send(broadcastBufferWriter,F("<l %d %d %d %l>\n"),
|
||||||
|
sp->loco,slot,sp->speedCode,sp->functions);
|
||||||
broadcast();
|
broadcast();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ class CommandDistributor {
|
||||||
|
|
||||||
public :
|
public :
|
||||||
static void parse(byte clientId,byte* buffer, RingStream * ring);
|
static void parse(byte clientId,byte* buffer, RingStream * ring);
|
||||||
static void broadcastLoco(int16_t cab, int16_t slot, byte speed, uint32_t functions);
|
static void broadcastLoco(byte slot);
|
||||||
static void broadcastSensor(int16_t id, bool value);
|
static void broadcastSensor(int16_t id, bool value);
|
||||||
static void broadcastTurnout(int16_t id, bool isClosed);
|
static void broadcastTurnout(int16_t id, bool isClosed);
|
||||||
static void broadcastPower();
|
static void broadcastPower();
|
||||||
|
|
10
DCC.cpp
10
DCC.cpp
|
@ -27,6 +27,7 @@
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
#include "FSH.h"
|
#include "FSH.h"
|
||||||
#include "IODevice.h"
|
#include "IODevice.h"
|
||||||
|
#include "CommandDistributor.h"
|
||||||
|
|
||||||
// This module is responsible for converting API calls into
|
// This module is responsible for converting API calls into
|
||||||
// messages to be sent to the waveform generator.
|
// messages to be sent to the waveform generator.
|
||||||
|
@ -185,6 +186,7 @@ void DCC::setFn( int cab, int16_t functionNumber, bool on) {
|
||||||
speedTable[reg].functions &= ~funcmask;
|
speedTable[reg].functions &= ~funcmask;
|
||||||
}
|
}
|
||||||
updateGroupflags(speedTable[reg].groupFlags, functionNumber);
|
updateGroupflags(speedTable[reg].groupFlags, functionNumber);
|
||||||
|
CommandDistributor::broadcastLoco(reg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -218,6 +220,7 @@ int DCC::changeFn( int cab, int16_t functionNumber, bool pressed) {
|
||||||
funcstate = (speedTable[reg].functions & funcmask)? 1 : 0;
|
funcstate = (speedTable[reg].functions & funcmask)? 1 : 0;
|
||||||
}
|
}
|
||||||
updateGroupflags(speedTable[reg].groupFlags, functionNumber);
|
updateGroupflags(speedTable[reg].groupFlags, functionNumber);
|
||||||
|
CommandDistributor::broadcastLoco(reg);
|
||||||
return funcstate;
|
return funcstate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -667,6 +670,7 @@ int DCC::lookupSpeedTable(int locoId) {
|
||||||
speedTable[reg].speedCode=128; // default direction forward
|
speedTable[reg].speedCode=128; // default direction forward
|
||||||
speedTable[reg].groupFlags=0;
|
speedTable[reg].groupFlags=0;
|
||||||
speedTable[reg].functions=0;
|
speedTable[reg].functions=0;
|
||||||
|
CommandDistributor::broadcastLoco(reg);
|
||||||
}
|
}
|
||||||
return reg;
|
return reg;
|
||||||
}
|
}
|
||||||
|
@ -677,13 +681,17 @@ void DCC::updateLocoReminder(int loco, byte speedCode) {
|
||||||
// broadcast stop/estop but dont change direction
|
// broadcast stop/estop but dont change direction
|
||||||
for (int reg = 0; reg < MAX_LOCOS; reg++) {
|
for (int reg = 0; reg < MAX_LOCOS; reg++) {
|
||||||
speedTable[reg].speedCode = (speedTable[reg].speedCode & 0x80) | (speedCode & 0x7f);
|
speedTable[reg].speedCode = (speedTable[reg].speedCode & 0x80) | (speedCode & 0x7f);
|
||||||
|
CommandDistributor::broadcastLoco(reg);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// determine speed reg for this loco
|
// determine speed reg for this loco
|
||||||
int reg=lookupSpeedTable(loco);
|
int reg=lookupSpeedTable(loco);
|
||||||
if (reg>=0) speedTable[reg].speedCode = speedCode;
|
if (reg>=0) {
|
||||||
|
speedTable[reg].speedCode = speedCode;
|
||||||
|
CommandDistributor::broadcastLoco(reg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DCC::LOCO DCC::speedTable[MAX_LOCOS];
|
DCC::LOCO DCC::speedTable[MAX_LOCOS];
|
||||||
|
|
5
DCC.h
5
DCC.h
|
@ -134,7 +134,6 @@ public:
|
||||||
return ackRetryPSum;
|
return ackRetryPSum;
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
|
||||||
struct LOCO
|
struct LOCO
|
||||||
{
|
{
|
||||||
int loco;
|
int loco;
|
||||||
|
@ -142,6 +141,9 @@ private:
|
||||||
byte groupFlags;
|
byte groupFlags;
|
||||||
unsigned long functions;
|
unsigned long functions;
|
||||||
};
|
};
|
||||||
|
static LOCO speedTable[MAX_LOCOS];
|
||||||
|
|
||||||
|
private:
|
||||||
static byte joinRelay;
|
static byte joinRelay;
|
||||||
static byte loopStatus;
|
static byte loopStatus;
|
||||||
static void setThrottle2(uint16_t cab, uint8_t speedCode);
|
static void setThrottle2(uint16_t cab, uint8_t speedCode);
|
||||||
|
@ -152,7 +154,6 @@ private:
|
||||||
static FSH *shieldName;
|
static FSH *shieldName;
|
||||||
static byte globalSpeedsteps;
|
static byte globalSpeedsteps;
|
||||||
|
|
||||||
static LOCO speedTable[MAX_LOCOS];
|
|
||||||
static byte cv1(byte opcode, int cv);
|
static byte cv1(byte opcode, int cv);
|
||||||
static byte cv2(int cv);
|
static byte cv2(int cv);
|
||||||
static int lookupSpeedTable(int locoId);
|
static int lookupSpeedTable(int locoId);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user