Ver código fonte

Merge pull request #431 from ZuluSCSI/feature/mask-logging-via-scsi-id

Add debug message suppression by SCSI ID
Alex Perez 1 ano atrás
pai
commit
13c913e4e0

+ 16 - 17
lib/SCSI2SD/src/firmware/network.c

@@ -32,7 +32,15 @@ struct scsiNetworkPacketQueue {
 	uint8_t readIndex;
 };
 
-static struct scsiNetworkPacketQueue scsiNetworkInboundQueue, scsiNetworkOutboundQueue;
+struct scsiNetworkPacket
+{
+	uint8_t packet[NETWORK_PACKET_MAX_SIZE];
+	uint16_t size;
+	bool full;
+};
+
+static struct scsiNetworkPacketQueue scsiNetworkInboundQueue;
+static struct scsiNetworkPacket scsiNetworkOutbound;
 
 struct __attribute__((packed)) wifi_network_entry wifi_network_list[WIFI_NETWORK_LIST_ENTRY_COUNT] = { 0 };
 
@@ -265,13 +273,9 @@ int scsiNetworkCommand()
 			off = 4;
 		}
 
-		memcpy(&scsiNetworkOutboundQueue.packets[scsiNetworkOutboundQueue.writeIndex], scsiDev.data + off, size);
-		scsiNetworkOutboundQueue.sizes[scsiNetworkOutboundQueue.writeIndex] = size;
-
-		if (scsiNetworkOutboundQueue.writeIndex == NETWORK_PACKET_QUEUE_SIZE - 1)
-			scsiNetworkOutboundQueue.writeIndex = 0;
-		else
-			scsiNetworkOutboundQueue.writeIndex++;
+		memcpy(&scsiNetworkOutbound.packet, scsiDev.data + off, size);
+		scsiNetworkOutbound.size = size;
+		scsiNetworkOutbound.full = true;
 
 		scsiDev.status = GOOD;
 		scsiDev.phase = STATUS;
@@ -307,7 +311,7 @@ int scsiNetworkCommand()
 			DBGMSG_F("%s: enable interface", __func__);
 			scsiNetworkEnabled = true;
 			memset(&scsiNetworkInboundQueue, 0, sizeof(scsiNetworkInboundQueue));
-			memset(&scsiNetworkOutboundQueue, 0, sizeof(scsiNetworkOutboundQueue));
+			memset(&scsiNetworkOutbound, 0, sizeof(scsiNetworkOutbound));
 		}
 		else
 		{
@@ -495,15 +499,10 @@ int scsiNetworkPurge(void)
 	if (!scsiNetworkEnabled)
 		return 0;
 
-	while (scsiNetworkOutboundQueue.readIndex != scsiNetworkOutboundQueue.writeIndex)
+	if (scsiNetworkOutbound.full)
 	{
-		platform_network_send(scsiNetworkOutboundQueue.packets[scsiNetworkOutboundQueue.readIndex], scsiNetworkOutboundQueue.sizes[scsiNetworkOutboundQueue.readIndex]);
-
-		if (scsiNetworkOutboundQueue.readIndex == NETWORK_PACKET_QUEUE_SIZE - 1)
-			scsiNetworkOutboundQueue.readIndex = 0;
-		else
-			scsiNetworkOutboundQueue.readIndex++;
-
+		platform_network_send(scsiNetworkOutbound.packet, scsiNetworkOutbound.size);
+		scsiNetworkOutbound.full = false;
 		sent++;
 	}
 

+ 18 - 1
src/ZuluSCSI.cpp

@@ -1,6 +1,6 @@
 /*  
  *  ZuluSCSI™
- *  Copyright (c) 2022-2023 Rabbit Hole Computing™
+ *  Copyright (c) 2022-2024 Rabbit Hole Computing™
  * 
  * This project is based on BlueSCSI:
  *
@@ -692,7 +692,24 @@ static void reinitSCSI()
     g_log_debug = true;
   }
 #endif
+  if (g_log_debug)
+  {
+    g_scsi_log_mask = ini_getl("SCSI", "DebugLogMask", 0xFF, CONFIGFILE) & 0xFF;
+    if (g_scsi_log_mask == 0)
+    {
+      dbgmsg("DebugLogMask set to 0x00, this will silence all debug messages when a SCSI ID has been selected");
+    }
+    else if (g_scsi_log_mask != 0xFF)
+    {
+      dbgmsg("DebugLogMask set to ", (uint8_t) g_scsi_log_mask, " only SCSI ID's matching the bit mask will be logged");
+    }
 
+    g_log_ignore_busy_free = ini_getbool("SCSI", "DebugIgnoreBusyFree", 0, CONFIGFILE);
+    if (g_log_ignore_busy_free)
+    {
+      dbgmsg("DebugIgnoreBusyFree enabled, BUS_FREE/BUS_BUSY messages suppressed");
+    }
+  }
 #ifdef PLATFORM_HAS_INITIATOR_MODE
   if (platform_is_initiator_mode_enabled())
   {

+ 1 - 1
src/ZuluSCSI_config.h

@@ -28,7 +28,7 @@
 #include <ZuluSCSI_platform.h>
 
 // Use variables for version number
-#define FW_VER_NUM      "24.06.04"
+#define FW_VER_NUM      "24.06.12"
 #define FW_VER_SUFFIX   "devel"
 #define ZULU_FW_VERSION FW_VER_NUM "-" FW_VER_SUFFIX
 #define INQUIRY_NAME  PLATFORM_NAME " v" ZULU_FW_VERSION

+ 4 - 1
src/ZuluSCSI_log.cpp

@@ -1,6 +1,7 @@
 /** 
- * ZuluSCSI™ - Copyright (c) 2022 Rabbit Hole Computing™
+ * ZuluSCSI™ - Copyright (c) 2022-2024 Rabbit Hole Computing™
  * Copyright (c) 2023 joshua stein <jcs@jcs.org>
+ * Copyright (c) 2024 Eric Helgeson <erichelgeson@gmail.com>
  * 
  * ZuluSCSI™ firmware is licensed under the GPL version 3 or any later version. 
  * 
@@ -30,6 +31,8 @@
 const char *g_log_firmwareversion = ZULU_FW_VERSION " " __DATE__ " " __TIME__;
 
 bool g_log_debug = false;
+bool g_log_ignore_busy_free = false;
+uint8_t g_scsi_log_mask = 0xFF;
 
 // This memory buffer can be read by debugger and is also saved to zululog.txt
 #define LOGBUFMASK (LOGBUFSIZE - 1)

+ 13 - 1
src/ZuluSCSI_log.h

@@ -1,6 +1,7 @@
 /** 
- * ZuluSCSI™ - Copyright (c) 2022 Rabbit Hole Computing™
+ * ZuluSCSI™ - Copyright (c) 2022-2024 Rabbit Hole Computing™
  * Copyright (c) 2023 joshua stein <jcs@jcs.org>
+ * Copyright (c) 2024 Eric Helgeson <erichelgeson@gmail.com>
  * 
  * ZuluSCSI™ firmware is licensed under the GPL version 3 or any later version. 
  * 
@@ -26,6 +27,7 @@
 
 #include <stdint.h>
 #include <stddef.h>
+#include <scsiPhy.h>
 
 // Get total number of bytes that have been written to log
 uint32_t log_get_buffer_len();
@@ -37,6 +39,8 @@ const char *log_get_buffer(uint32_t *startpos, uint32_t *available = nullptr);
 
 // Whether to enable debug messages
 extern "C" bool g_log_debug;
+extern "C" bool g_log_ignore_busy_free;
+extern "C" uint8_t g_scsi_log_mask;
 
 // Firmware version string
 extern const char *g_log_firmwareversion;
@@ -96,6 +100,14 @@ inline void dbgmsg(Params... params)
 {
     if (g_log_debug)
     {
+        // Check if log mask is not the default value, the selection was a success, and the selected ID was not match, then skip logging
+        if ( g_scsi_log_mask != 0xFF
+            && (SCSI_STS_SELECTION_SUCCEEDED & *SCSI_STS_SELECTED)
+            && (0 == (g_scsi_log_mask & (1 << (*SCSI_STS_SELECTED & 7))))
+           )
+        {
+            return;
+        }
         log_raw("[", (int)millis(), "ms] DBG ");
         log_raw(params...);
         log_raw("\r\n");

+ 2 - 2
src/ZuluSCSI_log_trace.cpp

@@ -130,11 +130,11 @@ static void printNewPhase(int phase, bool initiator = false)
     switch(phase)
     {
         case BUS_FREE:
-            dbgmsg("-- BUS_FREE");
+            if (!g_log_ignore_busy_free) dbgmsg("-- BUS_FREE");
             break;
         
         case BUS_BUSY:
-            dbgmsg("-- BUS_BUSY");
+            if (!g_log_ignore_busy_free) dbgmsg("-- BUS_BUSY");
             break;
         
         case ARBITRATION:

+ 2 - 0
zuluscsi.ini

@@ -7,6 +7,8 @@
 #System="Mac"
 
 #Debug = 0   # Same effect as DIPSW2, enables verbose log messages
+#DebugLogMask = 255 # A bit mask for SCSI IDs 0-7, filters only matching SCSI ID debug messages
+#DebugIgnoreBusyFree = 0 # Set to 1 to ignore the BUS_FREE and BUS_BUSY logging
 #SelectionDelay = 255   # Millisecond delay after selection, 255 = automatic, 0 = no delay
 #Dir = "/"   # Optionally look for image files in subdirectory
 #Dir2 = "/images"  # Multiple directories can be specified Dir1...Dir9