1
0
mirror of https://github.com/DCC-EX/CommandStation-EX.git synced 2024-11-24 00:26:13 +01:00

Compare commits

..

No commits in common. "fcbd5f96ab975486a326f972954a8708630838bd" and "8bd6403cd1f7a251e3ca6fb866d46a152fce91e2" have entirely different histories.

3 changed files with 53 additions and 51 deletions

View File

@ -119,10 +119,8 @@ void DCCWaveform::interruptHandler() {
// WAVE_START is at start of bit where we need to find
// out if this is an railcom start or stop time
if (useRailcom) {
if (mainTrack.state==WAVE_MID_1) mainTrack.railcom2(true);
if (mainTrack.state==WAVE_START) mainTrack.railcom2(false);
if (progTrack.state==WAVE_MID_1) progTrack.railcom2(true);
if (progTrack.state==WAVE_START) progTrack.railcom2(false);
if ((mainTrack.state==WAVE_START) || (mainTrack.state== WAVE_MID_1)) mainTrack.railcom2();
if ((progTrack.state==WAVE_START) || (progTrack.state== WAVE_MID_1)) progTrack.railcom2();
}
// Move on in the state engine
@ -130,8 +128,8 @@ void DCCWaveform::interruptHandler() {
progTrack.state=stateTransform[progTrack.state];
// WAVE_PENDING means we dont yet know what the next bit is
if (mainTrack.state==WAVE_PENDING) mainTrack.interrupt2();
if (progTrack.state==WAVE_PENDING) {
if ((mainTrack.state==WAVE_PENDING) || (mainTrack.state== WAVE_START)) mainTrack.interrupt2();
if ((progTrack.state==WAVE_PENDING) || (progTrack.state == WAVE_START)) {
progTrack.interrupt2();
} else {
DCCACK::checkAck(progTrack.getResets());
@ -154,7 +152,7 @@ DCCWaveform::DCCWaveform( byte preambleBits, bool isMain) {
// The +1 below is to allow the preamble generator to create the stop bit
// for the previous packet.
requiredPreambles = preambleBits+1;
//requiredPreambles <<=1; // double the number of preamble wave halves
requiredPreambles <<=1; // double the number of preamble wave halves
remainingPreambles=0;
bytes_sent = 0;
@ -163,11 +161,11 @@ DCCWaveform::DCCWaveform( byte preambleBits, bool isMain) {
#pragma GCC push_options
#pragma GCC optimize ("-O3")
void DCCWaveform::railcom2(bool starting) {
void DCCWaveform::railcom2() {
bool cutout;
if (starting && remainingPreambles==(requiredPreambles-2)) {
if (remainingPreambles==(requiredPreambles-4)) {
cutout=true;
} else if (!starting && remainingPreambles==(requiredPreambles-5)) {
} else if (remainingPreambles==(requiredPreambles-11)) {
cutout=false;
} else {
return; // neither start or end of cutout, do nothing
@ -196,7 +194,9 @@ void DCCWaveform::interrupt2() {
// or WAVE_HIGH_0 for a 0 bit.
if (remainingPreambles > 0 ) {
if (state==WAVE_PENDING) {
state=WAVE_MID_1; // switch state to trigger LOW on next interrupt
}
remainingPreambles--;
// Update free memory diagnostic as we don't have anything else to do this time.
@ -205,6 +205,7 @@ void DCCWaveform::interrupt2() {
return;
}
if (state==WAVE_PENDING) {
// Wave has gone HIGH but what happens next depends on the bit to be transmitted
// beware OF 9-BIT MASK generating a zero to start each byte
state=(transmitPacket[bytes_sent] & bitMask[bits_sent])? WAVE_MID_1 : WAVE_HIGH_0;
@ -246,6 +247,7 @@ void DCCWaveform::interrupt2() {
}
}
}
}
#pragma GCC pop_options
// Wait until there is no packet pending, then make this pending

View File

@ -92,7 +92,7 @@ class DCCWaveform {
#endif
static void interruptHandler();
void interrupt2();
void railcom2(bool starting);
void railcom2();
bool isMainTrack;
// Transmission controller

View File

@ -1 +1 @@
#define GITHUB_SHA "railcomtests-202401142146Z"
#define GITHUB_SHA "3bddf4d"