From 29876f649ad34bf1528fef881aec19e8e808e50c Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 17 Jan 2024 09:33:40 +1100 Subject: [PATCH] AP_Bootloader: added reboot button --- Tools/AP_Bootloader/Web/index.html | 1 + Tools/AP_Bootloader/network.cpp | 19 ++++++++++++++++--- Tools/AP_Bootloader/network.h | 2 ++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/Tools/AP_Bootloader/Web/index.html b/Tools/AP_Bootloader/Web/index.html index 44ace6fa0a..a48662e049 100644 --- a/Tools/AP_Bootloader/Web/index.html +++ b/Tools/AP_Bootloader/Web/index.html @@ -16,6 +16,7 @@
+
diff --git a/Tools/AP_Bootloader/network.cpp b/Tools/AP_Bootloader/network.cpp index 5fa3d25dc6..9b86561433 100644 --- a/Tools/AP_Bootloader/network.cpp +++ b/Tools/AP_Bootloader/network.cpp @@ -467,6 +467,10 @@ void BL_Network::handle_request(SocketAPM *sock) } } + if (strncmp(headers, "GET /REBOOT", 11) == 0) { + need_reboot = true; + } + uint32_t size = 0; /* we only need one URL in the bootloader @@ -477,9 +481,14 @@ void BL_Network::handle_request(SocketAPM *sock) "\r\n"; const auto *msg = AP_ROMFS::find_decompress("index.html", size); sock->send(header, strlen(header)); - char *msg2 = substitute_vars((const char *)msg, size); - sock->send(msg2, strlen(msg2)); - delete msg2; + if (need_reboot) { + const char *str = ""; + sock->send(str, strlen(str)); + } else { + char *msg2 = substitute_vars((const char *)msg, size); + sock->send(msg2, strlen(msg2)); + delete msg2; + } delete headers; AP_ROMFS::free(msg); } @@ -495,6 +504,10 @@ void BL_Network::web_server(void) while (true) { auto *sock = listen_socket->accept(20); + if (need_reboot) { + need_reboot = false; + NVIC_SystemReset(); + } if (sock == nullptr) { continue; } diff --git a/Tools/AP_Bootloader/network.h b/Tools/AP_Bootloader/network.h index a3f46a9c3e..3da28ff132 100644 --- a/Tools/AP_Bootloader/network.h +++ b/Tools/AP_Bootloader/network.h @@ -43,6 +43,8 @@ private: struct { uint32_t ip, gateway, netmask; } addr; + + bool need_reboot; }; #endif // AP_BOOTLOADER_NETWORK_ENABLED