From 1e0b016c0a03f5d6662735bf20d922167af93026 Mon Sep 17 00:00:00 2001 From: haskal Date: Sun, 25 Jul 2021 18:21:02 -0400 Subject: [PATCH] make "set mode 0" mean reset to bootloader --- bsp/rp2040/board.h | 5 +++++ src/vnd_cfg.c | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/bsp/rp2040/board.h b/bsp/rp2040/board.h index ea649fc..6453834 100644 --- a/bsp/rp2040/board.h +++ b/bsp/rp2040/board.h @@ -28,6 +28,8 @@ #ifndef BOARD_H_MOD #define BOARD_H_MOD +#include + #ifdef __cplusplus extern "C" { #endif @@ -48,6 +50,9 @@ extern "C" { #define UART_RX_PIN PICO_DEFAULT_UART_RX_PIN #endif +// Reset to bootloader +#define bsp_reset_bootloader() reset_usb_boot(0, 0) + #ifdef __cplusplus } #endif diff --git a/src/vnd_cfg.c b/src/vnd_cfg.c index 15e8295..d195a88 100644 --- a/src/vnd_cfg.c +++ b/src/vnd_cfg.c @@ -5,10 +5,10 @@ #include #include +#include "board.h" #include "info.h" #include "mode.h" #include "vnd_cfg.h" - #include "thread.h" #if CFG_TUD_VENDOR > 0 @@ -175,7 +175,10 @@ void vnd_cfg_task(void) { break; case cfg_cmd_set_cur_mode: verbuf[0] = vnd_cfg_read_byte(); - if (verbuf[0] == 0 || verbuf[0] >= 0x10 || mode_list[verbuf[0]] == NULL) { + if (verbuf[0] == 0) { + // reset + bsp_reset_bootloader(); + } else if (verbuf[0] >= 0x10 || mode_list[verbuf[0]] == NULL) { vnd_cfg_write_resp(cfg_resp_nosuchmode, 0, NULL); } else { // will be handled later so the USB stack won't break, whcih might happen if reconfig would happen now