From 1425da20b500f254f7f16b2a1ba4493f463753ce Mon Sep 17 00:00:00 2001 From: peteGSX Date: Sat, 26 Aug 2023 19:41:17 +1000 Subject: [PATCH] Correct order --- DCCEXParser.cpp | 5 +++-- IO_EXTurntable.cpp | 1 + Turntables.cpp | 12 ++++++------ Turntables.h | 6 +++--- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/DCCEXParser.cpp b/DCCEXParser.cpp index 835dd32..995162b 100644 --- a/DCCEXParser.cpp +++ b/DCCEXParser.cpp @@ -1060,11 +1060,12 @@ bool DCCEXParser::parseI(Print *stream, int16_t params, int16_t p[]) default: // If we're here, it must be creating a turntable object { + DIAG(F("Params: %d"), params); if (params > 5 && params < 41 && p[1] == HASH_KEYWORD_EXTT) { DIAG(F("Create EXTT turntable %d on vpin %d and address %d with %d positions"), p[0], p[2], p[3], params - 4); - if (!EXTTTurntable::create(p[0], (uint8_t)p[1], (VPIN)p[2])) return false; + if (!EXTTTurntable::create(p[0], (VPIN)p[2], (uint8_t)p[3])) return false; Turntable *tto = Turntable::get(p[0]); - for ( uint8_t i = 0; i < params - 4; i++) { + for ( uint8_t i = params - 4; i > 0; i--) { tto->addPosition(p[i + 3]); DIAG(F("Add position %d"), p[i + 3]); } diff --git a/IO_EXTurntable.cpp b/IO_EXTurntable.cpp index f1a108b..b57fa25 100644 --- a/IO_EXTurntable.cpp +++ b/IO_EXTurntable.cpp @@ -100,6 +100,7 @@ int EXTurntable::_read(VPIN vpin) { // Acc_Off = 9 // Turn accessory pin off void EXTurntable::_writeAnalogue(VPIN vpin, int value, uint8_t activity, uint16_t duration) { if (_deviceState == DEVSTATE_FAILED) return; + if (value < 0) return; uint8_t stepsMSB = value >> 8; uint8_t stepsLSB = value & 0xFF; #ifdef DIAG_IO diff --git a/Turntables.cpp b/Turntables.cpp index 1ab5a70..f75b30d 100644 --- a/Turntables.cpp +++ b/Turntables.cpp @@ -126,26 +126,26 @@ bool Turntable::setPosition(uint16_t id, uint8_t position, uint8_t activity) { * *************************************************************************************/ // Private constructor -EXTTTurntable::EXTTTurntable(uint16_t id, uint8_t i2caddress, VPIN vpin) : +EXTTTurntable::EXTTTurntable(uint16_t id, VPIN vpin, uint8_t i2caddress) : Turntable(id, TURNTABLE_EXTT) { - _exttTurntableData.i2caddress = i2caddress; _exttTurntableData.vpin = vpin; + _exttTurntableData.i2caddress = i2caddress; } // Create function - Turntable *EXTTTurntable::create(uint16_t id, uint8_t i2caddress, VPIN vpin) { + Turntable *EXTTTurntable::create(uint16_t id, VPIN vpin, uint8_t i2caddress) { #ifndef IO_NO_HAL Turntable *tto = get(id); if (tto) { if (tto->isType(TURNTABLE_EXTT)) { EXTTTurntable *extt = (EXTTTurntable *)tto; - extt->_exttTurntableData.i2caddress = i2caddress; extt->_exttTurntableData.vpin = vpin; + extt->_exttTurntableData.i2caddress = i2caddress; return tto; } } - tto = (Turntable *)new EXTTTurntable(id, i2caddress, vpin); + tto = (Turntable *)new EXTTTurntable(id, vpin, i2caddress); DIAG(F("Turntable 0x%x"), tto); return tto; #else @@ -157,7 +157,7 @@ EXTTTurntable::EXTTTurntable(uint16_t id, uint8_t i2caddress, VPIN vpin) : } void EXTTTurntable::print(Print *stream) { - StringFormatter::send(stream, F("\n"), _turntableData.id, _exttTurntableData.i2caddress, _exttTurntableData.vpin); + StringFormatter::send(stream, F("\n"), _turntableData.id, _exttTurntableData.vpin, _exttTurntableData.i2caddress); } // EX-Turntable specific code for moving to the specified position diff --git a/Turntables.h b/Turntables.h index 3708d2a..303c542 100644 --- a/Turntables.h +++ b/Turntables.h @@ -183,16 +183,16 @@ class EXTTTurntable : public Turntable { private: // EXTTTurntableData contains device specific data struct EXTTTurntableData { - uint8_t i2caddress; VPIN vpin; + uint8_t i2caddress; } _exttTurntableData; // Constructor - EXTTTurntable(uint16_t id, uint8_t i2caddress, VPIN vpin); + EXTTTurntable(uint16_t id, VPIN vpin, uint8_t i2caddress); public: // Create function - static Turntable *create(uint16_t id, uint8_t i2caddress, VPIN vpin); + static Turntable *create(uint16_t id, VPIN vpin, uint8_t i2caddress); void print(Print *stream) override; protected: