|
@@ -127,6 +127,16 @@ static void scsiInitiatorUpdateLed()
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+void delay_with_poll(uint32_t ms)
|
|
|
|
|
+{
|
|
|
|
|
+ uint32_t start = millis();
|
|
|
|
|
+ while ((uint32_t)(millis() - start) < ms)
|
|
|
|
|
+ {
|
|
|
|
|
+ platform_poll();
|
|
|
|
|
+ delay(1);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// High level logic of the initiator mode
|
|
// High level logic of the initiator mode
|
|
|
void scsiInitiatorMainLoop()
|
|
void scsiInitiatorMainLoop()
|
|
|
{
|
|
{
|
|
@@ -146,7 +156,7 @@ void scsiInitiatorMainLoop()
|
|
|
|
|
|
|
|
if (!(g_initiator_state.drives_imaged & (1 << g_initiator_state.target_id)))
|
|
if (!(g_initiator_state.drives_imaged & (1 << g_initiator_state.target_id)))
|
|
|
{
|
|
{
|
|
|
- delay(1000);
|
|
|
|
|
|
|
+ delay_with_poll(1000);
|
|
|
|
|
|
|
|
uint8_t inquiry_data[36];
|
|
uint8_t inquiry_data[36];
|
|
|
|
|
|
|
@@ -279,9 +289,9 @@ void scsiInitiatorMainLoop()
|
|
|
if (g_initiator_state.retrycount < 5)
|
|
if (g_initiator_state.retrycount < 5)
|
|
|
{
|
|
{
|
|
|
logmsg("Retrying.. ", g_initiator_state.retrycount, "/5");
|
|
logmsg("Retrying.. ", g_initiator_state.retrycount, "/5");
|
|
|
- delay(200);
|
|
|
|
|
|
|
+ delay_with_poll(200);
|
|
|
scsiHostPhyReset();
|
|
scsiHostPhyReset();
|
|
|
- delay(200);
|
|
|
|
|
|
|
+ delay_with_poll(200);
|
|
|
|
|
|
|
|
g_initiator_state.retrycount++;
|
|
g_initiator_state.retrycount++;
|
|
|
g_initiator_state.target_file.seek((uint64_t)g_initiator_state.sectors_done * g_initiator_state.sectorsize);
|
|
g_initiator_state.target_file.seek((uint64_t)g_initiator_state.sectors_done * g_initiator_state.sectorsize);
|
|
@@ -719,6 +729,7 @@ bool scsiInitiatorReadDataToFile(int target_id, uint32_t start_sector, uint32_t
|
|
|
// Write any remaining buffered data
|
|
// Write any remaining buffered data
|
|
|
while (g_initiator_transfer.bytes_sd < g_initiator_transfer.bytes_scsi_done)
|
|
while (g_initiator_transfer.bytes_sd < g_initiator_transfer.bytes_scsi_done)
|
|
|
{
|
|
{
|
|
|
|
|
+ platform_poll();
|
|
|
scsiInitiatorWriteDataToSd(file, false);
|
|
scsiInitiatorWriteDataToSd(file, false);
|
|
|
}
|
|
}
|
|
|
|
|
|