From 2059fd8b1a4c79f37811bb27fa568a97c56936a4 Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Wed, 27 Jan 2010 02:59:54 +0000
Subject: [PATCH] Manually pull PDI clock pin high for 1ms before disabling PDI
 mode in the AVRISP-MKII project, to ensure that the PDI bus is disabled in
 the target and /RESET functionality restored.

---
 LUFA/ManPages/FutureChanges.txt              | 1 -
 Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c | 8 ++++++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/LUFA/ManPages/FutureChanges.txt b/LUFA/ManPages/FutureChanges.txt
index 9006040d3..d2ba13f7e 100644
--- a/LUFA/ManPages/FutureChanges.txt
+++ b/LUFA/ManPages/FutureChanges.txt
@@ -17,7 +17,6 @@
   *      -# Add ability to get number of bytes not written with pipe/endpoint write routines after an error
   *      -# Add standardized descriptor names to class driver structures
   *      -# Correct mishandling of error cases in Mass Storage demos
-  *      -# FIX BROKEN RNDIS HOST CLASS DRIVER (BLOCKING)
   *      -# TEST AND CORRECT TPI PROGRAMMING SUPPORT IN THE AVRISP-MKII PROJECT (BLOCKING)
   *  - Documentation/Support
   *      -# Remake AVRStudio project files
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c
index 01c861fb6..05d5ec9a4 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c
@@ -230,6 +230,10 @@ void XPROGTarget_DisableTargetPDI(void)
 	XPROGTarget_SetRxMode();
 
 #if defined(XPROG_VIA_HARDWARE_USART)
+	/* Set /RESET high for a one millisecond to ensure target device is restarted */
+	PORTD |= (1 << 5);
+	_delay_ms(1);
+
 	/* Turn off receiver and transmitter of the USART, clear settings */
 	UCSR1A |= (1 << TXC1) | (1 << RXC1);
 	UCSR1B  = 0;
@@ -239,6 +243,10 @@ void XPROGTarget_DisableTargetPDI(void)
 	DDRD  &= ~((1 << 5) | (1 << 3));
 	PORTD &= ~((1 << 5) | (1 << 3) | (1 << 2));
 #else
+	/* Set /RESET high for a one millisecond to ensure target device is restarted */
+	BITBANG_PDICLOCK_PORT |= BITBANG_PDICLOCK_MASK;
+	_delay_ms(1);
+
 	/* Set DATA and CLOCK lines to inputs */
 	BITBANG_PDIDATA_DDR   &= ~BITBANG_PDIDATA_MASK;
 	BITBANG_PDICLOCK_DDR  &= ~BITBANG_PDICLOCK_MASK;
-- 
GitLab