aboutsummaryrefslogtreecommitdiffstats
path: root/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2011-02-04 18:17:31 +0000
committerDean Camera <dean@fourwalledcubicle.com>2011-02-04 18:17:31 +0000
commit279e1b6ece7fbc90db6cb642f1c289b45648cf9c (patch)
tree57030b740e567bbcd6c316ae4b72c5e1fc6165d3 /Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
parent73718d7c57f948560111f1641915048edb4f7852 (diff)
downloadlufa-279e1b6ece7fbc90db6cb642f1c289b45648cf9c.tar.gz
lufa-279e1b6ece7fbc90db6cb642f1c289b45648cf9c.tar.bz2
lufa-279e1b6ece7fbc90db6cb642f1c289b45648cf9c.zip
Fixed programming errors in the AVRISP-MKII project when the programming packet is a round multiple of the endpoint bank size under avrdude (thanks to Steffan Woltjer).
Diffstat (limited to 'Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c')
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
index 1b105ddb0..ffc07ad33 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
@@ -250,6 +250,15 @@ static void XPROGProtocol_WriteMemory(void)
WriteMemory_XPROG_Params.Length = SwapEndian_16(WriteMemory_XPROG_Params.Length);
Endpoint_Read_Stream_LE(&WriteMemory_XPROG_Params.ProgData, WriteMemory_XPROG_Params.Length, NULL);
+ // The driver will terminate transfers that are a round multiple of the endpoint bank in size with a ZLP, need
+ // to catch this and discard it before continuing on with packet processing to prevent communication issues
+ if (((sizeof(uint8_t) + sizeof(WriteMemory_XPROG_Params) - sizeof(WriteMemory_XPROG_Params.ProgData)) +
+ WriteMemory_XPROG_Params.Length) % AVRISP_DATA_EPSIZE == 0)
+ {
+ Endpoint_ClearOUT();
+ Endpoint_WaitUntilReady();
+ }
+
Endpoint_ClearOUT();
Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);