Make sure that long reads are aborted early if the connection times out while waiting...
[pub/USBasp.git] / Projects / AVRISP-MKII / Lib / XPROG / XPROGTarget.c
index bd269ed..e75adbe 100644 (file)
@@ -338,6 +338,9 @@ uint8_t XPROGTarget_ReceiveByte(void)
                }       \r
        }\r
        \r
+       if (TimeoutMSRemaining)\r
+         TimeoutMSRemaining = COMMAND_TIMEOUT_MS;\r
+\r
        return UDR1;\r
 #else\r
        /* Wait until a byte has been received before reading */\r
@@ -453,22 +456,33 @@ static void XPROGTarget_SetRxMode(void)
        {\r
                BITBANG_PDIDATA_DDR  &= ~BITBANG_PDIDATA_MASK;\r
                BITBANG_PDIDATA_PORT &= ~BITBANG_PDIDATA_MASK;\r
+\r
+               /* Wait until DATA line has been pulled up to idle by the target */\r
+               while (!(BITBANG_PDIDATA_PIN & BITBANG_PDIDATA_MASK) && TimeoutMSRemaining)\r
+               {\r
+                       /* Manage software timeout */\r
+                       if (TIFR0 & (1 << OCF0A))\r
+                       {\r
+                               TIFR0 |= (1 << OCF0A);\r
+                               TimeoutMSRemaining--;\r
+                       }\r
+               }\r
        }\r
        else\r
        {\r
                BITBANG_TPIDATA_DDR  &= ~BITBANG_TPIDATA_MASK;\r
-               BITBANG_TPIDATA_PORT &= ~BITBANG_TPIDATA_MASK;  \r
-       }\r
-       \r
-       /* Wait until DATA line has been pulled up to idle by the target */\r
-       while (!(BITBANG_PDIDATA_PIN & BITBANG_PDIDATA_MASK) && TimeoutMSRemaining)\r
-       {\r
-               /* Manage software timeout */\r
-               if (TIFR0 & (1 << OCF0A))\r
+               BITBANG_TPIDATA_PORT &= ~BITBANG_TPIDATA_MASK;\r
+\r
+               /* Wait until DATA line has been pulled up to idle by the target */\r
+               while (!(BITBANG_TPIDATA_PIN & BITBANG_TPIDATA_MASK) && TimeoutMSRemaining)\r
                {\r
-                       TIFR0 |= (1 << OCF0A);\r
-                       TimeoutMSRemaining--;\r
-               }\r
+                       /* Manage software timeout */\r
+                       if (TIFR0 & (1 << OCF0A))\r
+                       {\r
+                               TIFR0 |= (1 << OCF0A);\r
+                               TimeoutMSRemaining--;\r
+                       }\r
+               }       \r
        }       \r
 #endif\r
 \r