diff --git a/src/leds.c b/src/leds.c index 163ad70202eba3212a4185f4a2d896f25ce84b4b..ab94e1efec31860a2347467317d3b9735720f3c0 100644 --- a/src/leds.c +++ b/src/leds.c @@ -9,11 +9,22 @@ #include "leds.h" #include "config/conf_board.h" #include <ioport.h> +#include <util/atomic.h> void my_callback_cdc_set_rts(uint8_t port, uint8_t b_enable){ + static uint8_t connected = 0; + #if BOARD_VER_MAJOR >= 1 && BOARD_VER_MINOR >= 2 && BOARD_VER_MICRO >=3 ioport_set_pin_level(LED2, b_enable); #endif + + if (connected && !b_enable){ + ATOMIC_BLOCK(ATOMIC_RESTORESTATE){ + CCP = 0xD8; // Configuration change protection: allow protected IO regiser write + RST.CTRL = RST_SWRST_bm; // Request software reset by writing to protected IO register + } + } + connected = b_enable; }