From: Dean Camera Date: Sun, 17 Jan 2010 05:32:41 +0000 (+0000) Subject: Fix the Benito project not pulsing the target's /RESET line when DTR is de-asserted. X-Git-Tag: LUFA-110528-BETA~679 X-Git-Url: http://git.linex4red.de/pub/USBasp.git/commitdiff_plain/f9781ca6ff755602248f6fb050432fc81781cf98 Fix the Benito project not pulsing the target's /RESET line when DTR is de-asserted. --- diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt index 4c8a2f64c..2e4201326 100644 --- a/LUFA/ManPages/ChangeLog.txt +++ b/LUFA/ManPages/ChangeLog.txt @@ -37,6 +37,7 @@ * - Fixed Class Driver struct interface numbers in the KeyboardMouse and VirtualSerialMouse demos (thanks to Renaud Cerrato) * - Fixed invalid USB controller PLL prescaler values for the ATMEGAxxU2 controllers * - Fixed lack of support for the ATMEGA32U2 in the DFU and CDC class bootloaders + * - Fixed Benito project not resetting the target AVR automatically when programming has completed * * \section Sec_ChangeLog091223 Version 091223 * diff --git a/Projects/Benito/Benito.c b/Projects/Benito/Benito.c index 9ced17626..10e2e8fb3 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. @@ -247,12 +250,16 @@ ISR(USART1_RX_vect, ISR_BLOCK) */ void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - /* 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) + bool CurrentDTRState = CDCInterfaceInfo->State.ControlLineStates.HostToDevice & CDC_CONTROL_LINE_OUT_DTR); + + /* Check if the DTR line has been de-asserted - if so, start the target AVR's reset pulse */ + if (PreviousDTRState && !(CurrentDTRState)) { LEDs_SetAllLEDs(LEDMASK_BUSY); AVR_RESET_LINE_DDR |= AVR_RESET_LINE_MASK; PulseMSRemaining.ResetPulse = AVR_RESET_PULSE_MS; } + + PreviousDTRState = CurrentDTRState; }