diff options
author | Manuel Coenen <manuel@duet3d.com> | 2020-12-07 14:18:19 +0300 |
---|---|---|
committer | Manuel Coenen <manuel@duet3d.com> | 2020-12-07 14:18:19 +0300 |
commit | 9f87bd8b97dd7f408b1283276c3ba02e677e2da5 (patch) | |
tree | 692a3eb0a3bcb3ab168b6c2b6a176f9c788890d6 /src/Comms | |
parent | 662d3f85f4fb45c07de52e0f8c8201fbcbefa211 (diff) |
Fix PanelDue not resetting at the end of flashing
Improve PanelDue resetting at the start of flashing (still not solved)
Reduce flash memory usage by encapsulating debug statements in #if
Fix FirmwareUpdate prerequisites failing to detect problems on Duet2+SBC
and Duet 3 Mini 5+
Diffstat (limited to 'src/Comms')
-rw-r--r-- | src/Comms/PanelDueUpdater.cpp | 38 | ||||
-rw-r--r-- | src/Comms/PanelDueUpdater.h | 9 |
2 files changed, 17 insertions, 30 deletions
diff --git a/src/Comms/PanelDueUpdater.cpp b/src/Comms/PanelDueUpdater.cpp index 9ef721ff..c4b74c8f 100644 --- a/src/Comms/PanelDueUpdater.cpp +++ b/src/Comms/PanelDueUpdater.cpp @@ -12,10 +12,6 @@ #include <Platform.h> #include <RepRap.h> -#if !ALLOW_OTHER_AUX - constexpr uint32_t serialChannel = 1; -#endif - class AuxSerialPort : public SerialPort { public: @@ -102,10 +98,8 @@ void DebugObserver::onProgress(int num, int div) noexcept PanelDueUpdater::PanelDueUpdater() noexcept : -#if ALLOW_OTHER_AUX - serialChannel(NumSerialChannels+1) , -#endif - currentBaudRate(0) + serialChannel(NumSerialChannels+1) + , currentBaudRate(0) , samba(nullptr) , serialPort(nullptr) , device(nullptr) @@ -132,9 +126,7 @@ void PanelDueUpdater::Start(const uint32_t serialChan) noexcept { return; } -#if ALLOW_OTHER_AUX serialChannel = serialChan; -#endif state = FlashState::eraseAndReset; } @@ -145,12 +137,16 @@ void PanelDueUpdater::Spin() noexcept switch (state.RawValue()) { case FlashState::eraseAndReset: - reprap.GetPlatform().Message(GenericMessage, "Sending Erase-and-Reset command to PanelDue\n"); + { + reprap.GetPlatform().Message(GenericMessage, "Sending Erase-and-Reset command to PanelDue\n"); - // Since writing messages via AppendAuxReply is disabled while flashing we need to send it directly - GetAuxPort()->write(panelDueCommandEraseAndReset); - state = FlashState::waitAfterEraseAndReset; - erasedAndResetAt = millis(); + // Since writing messages via AppendAuxReply is disabled while flashing we need to send it directly + auto auxPort = GetAuxPort(); + auxPort->write(panelDueCommandEraseAndReset); + auxPort->flush(); + state = FlashState::waitAfterEraseAndReset; + erasedAndResetAt = millis(); + } break; case FlashState::waitAfterEraseAndReset: @@ -179,7 +175,6 @@ void PanelDueUpdater::Spin() noexcept } samba = new Samba(); - samba->setDebug(DEBUG_BOSSA); serialPort = new AuxSerialPort(*auxPort); samba->connect(serialPort); @@ -248,6 +243,7 @@ void PanelDueUpdater::Spin() noexcept case FlashState::bossaReset: reprap.GetPlatform().Message(GenericMessage, "Restarting PanelDue\n"); device->reset(); + GetAuxPort()->flush(); state = FlashState::done; break; @@ -265,9 +261,7 @@ void PanelDueUpdater::Spin() noexcept auto auxPort = GetAuxPort(); auxPort->SetInterruptCallback(currentInterruptCallbackFn); currentInterruptCallbackFn = nullptr; -#if ALLOW_OTHER_AUX serialChannel = NumSerialChannels+1; -#endif currentBaudRate = 0; // Delete all objects we new'd @@ -305,7 +299,7 @@ void PanelDueUpdater::Spin() noexcept #endif if (state == FlashState::setup) { - reprap.GetPlatform().Message(ErrorMessage, "Failed to communicate with PanelDue bootloader (no START signal received). Please press the Erase and Reset switches on PanelDue."); + reprap.GetPlatform().Message(ErrorMessage, "Failed to communicate with PanelDue bootloader (no START signal received). Please try again or press the Erase and Reset switches on PanelDue."); } else { @@ -318,13 +312,11 @@ void PanelDueUpdater::Spin() noexcept UARTClass* PanelDueUpdater::GetAuxPort() noexcept { return -#if ALLOW_OTHER_AUX serialChannel == 0 || serialChannel > NumSerialChannels ? nullptr : -# ifdef SERIAL_AUX2_DEVICE +#ifdef SERIAL_AUX2_DEVICE serialChannel == 2 ? &SERIAL_AUX2_DEVICE : -# endif #endif - &SERIAL_AUX_DEVICE; + &SERIAL_AUX_DEVICE; // Channel 1 } #endif diff --git a/src/Comms/PanelDueUpdater.h b/src/Comms/PanelDueUpdater.h index 1a9a3e47..9d45fb99 100644 --- a/src/Comms/PanelDueUpdater.h +++ b/src/Comms/PanelDueUpdater.h @@ -21,9 +21,6 @@ # include <UARTClass.h> #endif -#define DEBUG_BOSSA (0) -#define ALLOW_OTHER_AUX (0) // If we ever decide to allow PanelDue on something else than AUX reenable this - #include <bossa/Samba.h> #include <bossa/Device.h> #include <bossa/Flasher.h> @@ -34,7 +31,7 @@ constexpr uint32_t RequiredBaudRate = 115200; constexpr const char * panelDueCommandEraseAndReset = "{\"controlCommand\":\"eraseAndReset\"}\n"; constexpr const char * panelDueCommandReset = "{\"controlCommand\":\"reset\"}\n"; -constexpr uint32_t WaitMsAfterEraseAndReset = 1000; // How long to wait in ms after eraseAndReset +constexpr uint16_t WaitMsAfterEraseAndReset = 2000; // How long to wait in ms after eraseAndReset class PanelDueUpdater { public: @@ -62,9 +59,7 @@ private: done ); -#if ALLOW_OTHER_AUX - size_t serialChannel; -#endif + uint8_t serialChannel; size_t currentBaudRate; Samba* samba; SerialPort* serialPort; |