diff --git a/boards/adafruit-clue/reset.c b/boards/adafruit-clue/reset.c index f73da298a5..29b4b3b673 100644 --- a/boards/adafruit-clue/reset.c +++ b/boards/adafruit-clue/reset.c @@ -21,6 +21,7 @@ #define USB_H_USER_IS_RIOT_INTERNAL +#include "cpu.h" #include "usb_board_reset.h" /* Set the value used by the bootloader to select between boot in diff --git a/boards/arduino-nano-33-ble/reset.c b/boards/arduino-nano-33-ble/reset.c index 4773410c0c..a4f3468459 100644 --- a/boards/arduino-nano-33-ble/reset.c +++ b/boards/arduino-nano-33-ble/reset.c @@ -21,6 +21,7 @@ #define USB_H_USER_IS_RIOT_INTERNAL +#include "cpu.h" #include "usb_board_reset.h" /* Set the value used by the bootloader to select between boot in diff --git a/boards/common/samd21-arduino-bootloader/reset.c b/boards/common/samd21-arduino-bootloader/reset.c index 8ea026e6dd..4a751de25b 100644 --- a/boards/common/samd21-arduino-bootloader/reset.c +++ b/boards/common/samd21-arduino-bootloader/reset.c @@ -23,6 +23,7 @@ #define USB_H_USER_IS_RIOT_INTERNAL +#include "cpu.h" #include "usb_board_reset.h" #ifdef HMCRAMC0_ADDR diff --git a/sys/include/usb_board_reset.h b/sys/include/usb_board_reset.h index 8aa6c655de..d189ae816c 100644 --- a/sys/include/usb_board_reset.h +++ b/sys/include/usb_board_reset.h @@ -24,30 +24,16 @@ extern "C" { #endif -#include - -#include "usb/usbus/cdc/acm.h" - -/** - * @brief USB coding callback used to trigger the board reset - * - * @param[in] cdcacm Pointer to the cdcacm device - * @param[in] baud Baudrate used by the client. Only 1200 baud is taken into account - * @param[in] bits Number of bit mode used by the client - * @param[in] parity Parity mode used by the client - * @param[in] stop Stop bit mode used by the client - * - * @return Always return 0 - */ -int usb_board_reset_coding_cb(usbus_cdcacm_device_t *cdcacm, - uint32_t baud, uint8_t bits, - uint8_t parity, uint8_t stop); - /** * @brief Trigger a simple reset, back to the application */ void usb_board_reset_in_application(void); +/** + * @brief Trigger a bootloader reset, start the bootloader after reset + */ +void usb_board_reset_in_bootloader(void); + #ifdef __cplusplus } #endif diff --git a/sys/include/usb_board_reset_internal.h b/sys/include/usb_board_reset_internal.h new file mode 100644 index 0000000000..70e1e832b3 --- /dev/null +++ b/sys/include/usb_board_reset_internal.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2020 Inria + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @defgroup sys_usb_board_reset_internal Board reset via USB CDC ACM internals + * @ingroup sys_usb_board_reset + * @brief Callbacks provided by the USB_BOARD_RESET to the ACM subsystem + * + * @{ + * + * @file + * @author Alexandre Abadie + */ + +#ifndef USB_BOARD_RESET_INTERNAL_H +#define USB_BOARD_RESET_INTERNAL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#include "usb/usbus/cdc/acm.h" + +/** + * @brief USB coding callback used to trigger the board reset + * + * @param[in] cdcacm Pointer to the cdcacm device + * @param[in] baud Baudrate used by the client. Only 1200 baud is taken into account + * @param[in] bits Number of bit mode used by the client + * @param[in] parity Parity mode used by the client + * @param[in] stop Stop bit mode used by the client + * + * @return Always return 0 + */ +int usb_board_reset_coding_cb(usbus_cdcacm_device_t *cdcacm, + uint32_t baud, uint8_t bits, + uint8_t parity, uint8_t stop); + +#ifdef __cplusplus +} +#endif + +#endif /* USB_BOARD_RESET_INTERNAL_H */ +/** @} */ diff --git a/sys/shell/commands/sc_sys.c b/sys/shell/commands/sc_sys.c index 3452e8f915..a79df983f4 100644 --- a/sys/shell/commands/sc_sys.c +++ b/sys/shell/commands/sc_sys.c @@ -22,6 +22,10 @@ #include "periph/pm.h" +#ifdef MODULE_USB_BOARD_RESET +#include "usb_board_reset.h" +#endif + int _reboot_handler(int argc, char **argv) { (void) argc; @@ -33,8 +37,6 @@ int _reboot_handler(int argc, char **argv) } #ifdef MODULE_USB_BOARD_RESET -void usb_board_reset_in_bootloader(void); - int _bootloader_handler(int argc, char **argv) { (void) argc; diff --git a/sys/usb/usbus/cdc/acm/cdc_acm_stdio.c b/sys/usb/usbus/cdc/acm/cdc_acm_stdio.c index ceb4768b53..c3e1075b58 100644 --- a/sys/usb/usbus/cdc/acm/cdc_acm_stdio.c +++ b/sys/usb/usbus/cdc/acm/cdc_acm_stdio.c @@ -34,7 +34,7 @@ #endif #ifdef MODULE_USB_BOARD_RESET -#include "usb_board_reset.h" +#include "usb_board_reset_internal.h" #endif static usbus_cdcacm_device_t cdcacm; diff --git a/sys/usb_board_reset/usb_board_reset.c b/sys/usb_board_reset/usb_board_reset.c index 04aa426d3d..44e4af4dec 100644 --- a/sys/usb_board_reset/usb_board_reset.c +++ b/sys/usb_board_reset/usb_board_reset.c @@ -32,8 +32,6 @@ #define RESET_IN_APPLICATION_TRIGGER_BAUDRATE (600U) #endif -void usb_board_reset_in_bootloader(void); - int usb_board_reset_coding_cb(usbus_cdcacm_device_t *cdcacm, uint32_t baud, uint8_t bits, uint8_t parity, uint8_t stop)