mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2024-11-23 08:06:13 +01:00
Make packetPending private and new access routine. Implement schedulePacket without packetPending variable for ESP32
This commit is contained in:
parent
33c9155f6e
commit
b09dba1213
2
DCC.cpp
2
DCC.cpp
|
@ -587,7 +587,7 @@ void DCC::loop() {
|
||||||
|
|
||||||
void DCC::issueReminders() {
|
void DCC::issueReminders() {
|
||||||
// if the main track transmitter still has a pending packet, skip this time around.
|
// if the main track transmitter still has a pending packet, skip this time around.
|
||||||
if ( DCCWaveform::mainTrack.packetPending) return;
|
if ( DCCWaveform::mainTrack.getPacketPending()) return;
|
||||||
|
|
||||||
// This loop searches for a loco in the speed table starting at nextLoco and cycling back around
|
// This loop searches for a loco in the speed table starting at nextLoco and cycling back around
|
||||||
for (int reg=0;reg<MAX_LOCOS;reg++) {
|
for (int reg=0;reg<MAX_LOCOS;reg++) {
|
||||||
|
|
|
@ -191,6 +191,9 @@ void DCCWaveform::schedulePacket(const byte buffer[], byte byteCount, byte repea
|
||||||
packetPending = true;
|
packetPending = true;
|
||||||
sentResetsSincePacket=0;
|
sentResetsSincePacket=0;
|
||||||
}
|
}
|
||||||
|
bool DCCWaveform::getPacketPending() {
|
||||||
|
return packetPending;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ARDUINO_ARCH_ESP32
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
|
@ -203,7 +206,6 @@ RMTChannel *DCCWaveform::rmtProgChannel = NULL;
|
||||||
|
|
||||||
DCCWaveform::DCCWaveform(byte preambleBits, bool isMain) {
|
DCCWaveform::DCCWaveform(byte preambleBits, bool isMain) {
|
||||||
isMainTrack = isMain;
|
isMainTrack = isMain;
|
||||||
packetPending = false;
|
|
||||||
requiredPreambles = preambleBits;
|
requiredPreambles = preambleBits;
|
||||||
}
|
}
|
||||||
void DCCWaveform::begin() {
|
void DCCWaveform::begin() {
|
||||||
|
@ -224,6 +226,34 @@ void DCCWaveform::begin() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DCCWaveform::schedulePacket(const byte buffer[], byte byteCount, byte repeats) {
|
void DCCWaveform::schedulePacket(const byte buffer[], byte byteCount, byte repeats) {
|
||||||
|
if (byteCount > MAX_PACKET_SIZE) return; // allow for chksum
|
||||||
|
|
||||||
|
byte checksum = 0;
|
||||||
|
for (byte b = 0; b < byteCount; b++) {
|
||||||
|
checksum ^= buffer[b];
|
||||||
|
pendingPacket[b] = buffer[b];
|
||||||
|
}
|
||||||
|
// buffer is MAX_PACKET_SIZE but pendingPacket is one bigger
|
||||||
|
pendingPacket[byteCount] = checksum;
|
||||||
|
pendingLength = byteCount + 1;
|
||||||
|
pendingRepeats = repeats;
|
||||||
|
sentResetsSincePacket=0;
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
do {
|
||||||
|
if(isMainTrack)
|
||||||
|
ret = rmtMainChannel->RMTfillData(pendingPacket, pendingLength, pendingRepeats);
|
||||||
|
else
|
||||||
|
ret = rmtProgChannel->RMTfillData(pendingPacket, pendingLength, pendingRepeats);
|
||||||
|
} while(ret > 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DCCWaveform::getPacketPending() {
|
||||||
|
if(isMainTrack)
|
||||||
|
return rmtMainChannel->busy();
|
||||||
|
else
|
||||||
|
return rmtProgChannel->busy();
|
||||||
}
|
}
|
||||||
void DCCWaveform::loop() {
|
void DCCWaveform::loop() {
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,11 +54,13 @@ class DCCWaveform {
|
||||||
static DCCWaveform progTrack;
|
static DCCWaveform progTrack;
|
||||||
inline void clearRepeats() { transmitRepeats=0; }
|
inline void clearRepeats() { transmitRepeats=0; }
|
||||||
void schedulePacket(const byte buffer[], byte byteCount, byte repeats);
|
void schedulePacket(const byte buffer[], byte byteCount, byte repeats);
|
||||||
volatile bool packetPending;
|
|
||||||
volatile byte sentResetsSincePacket;
|
volatile byte sentResetsSincePacket;
|
||||||
|
bool getPacketPending();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
#ifndef ARDUINO_ARCH_ESP32
|
||||||
|
volatile bool packetPending;
|
||||||
|
#endif
|
||||||
static void interruptHandler();
|
static void interruptHandler();
|
||||||
void interrupt2();
|
void interrupt2();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user