More fixes to the AVRISP command timeout system so that it should no longer lock...
[pub/USBasp.git] / Projects / AVRISP-MKII / Lib / ISP / ISPTarget.c
index 51ba1ec..94f1c3d 100644 (file)
@@ -112,7 +112,6 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint1
                                       const uint8_t DelayMS, const uint8_t ReadMemCommand)\r
 {\r
        uint8_t ProgrammingStatus  = STATUS_CMD_OK;\r
-       uint8_t TimeoutMSRemaining = 100;\r
 \r
        /* Determine method of Programming Complete check */\r
        switch (ProgrammingMode & ~(PROG_MODE_PAGED_WRITES_MASK | PROG_MODE_COMMIT_PAGE_MASK))\r
@@ -148,6 +147,9 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint1
                        break;\r
        }\r
 \r
+       if (ProgrammingStatus == STATUS_CMD_OK)\r
+         TimeoutMSRemaining = COMMAND_TIMEOUT_MS;\r
+\r
        return ProgrammingStatus;\r
 }\r
 \r
@@ -158,8 +160,6 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint1
  */\r
 uint8_t ISPTarget_WaitWhileTargetBusy(void)\r
 {\r
-       uint8_t TimeoutMSRemaining = 100;\r
-\r
        do\r
        {\r
                /* Manage software timeout */\r
@@ -175,7 +175,15 @@ uint8_t ISPTarget_WaitWhileTargetBusy(void)
        }\r
        while ((SPI_ReceiveByte() & 0x01) && TimeoutMSRemaining);\r
 \r
-       return ((TimeoutMSRemaining) ? STATUS_CMD_OK : STATUS_RDY_BSY_TOUT);\r
+       if (TimeoutMSRemaining)\r
+       {\r
+               TimeoutMSRemaining = COMMAND_TIMEOUT_MS;\r
+               return STATUS_CMD_OK;\r
+       }\r
+       else\r
+       {\r
+               return STATUS_RDY_BSY_TOUT;\r
+       }\r
 }\r
 \r
 /** Sends a low-level LOAD EXTENDED ADDRESS command to the target, for addressing of memory beyond the\r