@@ -413,23 +413,56 @@ void Mount::configureFocusStepper(byte pin1, byte pin2, int maxSpeed, int maxAcc
413413#if RA_DRIVER_TYPE == DRIVER_TYPE_TMC2209_UART || DEC_DRIVER_TYPE == DRIVER_TYPE_TMC2209_UART \
414414 || AZ_DRIVER_TYPE == DRIVER_TYPE_TMC2209_UART || ALT_DRIVER_TYPE == DRIVER_TYPE_TMC2209_UART \
415415 || FOCUS_DRIVER_TYPE == DRIVER_TYPE_TMC2209_UART
416- #if UART_CONNECTION_TEST_TXRX == 1
417- bool Mount::connectToDriver (TMC2209Stepper *driver, const char *driverKind )
416+ #if ( UART_CONNECTION_TEST_TXRX == 1) || (TEST_VERIFY_MODE == 1)
417+ bool Mount::connectToDriver (const String &driverKind, uint16_t *rmsCurrent )
418418{
419- LOG (DEBUG_STEPPERS, " [STEPPERS]: Testing UART Connection to %s driver..." , driverKind);
420- for (int i = 0 ; i < UART_CONNECTION_TEST_RETRIES; i++)
419+ MappedDict<String, TMC2209Stepper *>::DictEntry_t lookupTable[] = {
420+ #if RA_DRIVER_TYPE == DRIVER_TYPE_TMC2209_UART
421+ {" RA" , _driverRA},
422+ #endif
423+ #if DEC_DRIVER_TYPE == DRIVER_TYPE_TMC2209_UART
424+ {" DEC" , _driverDEC},
425+ #endif
426+ #if ALT_DRIVER_TYPE == DRIVER_TYPE_TMC2209_UART
427+ {" ALT" , _driverALT},
428+ #endif
429+ #if AZ_DRIVER_TYPE == DRIVER_TYPE_TMC2209_UART
430+ {" AZ" , _driverAZ},
431+ #endif
432+ #if FOCUS_DRIVER_TYPE == DRIVER_TYPE_TMC2209_UART
433+ {" FOC" , _driverFocus},
434+ #endif
435+ };
436+ auto driverLookup = MappedDict<String, TMC2209Stepper *>(lookupTable, ARRAY_SIZE (lookupTable));
437+
438+ TMC2209Stepper *driver = nullptr ;
439+ driverLookup.tryGet (driverKind, &driver);
440+
441+ if (driver != nullptr )
421442 {
422- if (driver->test_connection () == 0 )
443+ LOG (DEBUG_STEPPERS, " [STEPPERS]: Testing UART Connection to %s driver..." , driverKind.c_str ());
444+ for (int i = 0 ; i < UART_CONNECTION_TEST_RETRIES; i++)
423445 {
424- LOG (DEBUG_STEPPERS, " [STEPPERS]: UART connection to %s driver successful." , driverKind);
425- return true ;
426- }
427- else
428- {
429- delay (500 );
446+ if (driver->test_connection () == 0 )
447+ {
448+ LOG (DEBUG_STEPPERS, " [STEPPERS]: UART connection to %s driver successful." , driverKind.c_str ());
449+ if (rmsCurrent != nullptr )
450+ {
451+ *rmsCurrent = driver->rms_current ();
452+ }
453+ return true ;
454+ }
455+ else
456+ {
457+ delay (500 );
458+ }
430459 }
460+ LOG (DEBUG_STEPPERS, " [STEPPERS]: UART connection to %s driver failed." , driverKind.c_str ());
461+ }
462+ if (rmsCurrent != nullptr )
463+ {
464+ *rmsCurrent = 0 ;
431465 }
432- LOG (DEBUG_STEPPERS, " [STEPPERS]: UART connection to %s driver failed." , driverKind);
433466 return false ;
434467}
435468 #endif
@@ -448,7 +481,7 @@ void Mount::configureRAdriver(Stream *serial, float rsense, byte driveraddress,
448481 _driverRA->begin ();
449482 bool UART_Rx_connected = false ;
450483 #if UART_CONNECTION_TEST_TXRX == 1
451- UART_Rx_connected = connectToDriver (_driverRA, " RA" );
484+ UART_Rx_connected = connectToDriver (" RA" );
452485 if (!UART_Rx_connected)
453486 {
454487 digitalWrite (RA_EN_PIN,
@@ -487,7 +520,7 @@ void Mount::configureRAdriver(uint16_t RA_SW_RX, uint16_t RA_SW_TX, float rsense
487520 _driverRA->pdn_disable (true );
488521 bool UART_Rx_connected = false ;
489522 #if UART_CONNECTION_TEST_TXRX == 1
490- UART_Rx_connected = connectToDriver (_driverRA, " RA" );
523+ UART_Rx_connected = connectToDriver (" RA" );
491524 if (!UART_Rx_connected)
492525 {
493526 digitalWrite (RA_EN_PIN,
@@ -531,7 +564,7 @@ void Mount::configureDECdriver(Stream *serial, float rsense, byte driveraddress,
531564 _driverDEC->begin ();
532565 bool UART_Rx_connected = false ;
533566 #if UART_CONNECTION_TEST_TXRX == 1
534- UART_Rx_connected = connectToDriver (_driverDEC, " DEC" );
567+ UART_Rx_connected = connectToDriver (" DEC" );
535568 if (!UART_Rx_connected)
536569 {
537570 digitalWrite (DEC_EN_PIN,
@@ -570,7 +603,7 @@ void Mount::configureDECdriver(uint16_t DEC_SW_RX, uint16_t DEC_SW_TX, float rse
570603 _driverDEC->pdn_disable (true );
571604 bool UART_Rx_connected = false ;
572605 #if UART_CONNECTION_TEST_TXRX == 1
573- UART_Rx_connected = connectToDriver (_driverDEC, " DEC" );
606+ UART_Rx_connected = connectToDriver (" DEC" );
574607 if (!UART_Rx_connected)
575608 {
576609 digitalWrite (DEC_EN_PIN,
@@ -614,7 +647,7 @@ void Mount::configureAZdriver(Stream *serial, float rsense, byte driveraddress,
614647 _driverAZ->begin ();
615648 bool UART_Rx_connected = false ;
616649 #if UART_CONNECTION_TEST_TXRX == 1
617- UART_Rx_connected = connectToDriver (_driverAZ, " AZ" );
650+ UART_Rx_connected = connectToDriver (" AZ" );
618651 if (!UART_Rx_connected)
619652 {
620653 digitalWrite (AZ_EN_PIN,
@@ -652,7 +685,7 @@ void Mount::configureAZdriver(uint16_t AZ_SW_RX, uint16_t AZ_SW_TX, float rsense
652685 _driverAZ->pdn_disable (true );
653686 bool UART_Rx_connected = false ;
654687 #if UART_CONNECTION_TEST_TXRX == 1
655- UART_Rx_connected = connectToDriver (_driverAZ, " AZ" );
688+ UART_Rx_connected = connectToDriver (" AZ" );
656689 if (!UART_Rx_connected)
657690 {
658691 digitalWrite (AZ_EN_PIN,
@@ -695,7 +728,7 @@ void Mount::configureALTdriver(Stream *serial, float rsense, byte driveraddress,
695728 _driverALT->begin ();
696729 bool UART_Rx_connected = false ;
697730 #if UART_CONNECTION_TEST_TXRX == 1
698- UART_Rx_connected = connectToDriver (_driverALT, " ALT" );
731+ UART_Rx_connected = connectToDriver (" ALT" );
699732 if (!UART_Rx_connected)
700733 {
701734 digitalWrite (ALT_EN_PIN,
@@ -733,7 +766,7 @@ void Mount::configureALTdriver(uint16_t ALT_SW_RX, uint16_t ALT_SW_TX, float rse
733766 _driverALT->pdn_disable (true );
734767 #if UART_CONNECTION_TEST_TXRX == 1
735768 bool UART_Rx_connected = false ;
736- UART_Rx_connected = connectToDriver (_driverALT, " ALT" );
769+ UART_Rx_connected = connectToDriver (" ALT" );
737770 if (!UART_Rx_connected)
738771 {
739772 digitalWrite (ALT_EN_PIN,
@@ -778,10 +811,10 @@ void Mount::configureFocusDriver(Stream *serial, float rsense, byte driveraddres
778811 _driverFocus->begin ();
779812 #if UART_CONNECTION_TEST_TXRX == 1
780813 bool UART_Rx_connected = false ;
781- UART_Rx_connected = connectToDriver (_driverFocus, " Focus " );
814+ UART_Rx_connected = connectToDriver (" FOC " );
782815 if (!UART_Rx_connected)
783816 {
784- digitalWrite (ALT_EN_PIN ,
817+ digitalWrite (FOCUS_EN_PIN ,
785818 HIGH); // Disable motor for safety reasons if UART connection fails to avoid operating at incorrect rms_current
786819 }
787820 #endif
@@ -824,7 +857,7 @@ void Mount::configureFocusDriver(
824857 _driverFocus->pdn_disable (true );
825858 #if UART_CONNECTION_TEST_TXRX == 1
826859 bool UART_Rx_connected = false ;
827- UART_Rx_connected = connectToDriver (_driverFocus, " Focus " );
860+ UART_Rx_connected = connectToDriver (" FOC " );
828861 if (!UART_Rx_connected)
829862 {
830863 digitalWrite (FOCUS_EN_PIN,
0 commit comments