瀏覽代碼

Merge pull request #488 from ZuluSCSI/dev_msc_initiator

USB MSC Initiator: Improve handling of no targets found
Alex Perez 10 月之前
父節點
當前提交
5c0d72d722
共有 1 個文件被更改,包括 18 次插入2 次删除
  1. 18 2
      src/ZuluSCSI_msc_initiator.cpp

+ 18 - 2
src/ZuluSCSI_msc_initiator.cpp

@@ -78,6 +78,9 @@ static struct {
     uint32_t status_interval;
     uint32_t status_reqcount;
     uint32_t status_bytecount;
+
+    // Scan new targets if none found
+    uint32_t last_scan_time;
 } g_msc_initiator_state;
 
 static int do_read6_or_10(int target_id, uint32_t start_sector, uint32_t sectorcount, uint32_t sectorsize, void *buffer);
@@ -146,13 +149,16 @@ bool setup_msc_initiator()
 
 void poll_msc_initiator()
 {
-    if (g_msc_initiator_target_count == 0)
+    uint32_t time_now = millis();
+    uint32_t time_since_scan = time_now - g_msc_initiator_state.last_scan_time;
+    if (g_msc_initiator_target_count == 0 && time_since_scan > 5000)
     {
         // Scan for targets until we find one
+        platform_reset_watchdog();
         scan_targets();
+        g_msc_initiator_state.last_scan_time = time_now;
     }
 
-    uint32_t time_now = millis();
     uint32_t delta = time_now - g_msc_initiator_state.status_prev_time;
     if (g_msc_initiator_state.status_interval > 0 &&
         delta > g_msc_initiator_state.status_interval)
@@ -254,6 +260,11 @@ bool init_msc_is_writable_cb (uint8_t lun)
 
 bool init_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject)
 {
+    if (g_msc_initiator_target_count == 0)
+    {
+        return false;
+    }
+
     LED_ON();
     g_msc_initiator_state.status_reqcount++;
 
@@ -293,6 +304,11 @@ bool init_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bo
 
 bool init_msc_test_unit_ready_cb(uint8_t lun)
 {
+    if (g_msc_initiator_target_count == 0)
+    {
+        return false;
+    }
+
     g_msc_initiator_state.status_reqcount++;
     return scsiTestUnitReady(get_target(lun));
 }