diff --git a/EXRAIL2.cpp b/EXRAIL2.cpp index 541e2fb..a6afa2d 100644 --- a/EXRAIL2.cpp +++ b/EXRAIL2.cpp @@ -551,7 +551,15 @@ bool RMFT2::skipIfBlock() { /* static */ void RMFT2::readLocoCallback(int16_t cv) { - progtrackLocoId=cv; + if (cv & LONG_ADDR_MARKER) { // maker bit indicates long addr + progtrackLocoId = cv ^ LONG_ADDR_MARKER; // remove marker bit to get real long addr + if (progtrackLocoId <= HIGHEST_SHORT_ADDR ) { // out of range for long addr + DIAG(F("Long addr %d <= %d unsupported\n"), progtrackLocoId, HIGHEST_SHORT_ADDR); + progtrackLocoId = -1; + } + } else { + progtrackLocoId=cv; + } } void RMFT2::loop() {