Fix print of "soft reboot" when the user presses ^D

The logic of the main loop was changed between version 7 and 8.
[Commit](9307b62ad5)
Something is wrong with the existing version 8 logic so the serial
write of "soft reboot" is never executed when the user does a
soft reboot.
A consequence of this is that tools like `tools/pyboard.py`, `ampy`
and `mpremote` are not able to activate the raw REPL since they
execute a soft reboot and wait for this to be printed to the console.
This commit is contained in:
Patrick Van Oosterwijck 2023-02-26 16:00:37 -07:00
parent f9831b3bbc
commit 5bca86b43d
1 changed files with 3 additions and 1 deletions

4
main.c
View File

@ -1078,15 +1078,17 @@ int __attribute__((used)) main(void) {
int exit_code = PYEXEC_FORCED_EXIT; int exit_code = PYEXEC_FORCED_EXIT;
bool skip_repl = true; bool skip_repl = true;
bool simulate_reset = true; bool simulate_reset = true;
bool first_run = true;
for (;;) { for (;;) {
if (!skip_repl) { if (!skip_repl) {
exit_code = run_repl(get_safe_mode()); exit_code = run_repl(get_safe_mode());
supervisor_set_run_reason(RUN_REASON_REPL_RELOAD); supervisor_set_run_reason(RUN_REASON_REPL_RELOAD);
} }
if (exit_code == PYEXEC_FORCED_EXIT) { if (exit_code == PYEXEC_FORCED_EXIT) {
if (!simulate_reset) { if (!first_run) {
serial_write_compressed(translate("soft reboot\n")); serial_write_compressed(translate("soft reboot\n"));
} }
first_run = false;
if (pyexec_mode_kind == PYEXEC_MODE_FRIENDLY_REPL) { if (pyexec_mode_kind == PYEXEC_MODE_FRIENDLY_REPL) {
// If code.py did a fake deep sleep, pretend that we // If code.py did a fake deep sleep, pretend that we
// are running code.py for the first time after a hard // are running code.py for the first time after a hard