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

protect from NULL pointer deref in ESP32 code when no MAIN rmt cannel is present

This commit is contained in:
Harald Barth 2022-08-13 17:36:53 +02:00
parent 059fd1b193
commit 905b2c0148

View File

@ -250,19 +250,27 @@ void DCCWaveform::schedulePacket(const byte buffer[], byte byteCount, byte repea
{ {
int ret; int ret;
do { do {
if(isMainTrack) if(isMainTrack) {
ret = rmtMainChannel->RMTfillData(pendingPacket, pendingLength, pendingRepeats); if (rmtMainChannel != NULL)
else ret = rmtMainChannel->RMTfillData(pendingPacket, pendingLength, pendingRepeats);
ret = rmtProgChannel->RMTfillData(pendingPacket, pendingLength, pendingRepeats); } else {
if (rmtProgChannel != NULL)
ret = rmtProgChannel->RMTfillData(pendingPacket, pendingLength, pendingRepeats);
}
} while(ret > 0); } while(ret > 0);
} }
} }
bool DCCWaveform::getPacketPending() { bool DCCWaveform::getPacketPending() {
if(isMainTrack) if(isMainTrack) {
if (rmtMainChannel == NULL)
return true;
return rmtMainChannel->busy(); return rmtMainChannel->busy();
else } else {
if (rmtProgChannel == NULL)
return true;
return rmtProgChannel->busy(); return rmtProgChannel->busy();
}
} }
void IRAM_ATTR DCCWaveform::loop() { void IRAM_ATTR DCCWaveform::loop() {
DCCACK::checkAck(progTrack.getResets()); DCCACK::checkAck(progTrack.getResets());