فهرست منبع

Fix for initiator initialization. Fixes #276
Set initiator file handling to previous default.
Other minor cleanup.

Eric Helgeson 4 ماه پیش
والد
کامیت
7874a6ae7b

+ 2 - 2
lib/BlueSCSI_platform_RP2MCU/BlueSCSI_platform.cpp

@@ -508,6 +508,7 @@ void platform_init()
 void platform_enable_initiator_mode()
 {
     g_scsi_initiator = true;
+    platform_initiator_gpio_setup();
 }
 
 // late_init() only runs in main application, SCSI not needed in bootloader
@@ -671,7 +672,7 @@ void platform_initiator_gpio_setup() {
     gpio_conf(SCSI_IN_REQ,    GPIO_FUNC_SIO, true ,false, false, true, false);
     gpio_conf(SCSI_IN_BSY,    GPIO_FUNC_SIO, true, false, false, true, false);
     gpio_conf(SCSI_IN_RST,    GPIO_FUNC_SIO, true, false, false, true, false);
-    gpio_conf(SCSI_OUT_RST,   GPIO_FUNC_SIO, false,false, true,  true, true);
+    gpio_conf(SCSI_OUT_SEL,   GPIO_FUNC_SIO, false,false, true,  true, true);
     gpio_conf(SCSI_OUT_ACK,   GPIO_FUNC_SIO, true,false, true,  true, true);
     //gpio_conf(SCSI_OUT_ATN,   GPIO_FUNC_SIO, false,false, true,  true, true);  // ATN output is unused
 }
@@ -683,7 +684,6 @@ void platform_post_sd_card_init() {}
 
 bool platform_is_initiator_mode_enabled()
 {
-    // logmsg("Initiator mode enabled: ", g_scsi_initiator);
     return g_scsi_initiator;
 }
 

+ 8 - 8
lib/BlueSCSI_platform_RP2MCU/BlueSCSI_platform_gpio_v2.h

@@ -119,20 +119,20 @@ extern uint32_t SCSI_ACCEL_PINMASK;
 // Set pin directions for initiator vs. target mode
 #define SCSI_ENABLE_INITIATOR() \
     (sio_hw->gpio_oe_set = (1 << SCSI_OUT_ACK) | \
-    (1 << SCSI_OUT_SEL)), \
+                           (1 << SCSI_OUT_SEL)), \
     (sio_hw->gpio_oe_clr = (1 << SCSI_IN_IO) | \
-    (1 << SCSI_IN_CD) | \
-    (1 << SCSI_IN_MSG) | \
-    (1 << SCSI_OUT_REQ))
+                           (1 << SCSI_IN_CD) | \
+                           (1 << SCSI_IN_MSG) | \
+                           (1 << SCSI_OUT_REQ))
 
 // Used in test mode only
 #define SCSI_RELEASE_INITIATOR() \
     (sio_hw->gpio_oe_clr = (1 << SCSI_OUT_ACK) | \
-    (1 << SCSI_OUT_SEL)), \
+                           (1 << SCSI_OUT_SEL)), \
     (sio_hw->gpio_oe_set = (1 << SCSI_IN_IO) | \
-    (1 << SCSI_IN_CD) | \
-    (1 << SCSI_IN_MSG) | \
-    (1 << SCSI_OUT_REQ))
+                           (1 << SCSI_IN_CD) | \
+                           (1 << SCSI_IN_MSG) | \
+                           (1 << SCSI_OUT_REQ))
 
 // Enable driving of shared control pins
 #define SCSI_ENABLE_CONTROL_OUT() \

+ 1 - 1
src/BlueSCSI.cpp

@@ -780,7 +780,6 @@ static void reinitSCSI()
     scsiInit();
 
     // Setup GPIO pins for initiator mode
-    platform_initiator_gpio_setup();
     // Initializer initiator mode state machine
     scsiInitiatorInit();
 
@@ -1166,6 +1165,7 @@ static void bluescsi_setup_sd_card(bool wait_for_card = true)
     if (platform_supports_initiator_mode()) {
       logmsg("SCSI Initiator Mode");
       platform_enable_initiator_mode();
+      reinitSCSI();
       if (! ini_getbool("SCSI", "InitiatorParity", true, CONFIGFILE))
       {
         logmsg("Initiator Mode Skipping Parity Check.");

+ 4 - 4
src/BlueSCSI_initiator.cpp

@@ -411,10 +411,10 @@ void scsiInitiatorMainLoop()
                 static int handling = -1;
                 if (handling == -1)
                 {
-                    handling = ini_getl("SCSI", "InitiatorImageHandling", 0, CONFIGFILE);
+                    handling = ini_getl("SCSI", "InitiatorImageHandling", INITIATOR_IMAGE_INCREMENT_IF_EXISTS, CONFIGFILE);
                 }
                 // Stop if a file already exists
-                if (handling == 0)
+                if (handling == INITIATOR_IMAGE_SKIP_IF_EXISTS)
                 {
                     if (SD.exists(filename))
                     {
@@ -424,7 +424,7 @@ void scsiInitiatorMainLoop()
                     }
                 }
                 // Create a new copy to the file 002-999
-                else if (handling == 1)
+                else if (handling == INITIATOR_IMAGE_INCREMENT_IF_EXISTS)
                 {
                     for (uint32_t i = 1; i <= 1000; i++)
                     {
@@ -458,7 +458,7 @@ void scsiInitiatorMainLoop()
 
                 }
                 // overwrite file if it exists
-                else if (handling == 2)
+                else if (handling == INITIATOR_IMAGE_OVERWRITE_IF_EXISTS)
                 {
                     if (SD.exists(filename))
                     {

+ 4 - 0
src/BlueSCSI_initiator.h

@@ -30,6 +30,10 @@
 #define SCSI_DEVICE_TYPE_MO 0x7
 #define SCSI_DEVICE_TYPE_DIRECT_ACCESS 0x0
 
+#define INITIATOR_IMAGE_SKIP_IF_EXISTS 0
+#define INITIATOR_IMAGE_INCREMENT_IF_EXISTS 1
+#define INITIATOR_IMAGE_OVERWRITE_IF_EXISTS 2
+
 void scsiInitiatorInit();
 
 void scsiInitiatorMainLoop();

+ 2 - 1
src/BlueSCSI_msc_initiator.cpp

@@ -150,7 +150,8 @@ static void scan_targets()
 
 bool setup_msc_initiator()
 {
-    platform_disable_led();
+    if (rp2040.isPicoW())
+        platform_disable_led();
     logmsg("SCSI Initiator: activating USB MSC mode");
     g_msc_initiator = true;