X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/7f9f97c792dee6875fbca9806422bdd7d6c5a657..aca7863350509a1f390eda93ac0150378d8cd16c:/Projects/Benito/Benito.c diff --git a/Projects/Benito/Benito.c b/Projects/Benito/Benito.c index 9ced17626..86da27a12 100644 --- a/Projects/Benito/Benito.c +++ b/Projects/Benito/Benito.c @@ -48,6 +48,9 @@ volatile struct uint8_t PingPongLEDPulse; /**< Milliseconds remaining for enumeration Tx/Rx ping-pong LED pulse */ } PulseMSRemaining; +/** Previous state of the virtual DTR control line from the host */ +bool PreviousDTRState = false; + /** LUFA CDC Class driver interface configuration and state information. This structure is * passed to all CDC Class driver functions, so that multiple instances of the same class * within a device can be differentiated from one another. @@ -142,9 +145,6 @@ void SetupHardware(void) MCUSR &= ~(1 << WDRF); wdt_disable(); - /* Disable clock division */ - clock_prescale_set(clock_div_1); - /* Hardware Initialization */ Serial_Init(9600, false); LEDs_Init(); @@ -247,12 +247,16 @@ ISR(USART1_RX_vect, ISR_BLOCK) */ void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { + bool CurrentDTRState = (CDCInterfaceInfo->State.ControlLineStates.HostToDevice & CDC_CONTROL_LINE_OUT_DTR); + /* Check if the DTR line has been asserted - if so, start the target AVR's reset pulse */ - if (CDCInterfaceInfo->State.ControlLineStates.HostToDevice & CDC_CONTROL_LINE_OUT_DTR) + if (!(PreviousDTRState) && CurrentDTRState) { LEDs_SetAllLEDs(LEDMASK_BUSY); AVR_RESET_LINE_DDR |= AVR_RESET_LINE_MASK; PulseMSRemaining.ResetPulse = AVR_RESET_PULSE_MS; } + + PreviousDTRState = CurrentDTRState; }