Skip to content

Commit 5efc6bb

Browse files
committed
Implement HAL_reboot
1 parent 250d2aa commit 5efc6bb

File tree

25 files changed

+48
-28
lines changed

25 files changed

+48
-28
lines changed

Marlin/src/HAL/AVR/HAL.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,15 @@ void HAL_init() {
5858
#endif
5959
}
6060

61+
void HAL_reboot() {
62+
#if ENABLED(USE_WATCHDOG)
63+
while (1) { /* run out the watchdog */ }
64+
#else
65+
void (*resetFunc)() = 0; // Declare resetFunc() at address 0
66+
resetFunc(); // Jump to address 0
67+
#endif
68+
}
69+
6170
#if ENABLED(SDSUPPORT)
6271

6372
#include "../../sd/SdFatUtil.h"

Marlin/src/HAL/AVR/HAL.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ void HAL_init();
135135
inline void HAL_clear_reset_source() { MCUSR = 0; }
136136
inline uint8_t HAL_get_reset_source() { return MCUSR; }
137137

138-
inline void HAL_reboot() {} // reboot the board or restart the bootloader
138+
void HAL_reboot();
139139

140140
#if GCC_VERSION <= 50000
141141
#pragma GCC diagnostic push

Marlin/src/HAL/DUE/HAL.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ uint8_t HAL_get_reset_source() {
7777
}
7878
}
7979

80+
void HAL_reboot() { rstc_start_software_reset(RSTC); }
81+
8082
void _delay_ms(const int delay_ms) {
8183
// Todo: port for Due?
8284
delay(delay_ms);

Marlin/src/HAL/DUE/HAL.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ void sei(); // Enable interrupts
113113
void HAL_clear_reset_source(); // clear reset reason
114114
uint8_t HAL_get_reset_source(); // get reset reason
115115

116-
inline void HAL_reboot() {} // reboot the board or restart the bootloader
116+
void HAL_reboot();
117117

118118
//
119119
// ADC

Marlin/src/HAL/ESP32/HAL.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,8 @@ void HAL_clear_reset_source() { }
141141

142142
uint8_t HAL_get_reset_source() { return rtc_get_reset_reason(1); }
143143

144+
void HAL_reboot() { ESP.restart(); }
145+
144146
void _delay_ms(int delay_ms) { delay(delay_ms); }
145147

146148
// return free memory between end of heap (or end bss) and whatever is current

Marlin/src/HAL/ESP32/HAL.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ void HAL_clear_reset_source();
101101
// reset reason
102102
uint8_t HAL_get_reset_source();
103103

104-
inline void HAL_reboot() {} // reboot the board or restart the bootloader
104+
void HAL_reboot();
105105

106106
void _delay_ms(int delay);
107107

Marlin/src/HAL/LINUX/HAL.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,6 @@ void HAL_pwm_init() {
7373

7474
}
7575

76+
void HAL_reboot() { /* Reset the application state and GPIO */ }
77+
7678
#endif // __PLAT_LINUX__

Marlin/src/HAL/LINUX/HAL.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ uint16_t HAL_adc_get_result();
107107
inline void HAL_clear_reset_source(void) {}
108108
inline uint8_t HAL_get_reset_source(void) { return RST_POWER_ON; }
109109

110-
inline void HAL_reboot() {} // reboot the board or restart the bootloader
110+
void HAL_reboot(); // Reset the application state and GPIO
111111

112112
/* ---------------- Delay in cycles */
113113
FORCE_INLINE static void DELAY_CYCLES(uint64_t x) {

Marlin/src/HAL/LPC1768/HAL.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ void flashFirmware(const int16_t) {
6767
delay(500); // Give OS time to disconnect
6868
USB_Connect(false); // USB clear connection
6969
delay(1000); // Give OS time to notice
70-
NVIC_SystemReset();
70+
HAL_reboot();
7171
}
7272

7373
void HAL_clear_reset_source(void) {
@@ -81,4 +81,6 @@ uint8_t HAL_get_reset_source(void) {
8181
return RST_POWER_ON;
8282
}
8383

84+
void HAL_reboot() { NVIC_SystemReset(); }
85+
8486
#endif // TARGET_LPC1768

Marlin/src/HAL/LPC1768/HAL.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,4 +218,4 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255,
218218
void HAL_clear_reset_source(void);
219219
uint8_t HAL_get_reset_source(void);
220220

221-
inline void HAL_reboot() {} // reboot the board or restart the bootloader
221+
void HAL_reboot();

0 commit comments

Comments
 (0)