Commit 9a1560dc authored by Dean Camera's avatar Dean Camera
Browse files

Make sure that long reads are aborted early if the connection times out while...

Make sure that long reads are aborted early if the connection times out while waiting on more bytes in the AVRISP MKII clone project.
parent ceb16ee2
......@@ -164,14 +164,14 @@ bool TINYNVM_ReadMemory(const uint16_t ReadAddress, uint8_t* ReadBuffer, uint16_
/* Send the address of the location to read from */
TINYNVM_SendPointerAddress(ReadAddress);
while (ReadSize--)
while (ReadSize-- && TimeoutMSRemaining)
{
/* Read the byte of data from the target */
XPROGTarget_SendByte(TPI_CMD_SLD | TPI_POINTER_INDIRECT_PI);
*(ReadBuffer++) = XPROGTarget_ReceiveByte();
}
return true;
return (TimeoutMSRemaining != 0);
}
/** Writes word addressed memory to the target's memory spaces.
......
......@@ -183,7 +183,7 @@ bool XMEGANVM_GetMemoryCRC(const uint8_t CRCCommand, uint32_t* const CRCDest)
for (uint8_t i = 0; i < XMEGA_CRC_LENGTH; i++)
((uint8_t*)CRCDest)[i] = XPROGTarget_ReceiveByte();
return true;
return (TimeoutMSRemaining != 0);
}
/** Reads memory from the target's memory spaces.
......@@ -215,10 +215,10 @@ bool XMEGANVM_ReadMemory(const uint32_t ReadAddress, uint8_t* ReadBuffer, uint16
/* Send a LD command with indirect access and postincrement to read out the bytes */
XPROGTarget_SendByte(PDI_CMD_LD | (PDI_POINTER_INDIRECT_PI << 2) | PDI_DATSIZE_1BYTE);
while (ReadSize--)
while (ReadSize-- && TimeoutMSRemaining)
*(ReadBuffer++) = XPROGTarget_ReceiveByte();
return true;
return (TimeoutMSRemaining != 0);
}
/** Writes byte addressed memory to the target's memory spaces.
......
......@@ -338,6 +338,9 @@ uint8_t XPROGTarget_ReceiveByte(void)
}
}
if (TimeoutMSRemaining)
TimeoutMSRemaining = COMMAND_TIMEOUT_MS;
return UDR1;
#else
/* Wait until a byte has been received before reading */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment