瀏覽代碼

Bug fixes galore! Added lots more settings, and moved them into another config tab
- wxWidgets upgrade to 3.02
- PSoC Creator upgrade to 3.3

Michael McMaster 10 年之前
父節點
當前提交
d903ff11eb
共有 100 個文件被更改,包括 6045 次插入4543 次删除
  1. 11 0
      lib/SCSI2SD/CHANGELOG
  2. 26 3
      lib/SCSI2SD/software/SCSI2SD/src/config.c
  3. 1 1
      lib/SCSI2SD/software/SCSI2SD/src/config.h
  4. 63 42
      lib/SCSI2SD/software/SCSI2SD/src/disk.c
  5. 0 2
      lib/SCSI2SD/software/SCSI2SD/src/disk.h
  6. 26 10
      lib/SCSI2SD/software/SCSI2SD/src/main.c
  7. 50 27
      lib/SCSI2SD/software/SCSI2SD/src/scsi.c
  8. 3 1
      lib/SCSI2SD/software/SCSI2SD/src/scsi.h
  9. 12 15
      lib/SCSI2SD/software/SCSI2SD/src/scsiPhy.c
  10. 157 89
      lib/SCSI2SD/software/SCSI2SD/src/sd.c
  11. 5 5
      lib/SCSI2SD/software/SCSI2SD/src/sd.h
  12. 2 0
      lib/SCSI2SD/software/SCSI2SD/src/trace.c
  13. 4 2
      lib/SCSI2SD/software/SCSI2SD/src/trace.h
  14. 5 0
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/Debug_Timer_Interrupt.c
  15. 5 0
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RST_ISR.c
  16. 5 0
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RX_DMA_COMPLETE.c
  17. 5 0
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_SEL_ISR.c
  18. 5 0
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_TX_DMA_COMPLETE.c
  19. 5 0
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_RX_DMA_COMPLETE.c
  20. 5 0
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_TX_DMA_COMPLETE.c
  21. 46 1
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_audio.c
  22. 9 0
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_cdc.c
  23. 5 0
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_cls.c
  24. 8 1
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_drv.c
  25. 101 0
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_episr.c
  26. 6 0
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_hid.c
  27. 24 0
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_midi.c
  28. 9 0
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_pm.c
  29. 5 1
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_vnd.c
  30. 3 0
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cybootloader.c
  31. 0 0
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cycodeshareexport.ld
  32. 0 0
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cycodeshareimport.ld
  33. 0 0
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cycodeshareimport.scat
  34. 3 3
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice.h
  35. 3 3
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice_trm.h
  36. 3 3
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu.inc
  37. 3 3
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu_trm.inc
  38. 3 3
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar.inc
  39. 3 3
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar_trm.inc
  40. 3 3
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv.inc
  41. 3 3
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv_trm.inc
  42. 206 113
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter.h
  43. 1660 1492
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter_cfg.c
  44. 3 3
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter_cfg.h
  45. 205 112
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfittergnu.inc
  46. 205 112
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitteriar.inc
  47. 205 112
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitterrv.inc
  48. 4 4
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cymetadata.c
  49. 0 0
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/exported_symbols.txt
  50. 3 3
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/project.h
  51. 0 0
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/renamed_symbols.txt
  52. 141 141
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/SCSI2SD.cycdx
  53. 二進制
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/SCSI2SD.cyfit
  54. 69 124
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/SCSI2SD.cyprj
  55. 6 6
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/SCSI2SD.svd
  56. 二進制
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/TopDesign/TopDesign.cysch
  57. 61 42
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/scsiTarget/scsiTarget.v
  58. 5 0
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/Debug_Timer_Interrupt.c
  59. 5 0
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RST_ISR.c
  60. 5 0
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RX_DMA_COMPLETE.c
  61. 5 0
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_SEL_ISR.c
  62. 5 0
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_TX_DMA_COMPLETE.c
  63. 19 2
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/SDCard_INT.c
  64. 5 0
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_RX_DMA_COMPLETE.c
  65. 5 0
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_TX_DMA_COMPLETE.c
  66. 46 1
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_audio.c
  67. 9 0
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_cdc.c
  68. 5 0
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_cls.c
  69. 8 1
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_drv.c
  70. 101 0
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_episr.c
  71. 6 0
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_hid.c
  72. 24 0
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_midi.c
  73. 9 0
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_pm.c
  74. 5 1
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_vnd.c
  75. 3 0
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cybootloader.c
  76. 0 0
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cycodeshareexport.ld
  77. 0 0
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cycodeshareimport.ld
  78. 0 0
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cycodeshareimport.scat
  79. 3 3
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice.h
  80. 3 3
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice_trm.h
  81. 3 3
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu.inc
  82. 3 3
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu_trm.inc
  83. 3 3
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar.inc
  84. 3 3
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar_trm.inc
  85. 3 3
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv.inc
  86. 3 3
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv_trm.inc
  87. 218 128
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter.h
  88. 1293 1365
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter_cfg.c
  89. 3 3
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter_cfg.h
  90. 217 127
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfittergnu.inc
  91. 217 127
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitteriar.inc
  92. 217 127
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitterrv.inc
  93. 4 4
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cymetadata.c
  94. 0 0
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/exported_symbols.txt
  95. 3 3
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/project.h
  96. 0 0
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/renamed_symbols.txt
  97. 140 140
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/SCSI2SD.cycdx
  98. 二進制
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/SCSI2SD.cydwr
  99. 二進制
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/SCSI2SD.cyfit
  100. 36 2
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/SCSI2SD.cyprj

+ 11 - 0
lib/SCSI2SD/CHANGELOG

@@ -1,6 +1,17 @@
 20150x0x		4.5
 	- Fix bug in SCSI MODE SENSE that returned the wrong mode type
 		- Fixes CDROM emulation
+	- Added selection delay parameter. This should be set to 1ms for older
+	SCSI1 hardware, or 0ms for SCSI2 and Mac Plus.
+	- Upgraded to wxWidgets 3.0.2
+	- Fixed stability/performance issue for sector sizes above 512
+	- Fixed bug that prevented the dvice working after "ejecting" a drive
+	- Upgraded to Cypress PSoC Creator 3.3
+	- Added experimental caching option. This provides a 2x speed up for
+	sequential single-sector writes. It is disabled by default.
+	- Disabled SCSI Disconnect support by default. There's now an option
+	in scsi2sd-util to enable it. It should be left off unless you have
+	a very good reason to enable it.
 
 20150813		4.4
 	- Added configuration option to allow SCSI2 mode. This option is OFF by

+ 26 - 3
lib/SCSI2SD/software/SCSI2SD/src/config.c

@@ -26,13 +26,14 @@
 #include "scsi.h"
 #include "scsiPhy.h"
 #include "disk.h"
+#include "trace.h"
 
 #include "../../include/scsi2sd.h"
 #include "../../include/hidpacket.h"
 
 #include <string.h>
 
-static const uint16_t FIRMWARE_VERSION = 0x0442;
+static const uint16_t FIRMWARE_VERSION = 0x0450;
 
 // 1 flash row
 static const uint8_t DEFAULT_CONFIG[256] =
@@ -64,7 +65,26 @@ static int usbInEpState;
 static int usbDebugEpState;
 static int usbReady;
 
-void configInit()
+static void initBoardConfig(BoardConfig* config) {
+	memcpy(
+		config,
+		(
+			CY_FLASH_BASE +
+			(CY_FLASH_SIZEOF_ARRAY * (size_t) SCSI_CONFIG_ARRAY) +
+			(CY_FLASH_SIZEOF_ROW * SCSI_CONFIG_BOARD_ROW)
+			),
+		sizeof(BoardConfig));
+
+	if (memcmp(config->magic, "BCFG", 4)) {
+		// Set a default from the deprecated flags, or 0 if
+		// there is no initial config.
+		config->flags = getConfigByIndex(0)->flagsDEPRECATED;
+
+		config->selectionDelay = 255; // auto
+	}
+}
+
+void configInit(BoardConfig* config)
 {
 	// The USB block will be powered by an internal 3.3V regulator.
 	// The PSoC must be operating between 4.6V and 5V for the regulator
@@ -90,6 +110,8 @@ void configInit()
 		CySetTemp();
 		CyWriteRowData(SCSI_CONFIG_ARRAY, SCSI_CONFIG_0_ROW, DEFAULT_CONFIG);
 	}
+
+	initBoardConfig(config);
 }
 
 static void
@@ -123,7 +145,7 @@ writeFlashCommand(const uint8_t* cmd, size_t cmdSize)
 	// Be very careful not to overwrite the bootloader or other
 	// code
 	if ((flashArray != SCSI_CONFIG_ARRAY) ||
-		(flashRow < SCSI_CONFIG_0_ROW) ||
+		(flashRow < SCSI_CONFIG_BOARD_ROW) ||
 		(flashRow >= SCSI_CONFIG_3_ROW + SCSI_CONFIG_ROWS))
 	{
 		uint8_t response[] = { CONFIG_STATUS_ERR};
@@ -324,6 +346,7 @@ void debugPoll()
 		hidBuffer[27] = scsiDev.lastSenseASC >> 8;
 		hidBuffer[28] = scsiDev.lastSenseASC;
 		hidBuffer[29] = scsiReadDBxPins();
+		hidBuffer[30] = LastTrace;
 
 		hidBuffer[58] = sdDev.capacity >> 24;
 		hidBuffer[59] = sdDev.capacity >> 16;

+ 1 - 1
lib/SCSI2SD/software/SCSI2SD/src/config.h

@@ -20,7 +20,7 @@
 #include "device.h"
 #include "scsi2sd.h"
 
-void configInit(void);
+void configInit(BoardConfig* config);
 void debugInit(void);
 void configPoll(void);
 void configSave(int scsiId, uint16_t byesPerSector);

+ 63 - 42
lib/SCSI2SD/software/SCSI2SD/src/disk.c

@@ -175,6 +175,8 @@ static void doWrite(uint32 lba, uint32 blocks)
 		CyDelay(10);
 	}
 
+	uint32_t bytesPerSector = scsiDev.target->liveCfg.bytesPerSector;
+
 	if (unlikely(blockDev.state & DISK_WP) ||
 		unlikely(scsiDev.target->cfg->deviceType == CONFIG_OPTICAL))
 
@@ -187,7 +189,7 @@ static void doWrite(uint32 lba, uint32 blocks)
 	else if (unlikely(((uint64) lba) + blocks >
 		getScsiCapacity(
 			scsiDev.target->cfg->sdSectorStart,
-			scsiDev.target->liveCfg.bytesPerSector,
+			bytesPerSector,
 			scsiDev.target->cfg->scsiSectors
 			)
 		))
@@ -199,19 +201,25 @@ static void doWrite(uint32 lba, uint32 blocks)
 	}
 	else
 	{
-		transfer.dir = TRANSFER_WRITE;
 		transfer.lba = lba;
 		transfer.blocks = blocks;
 		transfer.currentBlock = 0;
 		scsiDev.phase = DATA_OUT;
-		scsiDev.dataLen = scsiDev.target->liveCfg.bytesPerSector;
-		scsiDev.dataPtr = scsiDev.target->liveCfg.bytesPerSector;
+		scsiDev.dataLen = bytesPerSector;
+		scsiDev.dataPtr = bytesPerSector;
 
 		// No need for single-block writes atm.  Overhead of the
 		// multi-block write is minimal.
 		transfer.multiBlock = 1;
 
-		sdWriteMultiSectorPrep();
+
+		uint32_t sdLBA =
+			SCSISector2SD(
+				scsiDev.target->cfg->sdSectorStart,
+				bytesPerSector,
+				lba);
+		uint32_t sdBlocks = blocks * SDSectorsPerSCSISector(bytesPerSector);
+		sdWriteMultiSectorPrep(sdLBA, sdBlocks);
 	}
 }
 
@@ -237,14 +245,21 @@ static void doRead(uint32 lba, uint32 blocks)
 	}
 	else
 	{
-		transfer.dir = TRANSFER_READ;
 		transfer.lba = lba;
 		transfer.blocks = blocks;
 		transfer.currentBlock = 0;
 		scsiDev.phase = DATA_IN;
 		scsiDev.dataLen = 0; // No data yet
 
-		if ((blocks * SDSectorsPerSCSISector(scsiDev.target->liveCfg.bytesPerSector) == 1) ||
+		uint32_t bytesPerSector = scsiDev.target->liveCfg.bytesPerSector;
+		uint32_t sdSectorPerSCSISector = SDSectorsPerSCSISector(bytesPerSector);
+		uint32_t sdSectors =
+			blocks * sdSectorPerSCSISector;
+
+		if ((
+				(sdSectors == 1) &&
+				!(scsiDev.boardCfg.flags & CONFIG_ENABLE_CACHE)
+			) ||
 			unlikely(((uint64) lba) + blocks == capacity)
 			)
 		{
@@ -255,7 +270,14 @@ static void doRead(uint32 lba, uint32 blocks)
 		else
 		{
 			transfer.multiBlock = 1;
-			sdReadMultiSectorPrep();
+
+			uint32_t sdLBA =
+				SCSISector2SD(
+					scsiDev.target->cfg->sdSectorStart,
+					bytesPerSector,
+					lba);
+
+			sdReadMultiSectorPrep(sdLBA, sdSectors);
 		}
 	}
 }
@@ -515,22 +537,22 @@ int scsiDiskCommand()
 
 void scsiDiskPoll()
 {
+	uint32_t bytesPerSector = scsiDev.target->liveCfg.bytesPerSector;
+
 	if (scsiDev.phase == DATA_IN &&
 		transfer.currentBlock != transfer.blocks)
 	{
 		scsiEnterPhase(DATA_IN);
 
 		int totalSDSectors =
-			transfer.blocks *
-				SDSectorsPerSCSISector(scsiDev.target->liveCfg.bytesPerSector);
+			transfer.blocks * SDSectorsPerSCSISector(bytesPerSector);
 		uint32_t sdLBA =
 			SCSISector2SD(
 				scsiDev.target->cfg->sdSectorStart,
-				scsiDev.target->liveCfg.bytesPerSector,
+				bytesPerSector,
 				transfer.lba);
 
-		const int sdPerScsi =
-			SDSectorsPerSCSISector(scsiDev.target->liveCfg.bytesPerSector);
+		const int sdPerScsi = SDSectorsPerSCSISector(bytesPerSector);
 		int buffers = sizeof(scsiDev.data) / SD_SECTOR_SIZE;
 		int prep = 0;
 		int i = 0;
@@ -543,16 +565,18 @@ void scsiDiskPoll()
 			// Wait for the next DMA interrupt. It's beneficial to halt the
 			// processor to give the DMA controller more memory bandwidth to
 			// work with.
-			// We're optimistically assuming a race condition won't occur
-			// between these checks and the interrupt handers. The 1ms
-			// systick timer interrupt saves us on the event of a race.
-			int scsiBusy = scsiDMABusy();
-			int sdBusy = sdDMABusy();
+			int scsiBusy = 1;
+			int sdBusy = 1;
 			while (scsiBusy && sdBusy)
 			{
-				__WFI();
+				uint8_t intr = CyEnterCriticalSection();
 				scsiBusy = scsiDMABusy();
 				sdBusy = sdDMABusy();
+				if (scsiBusy && sdBusy)
+				{
+					__WFI();
+				}
+				CyExitCriticalSection(intr);
 			}
 
 			if (sdActive && !sdBusy && sdReadSectorDMAPoll())
@@ -591,7 +615,7 @@ void scsiDiskPoll()
 				int dmaBytes = SD_SECTOR_SIZE;
 				if ((i % sdPerScsi) == (sdPerScsi - 1))
 				{
-					dmaBytes = scsiDev.target->liveCfg.bytesPerSector % SD_SECTOR_SIZE;
+					dmaBytes = bytesPerSector % SD_SECTOR_SIZE;
 					if (dmaBytes == 0) dmaBytes = SD_SECTOR_SIZE;
 				}
 				scsiWriteDMA(&scsiDev.data[SD_SECTOR_SIZE * (i % buffers)], dmaBytes);
@@ -609,8 +633,7 @@ void scsiDiskPoll()
 	{
 		scsiEnterPhase(DATA_OUT);
 
-		const int sdPerScsi =
-			SDSectorsPerSCSISector(scsiDev.target->liveCfg.bytesPerSector);
+		const int sdPerScsi = SDSectorsPerSCSISector(bytesPerSector);
 		int totalSDSectors = transfer.blocks * sdPerScsi;
 		int buffers = sizeof(scsiDev.data) / SD_SECTOR_SIZE;
 		int prep = 0;
@@ -629,19 +652,21 @@ void scsiDiskPoll()
 			// Wait for the next DMA interrupt. It's beneficial to halt the
 			// processor to give the DMA controller more memory bandwidth to
 			// work with.
-			// We're optimistically assuming a race condition won't occur
-			// between these checks and the interrupt handers. The 1ms
-			// systick timer interrupt saves us on the event of a race.
-			int scsiBusy = scsiDMABusy();
-			int sdBusy = sdDMABusy();
+			int scsiBusy = 1;
+			int sdBusy = 1;
 			while (scsiBusy && sdBusy)
 			{
-				__WFI();
+				uint8_t intr = CyEnterCriticalSection();
 				scsiBusy = scsiDMABusy();
 				sdBusy = sdDMABusy();
+				if (scsiBusy && sdBusy)
+				{
+					__WFI();
+				}
+				CyExitCriticalSection(intr);
 			}
 
-			if (sdActive && !sdBusy && sdWriteSectorDMAPoll(i == (totalSDSectors - 1)))
+			if (sdActive && !sdBusy && sdWriteSectorDMAPoll())
 			{
 				sdActive = 0;
 				i++;
@@ -669,13 +694,14 @@ void scsiDiskPoll()
 				int dmaBytes = SD_SECTOR_SIZE;
 				if ((prep % sdPerScsi) == (sdPerScsi - 1))
 				{
-					dmaBytes = scsiDev.target->liveCfg.bytesPerSector % SD_SECTOR_SIZE;
+					dmaBytes = bytesPerSector % SD_SECTOR_SIZE;
 					if (dmaBytes == 0) dmaBytes = SD_SECTOR_SIZE;
 				}
 				scsiReadDMA(&scsiDev.data[SD_SECTOR_SIZE * (prep % buffers)], dmaBytes);
 				scsiActive = 1;
 			}
 			else if (
+				(scsiDev.boardCfg.flags & CONFIG_ENABLE_DISCONNECT) &&
 				(scsiActive == 0) &&
 				likely(!scsiDisconnected) &&
 				unlikely(scsiDev.discPriv) &&
@@ -761,7 +787,7 @@ void scsiDiskPoll()
 		if (scsiDev.phase == DATA_OUT)
 		{
 			if (scsiDev.parityError &&
-				(scsiDev.target->cfg->flags & CONFIG_ENABLE_PARITY) &&
+				(scsiDev.boardCfg.flags & CONFIG_ENABLE_PARITY) &&
 				(scsiDev.compatMode >= COMPAT_SCSI2))
 			{
 				scsiDev.target->sense.code = ABORTED_COMMAND;
@@ -784,24 +810,19 @@ void scsiDiskReset()
 	transfer.currentBlock = 0;
 
 	// Cancel long running commands!
-	if (unlikely(transfer.inProgress == 1))
+	if (
+		((scsiDev.boardCfg.flags & CONFIG_ENABLE_CACHE) == 0) ||
+			(transfer.multiBlock == 0)
+		)
 	{
-		if (transfer.dir == TRANSFER_WRITE)
-		{
-			sdCompleteWrite();
-		}
-		else
-		{
-			sdCompleteRead();
-		}
+		sdCompleteTransfer();
 	}
-	transfer.inProgress = 0;
+
 	transfer.multiBlock = 0;
 }
 
 void scsiDiskInit()
 {
-	transfer.inProgress = 0;
 	scsiDiskReset();
 
 	// Don't require the host to send us a START STOP UNIT command

+ 0 - 2
lib/SCSI2SD/software/SCSI2SD/src/disk.h

@@ -38,9 +38,7 @@ typedef struct
 
 typedef struct
 {
-	int dir;
 	int multiBlock; // True if we're using a multi-block SPI transfer.
-	int inProgress; // True if we need to call sdComplete{Read|Write}
 	uint32 lba;
 	uint32 blocks;
 

+ 26 - 10
lib/SCSI2SD/software/SCSI2SD/src/main.c

@@ -26,9 +26,7 @@
 #include "time.h"
 #include "trace.h"
 
-const char* Notice = "Copyright (C) 2014 Michael McMaster <michael@codesrc.com>";
-
-uint8_t testData[512];
+const char* Notice = "Copyright (C) 2015 Michael McMaster <michael@codesrc.com>";
 
 int main()
 {
@@ -43,16 +41,21 @@ int main()
 	// Set interrupt handlers.
 	scsiPhyInit();
 
-	configInit();
+	configInit(&scsiDev.boardCfg);
 	debugInit();
 
 	scsiInit();
 	scsiDiskInit();
 
-	uint32_t lastSDPoll = getTime_ms();
-	sdPoll();
-
+	// Optional bootup delay
+	int delaySeconds = 0;
+	while (delaySeconds < scsiDev.boardCfg.startupDelay) {
+		CyDelay(1000);
+		++delaySeconds;
+	}
 
+	uint32_t lastSDPoll = getTime_ms();
+	sdCheckPresent();
 
 
 	while (1)
@@ -62,22 +65,35 @@ int main()
 		scsiPoll();
 		scsiDiskPoll();
 		configPoll();
+		sdPoll();
 
 		if (unlikely(scsiDev.phase == BUS_FREE))
 		{
 			if (unlikely(elapsedTime_ms(lastSDPoll) > 200))
 			{
 				lastSDPoll = getTime_ms();
-				sdPoll();
+				sdCheckPresent();
 			}
 			else
 			{
 				// Wait for our 1ms timer to save some power.
 				// There's an interrupt on the SEL signal to ensure we respond
-				// quickly to any SCSI commands.
-				__WFI();
+				// quickly to any SCSI commands. The selection abort time is
+				// only 250us, and new SCSI-3 controllers time-out very
+				// not long after that, so we need to ensure we wake up quickly.
+				uint8_t interruptState = CyEnterCriticalSection();
+				if (!SCSI_ReadFilt(SCSI_Filt_SEL))
+				{
+					__WFI(); // Will wake on interrupt, regardless of mask
+				}
+				CyExitCriticalSection(interruptState);
 			}
 		}
+		else if (scsiDev.phase >= 0)
+		{
+			// don't waste time scanning SD cards while we're doing disk IO
+			lastSDPoll = getTime_ms();
+		}
 	}
 	return 0;
 }

+ 50 - 27
lib/SCSI2SD/software/SCSI2SD/src/scsi.c

@@ -213,7 +213,7 @@ static void process_DataOut()
 		scsiDev.dataPtr += len;
 
 		if (scsiDev.parityError &&
-			(scsiDev.target->cfg->flags & CONFIG_ENABLE_PARITY) &&
+			(scsiDev.boardCfg.flags & CONFIG_ENABLE_PARITY) &&
 			(scsiDev.compatMode >= COMPAT_SCSI2))
 		{
 			scsiDev.target->sense.code = ABORTED_COMMAND;
@@ -274,7 +274,7 @@ static void process_Command()
 		return;
 	}
 	else if (scsiDev.parityError &&
-		(cfg->flags & CONFIG_ENABLE_PARITY) &&
+		(scsiDev.boardCfg.flags & CONFIG_ENABLE_PARITY) &&
 		(scsiDev.compatMode >= COMPAT_SCSI2))
 	{
 		scsiDev.target->sense.code = ABORTED_COMMAND;
@@ -327,7 +327,7 @@ static void process_Command()
 	// on receiving the unit attention response on boot, thus
 	// triggering another unit attention condition.
 	else if (scsiDev.target->unitAttention &&
-		(cfg->flags & CONFIG_ENABLE_UNIT_ATTENTION))
+		(scsiDev.boardCfg.flags & CONFIG_ENABLE_UNIT_ATTENTION))
 	{
 		scsiDev.target->sense.code = UNIT_ATTENTION;
 		scsiDev.target->sense.asc = scsiDev.target->unitAttention;
@@ -520,14 +520,26 @@ static void enter_SelectionPhase()
 
 static void process_SelectionPhase()
 {
-	if (scsiDev.compatMode < COMPAT_SCSI2)
+	// Selection delays.
+	// Many SCSI1 samplers that use a 5380 chip need a delay of at least 1ms.
+	// The Mac Plus boot-time (ie. rom code) selection abort time
+	// is < 1ms and must have no delay (standard suggests 250ms abort time)
+	// Most newer SCSI2 hosts don't care either way.
+	if (scsiDev.boardCfg.selectionDelay == 255) // auto
+	{
+		if (scsiDev.compatMode < COMPAT_SCSI2)
+		{
+			CyDelay(1);
+		}
+	}
+	else if (scsiDev.boardCfg.selectionDelay != 0)
 	{
-		// Required for some older SCSI1 devices using a 5380 chip.
-		CyDelay(1);
+		CyDelay(scsiDev.boardCfg.selectionDelay);
 	}
 
 	int sel = SCSI_ReadFilt(SCSI_Filt_SEL);
 	int bsy = SCSI_ReadFilt(SCSI_Filt_BSY);
+	int io = SCSI_ReadPin(SCSI_In_IO);
 
 	// Only read these pins AFTER SEL and BSY - we don't want to catch them
 	// during a transition period.
@@ -546,11 +558,23 @@ static void process_SelectionPhase()
 			break;
 		}
 	}
-	if (!bsy && sel &&
+	sel &= SCSI_ReadFilt(SCSI_Filt_SEL);
+	bsy |= SCSI_ReadFilt(SCSI_Filt_BSY);
+	io |= SCSI_ReadPin(SCSI_In_IO);
+	if (!bsy && !io && sel &&
 		target &&
-		(goodParity || !(target->cfg->flags & CONFIG_ENABLE_PARITY) || !atnFlag) &&
+		(goodParity || !(scsiDev.boardCfg.flags & CONFIG_ENABLE_PARITY) || !atnFlag) &&
 		likely(maskBitCount <= 2))
 	{
+		// We've been selected!
+		// Assert BSY - Selection success!
+		// must happen within 200us (Selection abort time) of seeing our
+		// ID + SEL.
+		// (Note: the initiator will be waiting the "Selection time-out delay"
+		// for our BSY response, which is actually a very generous 250ms)
+		SCSI_SetPin(SCSI_Out_BSY);
+		ledOn();
+
 		scsiDev.target = target;
 
 		// Do we enter MESSAGE OUT immediately ? SCSI 1 and 2 standards says
@@ -558,6 +582,7 @@ static void process_SelectionPhase()
 		// The initiator should assert ATN with SEL.
 		scsiDev.atnFlag = atnFlag;
 
+
 		// Unit attention breaks many older SCSI hosts. Disable it completely
 		// for SCSI-1 (and older) hosts, regardless of our configured setting.
 		// Enable the compatability mode also as many SASI and SCSI1
@@ -567,7 +592,7 @@ static void process_SelectionPhase()
 			target->unitAttention = 0;
 			scsiDev.compatMode = COMPAT_SCSI1;
 		}
-		else if (!(target->cfg->flags & CONFIG_ENABLE_SCSI2))
+		else if (!(scsiDev.boardCfg.flags & CONFIG_ENABLE_SCSI2))
 		{
 			scsiDev.compatMode = COMPAT_SCSI1;
 		}
@@ -576,25 +601,8 @@ static void process_SelectionPhase()
 			scsiDev.compatMode = COMPAT_SCSI2;
 		}
 
-		// We've been selected!
-		// Assert BSY - Selection success!
-		// must happen within 200us (Selection abort time) of seeing our
-		// ID + SEL.
-		// (Note: the initiator will be waiting the "Selection time-out delay"
-		// for our BSY response, which is actually a very generous 250ms)
-		SCSI_SetPin(SCSI_Out_BSY);
-		ledOn();
-
 		scsiDev.selCount++;
 
-		// Wait until the end of the selection phase.
-		while (likely(!scsiDev.resetFlag))
-		{
-			if (!SCSI_ReadFilt(SCSI_Filt_SEL))
-			{
-				break;
-			}
-		}
 
 		// Save our initiator now that we're no longer in a time-critical
 		// section.
@@ -613,6 +621,15 @@ static void process_SelectionPhase()
 			}
 		}
 
+		// Wait until the end of the selection phase.
+		while (likely(!scsiDev.resetFlag))
+		{
+			if (!SCSI_ReadFilt(SCSI_Filt_SEL))
+			{
+				break;
+			}
+		}
+
 		scsiDev.phase = COMMAND;
 	}
 	else if (!sel)
@@ -631,7 +648,7 @@ static void process_MessageOut()
 	scsiDev.msgCount++;
 
 	if (scsiDev.parityError &&
-		(scsiDev.target->cfg->flags & CONFIG_ENABLE_PARITY) &&
+		(scsiDev.boardCfg.flags & CONFIG_ENABLE_PARITY) &&
 		(scsiDev.compatMode >= COMPAT_SCSI2))
 	{
 		// Skip the remaining message bytes, and then start the MESSAGE_OUT
@@ -720,6 +737,12 @@ static void process_MessageOut()
 	{
 		// Two byte message. We don't support these. read and discard.
 		scsiReadByte();
+
+		if (scsiDev.msgOut == 0x23) {
+			// Ignore Wide Residue. We're only 8 bit anyway.
+		} else {
+			messageReject();
+		}
 	}
 	else if (scsiDev.msgOut == 0x01)
 	{

+ 3 - 1
lib/SCSI2SD/software/SCSI2SD/src/scsi.h

@@ -97,10 +97,12 @@ typedef struct
 {
 	TargetState targets[MAX_SCSI_TARGETS];
 	TargetState* target;
+	BoardConfig boardCfg;
+
 
 	// Set to true (1) if the ATN flag was set, and we need to
 	// enter the MESSAGE_OUT phase.
-	volatile int atnFlag;
+	int atnFlag;
 
 	// Set to true (1) if the RST flag was set.
 	volatile int resetFlag;

+ 12 - 15
lib/SCSI2SD/software/SCSI2SD/src/scsiPhy.c

@@ -75,7 +75,7 @@ CY_ISR(scsiSelectionISR)
 {
 	// The SEL signal ISR ensures we wake up from a _WFI() (wait-for-interrupt)
 	// call in the main loop without waiting for our 1ms timer to
-	// expire. This is done for performance reasons only.
+	// expire. This is done to meet the 250us selection abort time.
 }
 
 uint8_t
@@ -104,9 +104,6 @@ scsiReadByte(void)
 	uint8_t val = scsiPhyRx();
 	scsiDev.parityError = scsiDev.parityError || SCSI_Parity_Error_Read();
 
-	trace(trace_spinTxComplete);
-	while (!(scsiPhyStatus() & SCSI_PHY_TX_COMPLETE) && likely(!scsiDev.resetFlag)) {}
-
 	return val;
 }
 
@@ -132,7 +129,6 @@ scsiReadPIO(uint8* data, uint32 count)
 		}
 	}
 	scsiDev.parityError = scsiDev.parityError || SCSI_Parity_Error_Read();
-	while (!(scsiPhyStatus() & SCSI_PHY_TX_COMPLETE) && likely(!scsiDev.resetFlag)) {}
 }
 
 static void
@@ -199,11 +195,6 @@ scsiReadDMAPoll()
 {
 	if (scsiTxDMAComplete && scsiRxDMAComplete)
 	{
-		// Wait until our scsi signals are consistent. This should only be
-		// a few cycles.
-		trace(trace_spinTxComplete);
-		while (!(scsiPhyStatus() & SCSI_PHY_TX_COMPLETE)) {}
-
 		if (likely(dmaSentCount == dmaTotalCount))
 		{
 			dmaInProgress = 0;
@@ -266,7 +257,7 @@ scsiWriteByte(uint8 value)
 
 	trace(trace_spinTxComplete);
 	while (!(scsiPhyStatus() & SCSI_PHY_TX_COMPLETE) && likely(!scsiDev.resetFlag)) {}
-	scsiPhyRxFifoClear();
+	scsiPhyRx();
 }
 
 static void
@@ -386,7 +377,7 @@ scsiWrite(const uint8_t* data, uint32_t count)
 		{
 			__WFI();
 		};
-		
+
 		if (count > alignedCount)
 		{
 			scsiWritePIO(data + alignedCount, count - alignedCount);
@@ -403,6 +394,12 @@ static inline void busSettleDelay(void)
 
 void scsiEnterPhase(int phase)
 {
+	// ANSI INCITS 362-2002 SPI-3 10.7.1:
+	// Phase changes are not allowed while REQ or ACK is asserted.
+	while (likely(!scsiDev.resetFlag) &&
+		(SCSI_ReadPin(SCSI_In_REQ) || SCSI_ReadFilt(SCSI_Filt_ACK))
+		) {}
+
 	int newPhase = phase > 0 ? phase : 0;
 	if (newPhase != SCSI_CTL_PHASE_Read())
 	{
@@ -427,7 +424,7 @@ void scsiPhyReset()
 		dmaTotalCount = 0;
 		CyDmaChSetRequest(scsiDmaTxChan, CY_DMA_CPU_TERM_CHAIN);
 		CyDmaChSetRequest(scsiDmaRxChan, CY_DMA_CPU_TERM_CHAIN);
-		
+
 		// CyDmaChGetRequest returns 0 for the relevant bit once the
 		// request is completed.
 		trace(trace_spinDMAReset);
@@ -484,7 +481,7 @@ static void scsiPhyInitDMA()
 				HI16(CYDEV_SRAM_BASE),
 				HI16(CYDEV_PERIPH_BASE)
 				);
-		
+
 		CyDmaChDisable(scsiDmaRxChan);
 		CyDmaChDisable(scsiDmaTxChan);
 
@@ -506,7 +503,7 @@ void scsiPhyInit()
 	SCSI_SEL_ISR_StartEx(scsiSelectionISR);
 
 	// Disable the glitch filter for ACK to improve performance.
-	if (getConfigByIndex(0)->flags & CONFIG_DISABLE_GLITCH)
+	if (scsiDev.boardCfg.flags & CONFIG_DISABLE_GLITCH)
 	{
 		SCSI_Glitch_Ctl_Write(1);
 		CY_SET_REG8(scsiTarget_datapath__D0_REG, 0);

+ 157 - 89
lib/SCSI2SD/software/SCSI2SD/src/sd.c

@@ -33,7 +33,13 @@
 // Global
 SdDevice sdDev;
 
-enum SD_IO_STATE { SD_DMA, SD_ACCEPTED, SD_BUSY, SD_IDLE };
+enum SD_CMD_STATE { CMD_STATE_IDLE, CMD_STATE_READ, CMD_STATE_WRITE };
+static int sdCmdState = CMD_STATE_IDLE;
+static uint32_t sdCmdNextLBA; // Only valid in CMD_STATE_READ or CMD_STATE_WRITE
+static uint32_t sdCmdTime;
+static uint32_t sdLastCmdState = CMD_STATE_IDLE;
+
+enum SD_IO_STATE { SD_DMA, SD_ACCEPTED, SD_IDLE };
 static int sdIOState = SD_IDLE;
 
 // Private DMA variables.
@@ -85,6 +91,7 @@ static uint8 sdCrc7(uint8* chr, uint8 cnt, uint8 crc)
 	return crc & 0x7F;
 }
 
+
 // Read and write 1 byte.
 static uint8_t sdSpiByte(uint8_t value)
 {
@@ -95,6 +102,34 @@ static uint8_t sdSpiByte(uint8_t value)
 	return SDCard_ReadRxData();
 }
 
+static void sdWaitWriteBusy()
+{
+	uint8 val;
+	do
+	{
+		val = sdSpiByte(0xFF);
+	} while (val != 0xFF);
+}
+
+static void sdPreCmdState(uint32_t newState)
+{
+	if (sdCmdState == CMD_STATE_READ)
+	{
+		sdCompleteRead();
+	}
+	else if (sdCmdState == CMD_STATE_WRITE)
+	{
+		sdCompleteWrite();
+	}
+	sdCmdState = CMD_STATE_IDLE;
+
+	if (sdLastCmdState != newState && newState != CMD_STATE_IDLE)
+	{
+		sdWaitWriteBusy();
+		sdLastCmdState = newState;
+	}
+}
+
 static uint16_t sdDoCommand(
 	uint8_t cmd,
 	uint32_t param,
@@ -172,7 +207,17 @@ static uint16_t sdDoCommand(
 	CyDmaChEnable(sdDMATxChan, 1);
 
 	trace(trace_spinSDDMA);
-	while (!(sdTxDMAComplete && sdRxDMAComplete)) { __WFI(); }
+	int allComplete = 0;
+	while (!allComplete)
+	{
+		uint8_t intr = CyEnterCriticalSection();
+		allComplete = sdTxDMAComplete && sdRxDMAComplete;
+		if (!allComplete)
+		{
+			__WFI();
+		}
+		CyExitCriticalSection(intr);
+	}
 
 	uint16_t response = sdSpiByte(0xFF); // Result code or stuff byte
 	if (unlikely(cmd == SD_STOP_TRANSMISSION))
@@ -218,34 +263,43 @@ static void sdClearStatus()
 }
 
 void
-sdReadMultiSectorPrep()
+sdReadMultiSectorPrep(uint32_t sdLBA, uint32_t sdSectors)
 {
-	uint8 v;
-	uint32 scsiLBA = (transfer.lba + transfer.currentBlock);
-	uint32 sdLBA =
-		SCSISector2SD(
-			scsiDev.target->cfg->sdSectorStart,
-			scsiDev.target->liveCfg.bytesPerSector,
-			scsiLBA);
+	uint32_t tmpNextLBA = sdLBA + sdSectors;
 
 	if (!sdDev.ccs)
 	{
 		sdLBA = sdLBA * SD_SECTOR_SIZE;
+		tmpNextLBA = tmpNextLBA * SD_SECTOR_SIZE;
 	}
-	v = sdCommandAndResponse(SD_READ_MULTIPLE_BLOCK, sdLBA);
-	if (unlikely(v))
-	{
-		scsiDiskReset();
-		sdClearStatus();
 
-		scsiDev.status = CHECK_CONDITION;
-		scsiDev.target->sense.code = HARDWARE_ERROR;
-		scsiDev.target->sense.asc = LOGICAL_UNIT_COMMUNICATION_FAILURE;
-		scsiDev.phase = STATUS;
+	if (sdCmdState == CMD_STATE_READ && sdCmdNextLBA == sdLBA)
+	{
+		// Well, that was lucky. We're already reading this data
+		sdCmdNextLBA = tmpNextLBA;
+		sdCmdTime = getTime_ms();
 	}
 	else
 	{
-		transfer.inProgress = 1;
+		sdPreCmdState(CMD_STATE_READ);
+
+		uint8_t v = sdCommandAndResponse(SD_READ_MULTIPLE_BLOCK, sdLBA);
+		if (unlikely(v))
+		{
+			scsiDiskReset();
+			sdClearStatus();
+
+			scsiDev.status = CHECK_CONDITION;
+			scsiDev.target->sense.code = HARDWARE_ERROR;
+			scsiDev.target->sense.asc = LOGICAL_UNIT_COMMUNICATION_FAILURE;
+			scsiDev.phase = STATUS;
+		}
+		else
+		{
+			sdCmdNextLBA = tmpNextLBA;
+			sdCmdState = CMD_STATE_READ;
+			sdCmdTime = getTime_ms();
+		}
 	}
 }
 
@@ -290,12 +344,12 @@ dmaReadSector(uint8_t* outputBuffer)
 		dmaRxTd[0] = CyDmaTdAllocate();
 		dmaRxTd[1] = CyDmaTdAllocate();
 		dmaTxTd = CyDmaTdAllocate();
-		
+
 		// Receive 512 bytes of data and then 2 bytes CRC.
 		CyDmaTdSetConfiguration(dmaRxTd[0], SD_SECTOR_SIZE, dmaRxTd[1], TD_INC_DST_ADR);
 		CyDmaTdSetConfiguration(dmaRxTd[1], 2, CY_DMA_DISABLE_TD, SD_RX_DMA__TD_TERMOUT_EN);
 		CyDmaTdSetAddress(dmaRxTd[1], LO16((uint32)SDCard_RXDATA_PTR), LO16((uint32)&discardBuffer));
-	
+
 		CyDmaTdSetConfiguration(dmaTxTd, SD_SECTOR_SIZE + 2, CY_DMA_DISABLE_TD, SD_TX_DMA__TD_TERMOUT_EN);
 		CyDmaTdSetAddress(dmaTxTd, LO16((uint32)&dummyBuffer), LO16((uint32)SDCard_TXDATA_PTR));
 
@@ -341,6 +395,8 @@ sdReadSectorDMAPoll()
 
 void sdReadSingleSectorDMA(uint32_t lba, uint8_t* outputBuffer)
 {
+	sdPreCmdState(CMD_STATE_READ);
+
 	uint8 v;
 	if (!sdDev.ccs)
 	{
@@ -370,7 +426,6 @@ sdReadMultiSectorDMA(uint8_t* outputBuffer)
 	dmaReadSector(outputBuffer);
 }
 
-
 void sdCompleteRead()
 {
 	if (unlikely(sdIOState != SD_IDLE))
@@ -381,13 +436,13 @@ void sdCompleteRead()
 		trace(trace_spinSDCompleteRead);
 		while (!sdReadSectorDMAPoll()) { /* spin */ }
 	}
-	
-	if (transfer.inProgress)
+
+
+	if (sdCmdState == CMD_STATE_READ)
 	{
-		transfer.inProgress = 0;
 		uint8 r1b = sdCommandAndResponse(SD_STOP_TRANSMISSION, 0);
 
-		if (unlikely(r1b))
+		if (unlikely(r1b) && (scsiDev.PHASE == DATA_IN))
 		{
 			scsiDev.status = CHECK_CONDITION;
 			scsiDev.target->sense.code = HARDWARE_ERROR;
@@ -399,15 +454,8 @@ void sdCompleteRead()
 	// R1b has an optional trailing "busy" signal, but we defer waiting on this.
 	// The next call so sdCommandAndResponse will wait for the busy state to
 	// clear.
-}
 
-static void sdWaitWriteBusy()
-{
-	uint8 val;
-	do
-	{
-		val = sdSpiByte(0xFF);
-	} while (val != 0xFF);
+	sdCmdState = CMD_STATE_IDLE;
 }
 
 void
@@ -422,7 +470,7 @@ sdWriteMultiSectorDMA(uint8_t* outputBuffer)
 		dmaTxTd[0] = CyDmaTdAllocate();
 		dmaTxTd[1] = CyDmaTdAllocate();
 		dmaTxTd[2] = CyDmaTdAllocate();
-		
+
 		// Transmit 512 bytes of data and then 2 bytes CRC, and then get the response byte
 		// We need to do this without stopping the clock
 		CyDmaTdSetConfiguration(dmaTxTd[0], 2, dmaTxTd[1], TD_INC_SRC_ADR);
@@ -464,7 +512,7 @@ sdWriteMultiSectorDMA(uint8_t* outputBuffer)
 }
 
 int
-sdWriteSectorDMAPoll(int sendStopToken)
+sdWriteSectorDMAPoll()
 {
 	if (sdRxDMAComplete && sdTxDMAComplete)
 	{
@@ -490,7 +538,7 @@ sdWriteSectorDMAPoll(int sendStopToken)
 				sdSpiByte(0xFD); // STOP TOKEN
 				sdWaitWriteBusy();
 
-				transfer.inProgress = 0;
+				sdCmdState = CMD_STATE_IDLE;
 				scsiDiskReset();
 				sdClearStatus();
 
@@ -506,25 +554,6 @@ sdWriteSectorDMAPoll(int sendStopToken)
 		}
 
 		if (sdIOState == SD_ACCEPTED)
-		{
-			// Wait while the SD card is busy
-			if (sdSpiByte(0xFF) == 0xFF)
-			{
-				if (sendStopToken)
-				{
-					sdIOState = SD_BUSY;
-					transfer.inProgress = 0;
-
-					sdSpiByte(0xFD); // STOP TOKEN
-				}
-				else
-				{
-					sdIOState = SD_IDLE;
-				}
-			}
-		}
-
-		if (sdIOState == SD_BUSY)
 		{
 			// Wait while the SD card is busy
 			if (sdSpiByte(0xFF) == 0xFF)
@@ -549,10 +578,20 @@ void sdCompleteWrite()
 		// Cancelling the transfer can't be done as we have no way to reset
 		// the SD card.
 		trace(trace_spinSDCompleteWrite);
-		while (!sdWriteSectorDMAPoll(1)) { /* spin */ }
+		while (!sdWriteSectorDMAPoll()) { /* spin */ }
 	}
 
-	if (transfer.inProgress && likely(scsiDev.phase == DATA_OUT))
+	if (sdCmdState == CMD_STATE_WRITE)
+	{
+		sdWaitWriteBusy();
+
+		sdSpiByte(0xFD); // STOP TOKEN
+
+		sdWaitWriteBusy();
+	}
+
+
+	if (likely(scsiDev.phase == DATA_OUT))
 	{
 		uint16_t r2 = sdDoCommand(SD_SEND_STATUS, 0, 0, 1);
 		if (unlikely(r2))
@@ -564,7 +603,12 @@ void sdCompleteWrite()
 			scsiDev.phase = STATUS;
 		}
 	}
-	transfer.inProgress = 0;
+	sdCmdState = CMD_STATE_IDLE;
+}
+
+void sdCompleteTransfer()
+{
+	sdPreCmdState(CMD_STATE_IDLE);
 }
 
 
@@ -763,6 +807,7 @@ int sdInit()
 	int i;
 	uint8 v;
 
+	sdCmdState = CMD_STATE_IDLE;
 	sdDev.version = 0;
 	sdDev.ccs = 0;
 	sdDev.capacity = 0;
@@ -845,52 +890,68 @@ out:
 
 }
 
-void sdWriteMultiSectorPrep()
+void sdWriteMultiSectorPrep(uint32_t sdLBA, uint32_t sdSectors)
 {
-	uint8 v;
+	uint32_t tmpNextLBA = sdLBA + sdSectors;
 
-	// Set the number of blocks to pre-erase by the multiple block write command
-	// We don't care about the response - if the command is not accepted, writes
-	// will just be a bit slower.
-	// Max 22bit parameter.
-	uint32_t sdBlocks =
-		transfer.blocks *
-			SDSectorsPerSCSISector(scsiDev.target->liveCfg.bytesPerSector);
-	uint32 blocks = sdBlocks > 0x7FFFFF ? 0x7FFFFF : sdBlocks;
-	sdCommandAndResponse(SD_APP_CMD, 0);
-	sdCommandAndResponse(SD_APP_SET_WR_BLK_ERASE_COUNT, blocks);
-
-	uint32 scsiLBA = (transfer.lba + transfer.currentBlock);
-	uint32 sdLBA =
-		SCSISector2SD(
-			scsiDev.target->cfg->sdSectorStart,
-			scsiDev.target->liveCfg.bytesPerSector,
-			scsiLBA);
 	if (!sdDev.ccs)
 	{
 		sdLBA = sdLBA * SD_SECTOR_SIZE;
+		tmpNextLBA = tmpNextLBA * SD_SECTOR_SIZE;
 	}
-	v = sdCommandAndResponse(SD_WRITE_MULTIPLE_BLOCK, sdLBA);
-	if (unlikely(v))
+
+	if (sdCmdState == CMD_STATE_WRITE && sdCmdNextLBA == sdLBA)
 	{
-		scsiDiskReset();
-		sdClearStatus();
-		scsiDev.status = CHECK_CONDITION;
-		scsiDev.target->sense.code = HARDWARE_ERROR;
-		scsiDev.target->sense.asc = LOGICAL_UNIT_COMMUNICATION_FAILURE;
-		scsiDev.phase = STATUS;
+		// Well, that was lucky. We're already writing this data
+		sdCmdNextLBA = tmpNextLBA;
+		sdCmdTime = getTime_ms();
 	}
 	else
 	{
-		transfer.inProgress = 1;
+		sdPreCmdState(CMD_STATE_WRITE);
+
+		// Set the number of blocks to pre-erase by the multiple block write
+		// command. We don't care about the response - if the command is not
+		// accepted, writes will just be a bit slower. Max 22bit parameter.
+		uint32 blocks = sdSectors > 0x7FFFFF ? 0x7FFFFF : sdSectors;
+		sdCommandAndResponse(SD_APP_CMD, 0);
+		sdCommandAndResponse(SD_APP_SET_WR_BLK_ERASE_COUNT, blocks);
+
+		uint8_t v = sdCommandAndResponse(SD_WRITE_MULTIPLE_BLOCK, sdLBA);
+		if (unlikely(v))
+		{
+			scsiDiskReset();
+			sdClearStatus();
+			scsiDev.status = CHECK_CONDITION;
+			scsiDev.target->sense.code = HARDWARE_ERROR;
+			scsiDev.target->sense.asc = LOGICAL_UNIT_COMMUNICATION_FAILURE;
+			scsiDev.phase = STATUS;
+		}
+		else
+		{
+			sdCmdTime = getTime_ms();
+			sdCmdNextLBA = tmpNextLBA;
+			sdCmdState = CMD_STATE_WRITE;
+		}
 	}
 }
 
 void sdPoll()
+{
+	if ((scsiDev.phase == BUS_FREE) &&
+		(sdCmdState != CMD_STATE_IDLE) &&
+		(elapsedTime_ms(sdCmdTime) >= 50))
+	{
+		sdPreCmdState(CMD_STATE_IDLE);
+	}
+}
+
+void sdCheckPresent()
 {
 	// Check if there's an SD card present.
 	if ((scsiDev.phase == BUS_FREE) &&
-		(sdIOState == SD_IDLE))
+		(sdIOState == SD_IDLE) &&
+		(sdCmdState == CMD_STATE_IDLE))
 	{
 		// The CS line is pulled high by the SD card.
 		// De-assert the line, and check if it's high.
@@ -916,6 +977,13 @@ void sdPoll()
 			{
 				blockDev.state |= DISK_PRESENT | DISK_INITIALISED;
 
+				// Always "start" the device. Many systems (eg. Apple System 7)
+				// won't respond properly to
+				// LOGICAL_UNIT_NOT_READY_INITIALIZING_COMMAND_REQUIRED sense
+				// code, even if they stopped it first with
+				// START STOP UNIT command.
+				blockDev.state |= DISK_STARTED;
+
 				if (!firstInit)
 				{
 					int i;

+ 5 - 5
lib/SCSI2SD/software/SCSI2SD/src/sd.h

@@ -68,17 +68,17 @@ int sdInit(void);
 
 #define sdDMABusy() (!(sdRxDMAComplete && sdTxDMAComplete))
 
-void sdWriteMultiSectorPrep(void);
+void sdWriteMultiSectorPrep(uint32_t sdLBA, uint32_t sdSectors);
 void sdWriteMultiSectorDMA(uint8_t* outputBuffer);
-int sdWriteSectorDMAPoll(int sendStopToken);
-void sdCompleteWrite(void);
+int sdWriteSectorDMAPoll();
 
-void sdReadMultiSectorPrep(void);
+void sdReadMultiSectorPrep(uint32_t sdLBA, uint32_t sdSectors);
 void sdReadMultiSectorDMA(uint8_t* outputBuffer);
 void sdReadSingleSectorDMA(uint32_t lba, uint8_t* outputBuffer);
 int sdReadSectorDMAPoll();
-void sdCompleteRead(void);
 
+void sdCompleteTransfer(void);
+void sdCheckPresent();
 void sdPoll();
 
 #endif

+ 2 - 0
lib/SCSI2SD/software/SCSI2SD/src/trace.c

@@ -46,6 +46,8 @@
 
 #define TPIU_FFCR_ENFCONT	(1 << 1)
 
+uint8_t LastTrace;
+
 void traceInit(void) {
 	// enable the trace module clocks
 	CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;

+ 4 - 2
lib/SCSI2SD/software/SCSI2SD/src/trace.h

@@ -15,6 +15,8 @@
 //	You should have received a copy of the GNU General Public License
 //	along with SCSI2SD.  If not, see <http://www.gnu.org/licenses/>.
 
+extern uint8_t LastTrace;
+
 // Trace event IDs to be output. 1 and 9 are generated as headers on ports 0
 // and 1 respectively, and should not be used.
 enum trace_event {
@@ -71,6 +73,6 @@ void traceInit(void);
 		ITM->PORT[1].u8 = ch;
 	}
 #else
-	#define trace(ev)
-	#define traceIrq(ev)
+	#define trace(ev) LastTrace = ev
+	#define traceIrq(ev) LastTrace = ev
 #endif

+ 5 - 0
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/Debug_Timer_Interrupt.c

@@ -20,6 +20,7 @@
 #include <CyLib.h>
 #include <Debug_Timer_Interrupt.h>
 
+
 #if !defined(Debug_Timer_Interrupt__REMOVED) /* Check for removal by optimization */
 
 /*******************************************************************************
@@ -158,6 +159,10 @@ void Debug_Timer_Interrupt_Stop(void)
 *******************************************************************************/
 CY_ISR(Debug_Timer_Interrupt_Interrupt)
 {
+    #ifdef Debug_Timer_Interrupt_INTERRUPT_INTERRUPT_CALLBACK
+        Debug_Timer_Interrupt_Interrupt_InterruptCallback();
+    #endif /* Debug_Timer_Interrupt_INTERRUPT_INTERRUPT_CALLBACK */ 
+
     /*  Place your Interrupt code here. */
     /* `#START Debug_Timer_Interrupt_Interrupt` */
 

+ 5 - 0
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RST_ISR.c

@@ -20,6 +20,7 @@
 #include <CyLib.h>
 #include <SCSI_RST_ISR.h>
 
+
 #if !defined(SCSI_RST_ISR__REMOVED) /* Check for removal by optimization */
 
 /*******************************************************************************
@@ -158,6 +159,10 @@ void SCSI_RST_ISR_Stop(void)
 *******************************************************************************/
 CY_ISR(SCSI_RST_ISR_Interrupt)
 {
+    #ifdef SCSI_RST_ISR_INTERRUPT_INTERRUPT_CALLBACK
+        SCSI_RST_ISR_Interrupt_InterruptCallback();
+    #endif /* SCSI_RST_ISR_INTERRUPT_INTERRUPT_CALLBACK */ 
+
     /*  Place your Interrupt code here. */
     /* `#START SCSI_RST_ISR_Interrupt` */
 

+ 5 - 0
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RX_DMA_COMPLETE.c

@@ -20,6 +20,7 @@
 #include <CyLib.h>
 #include <SCSI_RX_DMA_COMPLETE.h>
 
+
 #if !defined(SCSI_RX_DMA_COMPLETE__REMOVED) /* Check for removal by optimization */
 
 /*******************************************************************************
@@ -158,6 +159,10 @@ void SCSI_RX_DMA_COMPLETE_Stop(void)
 *******************************************************************************/
 CY_ISR(SCSI_RX_DMA_COMPLETE_Interrupt)
 {
+    #ifdef SCSI_RX_DMA_COMPLETE_INTERRUPT_INTERRUPT_CALLBACK
+        SCSI_RX_DMA_COMPLETE_Interrupt_InterruptCallback();
+    #endif /* SCSI_RX_DMA_COMPLETE_INTERRUPT_INTERRUPT_CALLBACK */ 
+
     /*  Place your Interrupt code here. */
     /* `#START SCSI_RX_DMA_COMPLETE_Interrupt` */
 

+ 5 - 0
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_SEL_ISR.c

@@ -20,6 +20,7 @@
 #include <CyLib.h>
 #include <SCSI_SEL_ISR.h>
 
+
 #if !defined(SCSI_SEL_ISR__REMOVED) /* Check for removal by optimization */
 
 /*******************************************************************************
@@ -158,6 +159,10 @@ void SCSI_SEL_ISR_Stop(void)
 *******************************************************************************/
 CY_ISR(SCSI_SEL_ISR_Interrupt)
 {
+    #ifdef SCSI_SEL_ISR_INTERRUPT_INTERRUPT_CALLBACK
+        SCSI_SEL_ISR_Interrupt_InterruptCallback();
+    #endif /* SCSI_SEL_ISR_INTERRUPT_INTERRUPT_CALLBACK */ 
+
     /*  Place your Interrupt code here. */
     /* `#START SCSI_SEL_ISR_Interrupt` */
 

+ 5 - 0
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_TX_DMA_COMPLETE.c

@@ -20,6 +20,7 @@
 #include <CyLib.h>
 #include <SCSI_TX_DMA_COMPLETE.h>
 
+
 #if !defined(SCSI_TX_DMA_COMPLETE__REMOVED) /* Check for removal by optimization */
 
 /*******************************************************************************
@@ -158,6 +159,10 @@ void SCSI_TX_DMA_COMPLETE_Stop(void)
 *******************************************************************************/
 CY_ISR(SCSI_TX_DMA_COMPLETE_Interrupt)
 {
+    #ifdef SCSI_TX_DMA_COMPLETE_INTERRUPT_INTERRUPT_CALLBACK
+        SCSI_TX_DMA_COMPLETE_Interrupt_InterruptCallback();
+    #endif /* SCSI_TX_DMA_COMPLETE_INTERRUPT_INTERRUPT_CALLBACK */ 
+
     /*  Place your Interrupt code here. */
     /* `#START SCSI_TX_DMA_COMPLETE_Interrupt` */
 

+ 5 - 0
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_RX_DMA_COMPLETE.c

@@ -20,6 +20,7 @@
 #include <CyLib.h>
 #include <SD_RX_DMA_COMPLETE.h>
 
+
 #if !defined(SD_RX_DMA_COMPLETE__REMOVED) /* Check for removal by optimization */
 
 /*******************************************************************************
@@ -158,6 +159,10 @@ void SD_RX_DMA_COMPLETE_Stop(void)
 *******************************************************************************/
 CY_ISR(SD_RX_DMA_COMPLETE_Interrupt)
 {
+    #ifdef SD_RX_DMA_COMPLETE_INTERRUPT_INTERRUPT_CALLBACK
+        SD_RX_DMA_COMPLETE_Interrupt_InterruptCallback();
+    #endif /* SD_RX_DMA_COMPLETE_INTERRUPT_INTERRUPT_CALLBACK */ 
+
     /*  Place your Interrupt code here. */
     /* `#START SD_RX_DMA_COMPLETE_Interrupt` */
 

+ 5 - 0
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_TX_DMA_COMPLETE.c

@@ -20,6 +20,7 @@
 #include <CyLib.h>
 #include <SD_TX_DMA_COMPLETE.h>
 
+
 #if !defined(SD_TX_DMA_COMPLETE__REMOVED) /* Check for removal by optimization */
 
 /*******************************************************************************
@@ -158,6 +159,10 @@ void SD_TX_DMA_COMPLETE_Stop(void)
 *******************************************************************************/
 CY_ISR(SD_TX_DMA_COMPLETE_Interrupt)
 {
+    #ifdef SD_TX_DMA_COMPLETE_INTERRUPT_INTERRUPT_CALLBACK
+        SD_TX_DMA_COMPLETE_Interrupt_InterruptCallback();
+    #endif /* SD_TX_DMA_COMPLETE_INTERRUPT_INTERRUPT_CALLBACK */ 
+
     /*  Place your Interrupt code here. */
     /* `#START SD_TX_DMA_COMPLETE_Interrupt` */
 

+ 46 - 1
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_audio.c

@@ -17,6 +17,7 @@
 
 #include "USBFS.h"
 
+
 #if defined(USBFS_ENABLE_AUDIO_CLASS)
 
 #include "USBFS_audio.h"
@@ -124,6 +125,11 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
                 /* `#START AUDIO_READ_REQUESTS` Place other request handler here */
 
                 /* `#END` */
+                
+                #ifdef USBFS_DISPATCH_AUDIO_CLASS_AUDIO_READ_REQUESTS_CALLBACK
+                    USBFS_DispatchAUDIOClass_AUDIO_READ_REQUESTS_Callback();
+                #endif /* USBFS_DISPATCH_AUDIO_CLASS_AUDIO_READ_REQUESTS_CALLBACK */
+
                     break;
                 default:
                     break;
@@ -142,7 +148,11 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
 
                         /* `#END` */
 
-                         /* Entity ID Control Selector is MUTE */
+                        #ifdef USBFS_DISPATCH_AUDIO_CLASS_MUTE_CONTROL_GET_REQUEST_CALLBACK
+                            USBFS_DispatchAUDIOClass_MUTE_CONTROL_GET_REQUEST_Callback();
+                        #endif /* USBFS_DISPATCH_AUDIO_CLASS_MUTE_CONTROL_GET_REQUEST_CALLBACK */
+
+                        /* Entity ID Control Selector is MUTE */
                         USBFS_currentTD.wCount = 1u;
                         USBFS_currentTD.pData  = &USBFS_currentMute;
                         requestHandled   = USBFS_InitControlRead();
@@ -153,6 +163,10 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
 
                         /* `#END` */
 
+                        #ifdef USBFS_DISPATCH_AUDIO_CLASS_VOLUME_CONTROL_GET_REQUEST_CALLBACK
+                            USBFS_DispatchAUDIOClass_VOLUME_CONTROL_GET_REQUEST_Callback();
+                        #endif /* USBFS_DISPATCH_AUDIO_CLASS_VOLUME_CONTROL_GET_REQUEST_CALLBACK */
+
                         /* Entity ID Control Selector is VOLUME, */
                         USBFS_currentTD.wCount = USBFS_VOLUME_LEN;
                         USBFS_currentTD.pData  = USBFS_currentVolume;
@@ -163,6 +177,10 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
                         /* `#START OTHER_GET_CUR_REQUESTS` Place other request handler here */
 
                         /* `#END` */
+
+                        #ifdef USBFS_DISPATCH_AUDIO_CLASS_OTHER_GET_CUR_REQUESTS_CALLBACK
+                            USBFS_DispatchAUDIOClass_OTHER_GET_CUR_REQUESTS_Callback();
+                        #endif /* USBFS_DISPATCH_AUDIO_CLASS_OTHER_GET_CUR_REQUESTS_CALLBACK */
                     }
                     break;
                 case USBFS_GET_MIN:    /* GET_MIN */
@@ -205,6 +223,11 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
                 /* `#START AUDIO_WRITE_REQUESTS` Place other request handler here */
 
                 /* `#END` */
+
+                #ifdef USBFS_DISPATCH_AUDIO_CLASS_AUDIO_WRITE_REQUESTS_CALLBACK
+                    USBFS_DispatchAUDIOClass_AUDIO_WRITE_REQUESTS_Callback();
+                #endif /* USBFS_DISPATCH_AUDIO_CLASS_AUDIO_WRITE_REQUESTS_CALLBACK */
+
                     break;
                 default:
                     break;
@@ -237,6 +260,11 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
                 /* `#START AUDIO_SAMPLING_FREQ_REQUESTS` Place other request handler here */
 
                 /* `#END` */
+
+                #ifdef USBFS_DISPATCH_AUDIO_CLASS_AUDIO_SAMPLING_FREQ_REQUESTS_CALLBACK
+                    USBFS_DispatchAUDIOClass_AUDIO_SAMPLING_FREQ_REQUESTS_Callback();
+                #endif /* USBFS_DISPATCH_AUDIO_CLASS_AUDIO_SAMPLING_FREQ_REQUESTS_CALLBACK */
+
                     break;
                 default:
                     break;
@@ -255,6 +283,10 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
 
                         /* `#END` */
 
+                        #ifdef USBFS_DISPATCH_AUDIO_CLASS_MUTE_SET_REQUEST_CALLBACK
+                            USBFS_DispatchAUDIOClass_MUTE_SET_REQUEST_Callback();
+                        #endif /* USBFS_DISPATCH_AUDIO_CLASS_MUTE_SET_REQUEST_CALLBACK */
+
                         /* Entity ID Control Selector is MUTE */
                         USBFS_currentTD.wCount = 1u;
                         USBFS_currentTD.pData  = &USBFS_currentMute;
@@ -266,6 +298,10 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
 
                         /* `#END` */
 
+                        #ifdef USBFS_DISPATCH_AUDIO_CLASS_VOLUME_CONTROL_SET_REQUEST_CALLBACK
+                            USBFS_DispatchAUDIOClass_VOLUME_CONTROL_SET_REQUEST_Callback();
+                        #endif /* USBFS_DISPATCH_AUDIO_CLASS_VOLUME_CONTROL_SET_REQUEST_CALLBACK */
+
                         /* Entity ID Control Selector is VOLUME */
                         USBFS_currentTD.wCount = USBFS_VOLUME_LEN;
                         USBFS_currentTD.pData  = USBFS_currentVolume;
@@ -276,12 +312,21 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
                         /* `#START OTHER_SET_CUR_REQUESTS` Place other request handler here */
 
                         /* `#END` */
+
+                        #ifdef USBFS_DISPATCH_AUDIO_CLASS_OTHER_SET_CUR_REQUESTS_CALLBACK
+                            USBFS_DispatchAUDIOClass_OTHER_SET_CUR_REQUESTS_Callback();
+                        #endif /* USBFS_DISPATCH_AUDIO_CLASS_OTHER_SET_CUR_REQUESTS_CALLBACK */
                     }
                 #endif /*  USBFS_ENABLE_AUDIO_STREAMING */
 
                 /* `#START AUDIO_CONTROL_SEL_REQUESTS` Place other request handler here */
 
                 /* `#END` */
+
+                #ifdef USBFS_DISPATCH_AUDIO_CLASS_AUDIO_CONTROL_SEL_REQUESTS_CALLBACK
+                    USBFS_DispatchAUDIOClass_AUDIO_CONTROL_SEL_REQUESTS_Callback();
+                #endif /* USBFS_DISPATCH_AUDIO_CLASS_AUDIO_CONTROL_SEL_REQUESTS_CALLBACK */
+
                     break;
                 default:
                     break;

+ 9 - 0
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_cdc.c

@@ -23,6 +23,7 @@
 #include "USBFS_pvt.h"
 
 
+
 /***************************************
 *    CDC Variables
 ***************************************/
@@ -104,6 +105,10 @@ uint8 USBFS_DispatchCDCClassRqst(void)
 
             /* `#END` */
 
+            #ifdef USBFS_DISPATCH_CDC_CLASS_CDC_READ_REQUESTS_CALLBACK
+                USBFS_DispatchCDCClass_CDC_READ_REQUESTS_Callback();
+            #endif /* USBFS_DISPATCH_CDC_CLASS_CDC_READ_REQUESTS_CALLBACK */
+
             default:    /* requestHandled is initialized as FALSE by default */
                 break;
         }
@@ -130,6 +135,10 @@ uint8 USBFS_DispatchCDCClassRqst(void)
 
             /* `#END` */
 
+            #ifdef USBFS_DISPATCH_CDC_CLASS_CDC_WRITE_REQUESTS_CALLBACK
+                USBFS_DispatchCDCClass_CDC_WRITE_REQUESTS_Callback();
+            #endif /* USBFS_DISPATCH_CDC_CLASS_CDC_WRITE_REQUESTS_CALLBACK */
+
             default:    /* requestHandled is initialized as FALSE by default */
                 break;
         }

+ 5 - 0
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_cls.c

@@ -21,6 +21,7 @@
 #include "USBFS_pvt.h"
 
 
+
 /***************************************
 * User Implemented Class Driver Declarations.
 ***************************************/
@@ -89,6 +90,10 @@ uint8 USBFS_DispatchClassRqst(void)
 
     /* `#END` */
 
+    #ifdef USBFS_DISPATCH_CLASS_RQST_CALLBACK
+        USBFS_DispatchClassRqst_Callback();
+    #endif /* USBFS_DISPATCH_CLASS_RQST_CALLBACK */
+
     return(requestHandled);
 }
 

+ 8 - 1
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_drv.c

@@ -18,6 +18,7 @@
 #include "USBFS_pvt.h"
 
 
+
 /***************************************
 * Global data allocation
 ***************************************/
@@ -68,7 +69,10 @@ CY_ISR(USBFS_EP_0_ISR)
     uint8 bRegTemp;
     uint8 modifyReg;
 
-
+    #ifdef USBFS_EP_0_ISR_ENTRY_CALLBACK
+        USBFS_EP_0_ISR_EntryCallback();
+    #endif /* USBFS_EP_0_ISR_ENTRY_CALLBACK */
+    
     bRegTemp = CY_GET_REG8(USBFS_EP0_CR_PTR);
     if ((bRegTemp & USBFS_MODE_ACKD) != 0u)
     {
@@ -128,6 +132,9 @@ CY_ISR(USBFS_EP_0_ISR)
             }
         }
     }
+    #ifdef USBFS_EP_0_ISR_EXIT_CALLBACK
+        USBFS_EP_0_ISR_ExitCallback();
+    #endif /* USBFS_EP_0_ISR_EXIT_CALLBACK */
 }
 
 

+ 101 - 0
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_episr.c

@@ -16,6 +16,7 @@
 
 #include "USBFS.h"
 #include "USBFS_pvt.h"
+
 #if (defined(USBFS_ENABLE_MIDI_STREAMING) && (USBFS_ENABLE_MIDI_API != 0u))
     #include "USBFS_midi.h"
 #endif /* (defined(USBFS_ENABLE_MIDI_STREAMING) && (USBFS_ENABLE_MIDI_API != 0u)) */
@@ -57,6 +58,10 @@
             uint8 int_en;
         #endif /* USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3 */
 
+        #ifdef USBFS_EP_1_ISR_ENTRY_CALLBACK
+            USBFS_EP_1_ISR_EntryCallback();
+        #endif /* USBFS_EP_1_ISR_ENTRY_CALLBACK */
+
         /* `#START EP1_USER_CODE` Place your code here */
 
         /* `#END` */
@@ -90,6 +95,10 @@
 
         /* `#END` */
 
+        #ifdef USBFS_EP_1_ISR_EXIT_CALLBACK
+            USBFS_EP_1_ISR_ExitCallback();
+        #endif /* USBFS_EP_1_ISR_EXIT_CALLBACK */
+
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)
             EA = int_en;
@@ -122,6 +131,10 @@
             uint8 int_en;
         #endif /* USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3 */
 
+        #ifdef USBFS_EP_2_ISR_ENTRY_CALLBACK
+            USBFS_EP_2_ISR_EntryCallback();
+        #endif /* USBFS_EP_2_ISR_ENTRY_CALLBACK */
+
         /* `#START EP2_USER_CODE` Place your code here */
 
         /* `#END` */
@@ -155,6 +168,10 @@
 
         /* `#END` */
 
+        #ifdef USBFS_EP_2_ISR_EXIT_CALLBACK
+            USBFS_EP_2_ISR_ExitCallback();
+        #endif /* USBFS_EP_2_ISR_EXIT_CALLBACK */
+        
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)
             EA = int_en;
@@ -187,6 +204,10 @@
             uint8 int_en;
         #endif /* USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3 */
 
+        #ifdef USBFS_EP_3_ISR_ENTRY_CALLBACK
+            USBFS_EP_3_ISR_EntryCallback();
+        #endif /* USBFS_EP_3_ISR_ENTRY_CALLBACK */
+
         /* `#START EP3_USER_CODE` Place your code here */
 
         /* `#END` */
@@ -220,6 +241,10 @@
 
         /* `#END` */
 
+        #ifdef USBFS_EP_3_ISR_EXIT_CALLBACK
+            USBFS_EP_3_ISR_ExitCallback();
+        #endif /* USBFS_EP_3_ISR_EXIT_CALLBACK */
+
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)
             EA = int_en;
@@ -252,6 +277,10 @@
             uint8 int_en;
         #endif /* CY_PSOC3 & USBFS_ISR_SERVICE_MIDI_OUT  */
 
+        #ifdef USBFS_EP_4_ISR_ENTRY_CALLBACK
+            USBFS_EP_4_ISR_EntryCallback();
+        #endif /* USBFS_EP_4_ISR_ENTRY_CALLBACK */
+
         /* `#START EP4_USER_CODE` Place your code here */
 
         /* `#END` */
@@ -285,6 +314,10 @@
 
         /* `#END` */
 
+        #ifdef USBFS_EP_4_ISR_EXIT_CALLBACK
+            USBFS_EP_4_ISR_ExitCallback();
+        #endif /* USBFS_EP_4_ISR_EXIT_CALLBACK */
+
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)
             EA = int_en;
@@ -317,6 +350,10 @@
             uint8 int_en;
         #endif /* CY_PSOC3 & USBFS_ISR_SERVICE_MIDI_OUT  */
 
+        #ifdef USBFS_EP_5_ISR_ENTRY_CALLBACK
+            USBFS_EP_5_ISR_EntryCallback();
+        #endif /* USBFS_EP_5_ISR_ENTRY_CALLBACK */
+
         /* `#START EP5_USER_CODE` Place your code here */
 
         /* `#END` */
@@ -350,6 +387,10 @@
 
         /* `#END` */
 
+        #ifdef USBFS_EP_5_ISR_EXIT_CALLBACK
+            USBFS_EP_5_ISR_ExitCallback();
+        #endif /* USBFS_EP_5_ISR_EXIT_CALLBACK */
+
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)
             EA = int_en;
@@ -381,6 +422,10 @@
             uint8 int_en;
         #endif /* CY_PSOC3 & USBFS_ISR_SERVICE_MIDI_OUT  */
 
+        #ifdef USBFS_EP_6_ISR_ENTRY_CALLBACK
+            USBFS_EP_6_ISR_EntryCallback();
+        #endif /* USBFS_EP_6_ISR_ENTRY_CALLBACK */
+
         /* `#START EP6_USER_CODE` Place your code here */
 
         /* `#END` */
@@ -414,6 +459,10 @@
 
         /* `#END` */
 
+        #ifdef USBFS_EP_6_ISR_EXIT_CALLBACK
+            USBFS_EP_6_ISR_ExitCallback();
+        #endif /* USBFS_EP_6_ISR_EXIT_CALLBACK */
+
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)
             EA = int_en;
@@ -446,6 +495,10 @@
             uint8 int_en;
         #endif /* CY_PSOC3 & USBFS_ISR_SERVICE_MIDI_OUT  */
 
+        #ifdef USBFS_EP_7_ISR_ENTRY_CALLBACK
+            USBFS_EP_7_ISR_EntryCallback();
+        #endif /* USBFS_EP_7_ISR_ENTRY_CALLBACK */
+
         /* `#START EP7_USER_CODE` Place your code here */
 
         /* `#END` */
@@ -479,6 +532,10 @@
 
         /* `#END` */
 
+        #ifdef USBFS_EP_7_ISR_EXIT_CALLBACK
+            USBFS_EP_7_ISR_ExitCallback();
+        #endif /* USBFS_EP_7_ISR_EXIT_CALLBACK */
+
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)
             EA = int_en;
@@ -511,6 +568,10 @@
             uint8 int_en;
         #endif /* CY_PSOC3 & USBFS_ISR_SERVICE_MIDI_OUT  */
 
+        #ifdef USBFS_EP_8_ISR_ENTRY_CALLBACK
+            USBFS_EP_8_ISR_EntryCallback();
+        #endif /* USBFS_EP_8_ISR_ENTRY_CALLBACK */
+
         /* `#START EP8_USER_CODE` Place your code here */
 
         /* `#END` */
@@ -544,6 +605,10 @@
 
         /* `#END` */
 
+        #ifdef USBFS_EP_8_ISR_EXIT_CALLBACK
+            USBFS_EP_8_ISR_ExitCallback();
+        #endif /* USBFS_EP_8_ISR_EXIT_CALLBACK */
+
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)
             EA = int_en;
@@ -569,6 +634,10 @@
 *******************************************************************************/
 CY_ISR(USBFS_SOF_ISR)
 {
+    #ifdef USBFS_SOF_ISR_INTERRUPT_CALLBACK
+        USBFS_SOF_ISR_InterruptCallback();
+    #endif /* USBFS_SOF_ISR_INTERRUPT_CALLBACK */
+
     /* `#START SOF_USER_CODE` Place your code here */
 
     /* `#END` */
@@ -592,11 +661,19 @@ CY_ISR(USBFS_SOF_ISR)
 *******************************************************************************/
 CY_ISR(USBFS_BUS_RESET_ISR)
 {
+    #ifdef USBFS_BUS_RESET_ISR_ENTRY_CALLBACK
+        USBFS_BUS_RESET_ISR_EntryCallback();
+    #endif /* USBFS_BUS_RESET_ISR_ENTRY_CALLBACK */
+
     /* `#START BUS_RESET_USER_CODE` Place your code here */
 
     /* `#END` */
 
     USBFS_ReInitComponent();
+
+    #ifdef USBFS_BUS_RESET_ISR_EXIT_CALLBACK
+        USBFS_BUS_RESET_ISR_ExitCallback();
+    #endif /* USBFS_BUS_RESET_ISR_EXIT_CALLBACK */    
 }
 
 
@@ -627,6 +704,10 @@ CY_ISR(USBFS_BUS_RESET_ISR)
         uint8 ep = USBFS_EP1;
         uint8 ptr = 0u;
 
+        #ifdef USBFS_ARB_ISR_ENTRY_CALLBACK
+            USBFS_ARB_ISR_EntryCallback();
+        #endif /* USBFS_ARB_ISR_ENTRY_CALLBACK */
+
         /* `#START ARB_BEGIN_USER_CODE` Place your code here */
 
         /* `#END` */
@@ -687,6 +768,10 @@ CY_ISR(USBFS_BUS_RESET_ISR)
 
                 /* `#END` */
 
+                #ifdef USBFS_ARB_ISR_CALLBACK
+                    USBFS_ARB_ISR_Callback();
+                #endif /* USBFS_ARB_ISR_CALLBACK */
+
                 CY_SET_REG8((reg8 *)(USBFS_ARB_EP1_SR_IND + ptr), ep_status);   /* Clear Serviced events */
             }
             ptr += USBFS_EPX_CNTX_ADDR_OFFSET;               /* prepare pointer for next EP */
@@ -697,6 +782,10 @@ CY_ISR(USBFS_BUS_RESET_ISR)
         /* `#START ARB_END_USER_CODE` Place your code here */
 
         /* `#END` */
+
+        #ifdef USBFS_ARB_ISR_EXIT_CALLBACK
+            USBFS_ARB_ISR_ExitCallback();
+        #endif /* USBFS_ARB_ISR_EXIT_CALLBACK */
     }
 
 #endif /*  USBFS_EP_MM */
@@ -724,6 +813,10 @@ CY_ISR(USBFS_BUS_RESET_ISR)
         uint8 ep = USBFS_EP1;
         uint8 ptr = 0u;
 
+        #ifdef USBFS_EP_DMA_DONE_ISR_ENTRY_CALLBACK
+            USBFS_EP_DMA_DONE_ISR_EntryCallback();
+        #endif /* USBFS_EP_DMA_DONE_ISR_ENTRY_CALLBACK */
+
         /* `#START EP_DMA_DONE_BEGIN_USER_CODE` Place your code here */
 
         /* `#END` */
@@ -747,6 +840,10 @@ CY_ISR(USBFS_BUS_RESET_ISR)
 
                         /* `#END` */
 
+                        #ifdef USBFS_EP_DMA_DONE_ISR_CALLBACK
+                            USBFS_EP_DMA_DONE_ISR_Callback();
+                        #endif /* USBFS_EP_DMA_DONE_ISR_CALLBACK */
+
                         CY_SET_REG8((reg8 *)(USBFS_ARB_RW1_WA_MSB_IND + ptr), 0x00u);
                         /* repeat 2 last bytes to prefetch endpoint area */
                         CY_SET_REG8((reg8 *)(USBFS_ARB_RW1_WA_IND + ptr),
@@ -773,6 +870,10 @@ CY_ISR(USBFS_BUS_RESET_ISR)
         /* `#START EP_DMA_DONE_END_USER_CODE` Place your code here */
 
         /* `#END` */
+
+        #ifdef USBFS_EP_DMA_DONE_ISR_EXIT_CALLBACK
+            USBFS_EP_DMA_DONE_ISR_ExitCallback();
+        #endif /* USBFS_EP_DMA_DONE_ISR_EXIT_CALLBACK */
     }
 #endif /* ((USBFS_EP_MM == USBFS__EP_DMAAUTO) && (USBFS_EP_DMA_AUTO_OPT == 0u)) */
 

+ 6 - 0
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_hid.c

@@ -25,6 +25,7 @@
 #include "USBFS_hid.h"
 
 
+
 /***************************************
 *    HID Variables
 ***************************************/
@@ -375,6 +376,11 @@ void USBFS_FindReport(void)
     /* `#START HID_FINDREPORT` Place custom handling here */
 
     /* `#END` */
+    
+    #ifdef USBFS_FIND_REPORT_CALLBACK
+        USBFS_FindReport_Callback();
+    #endif /* USBFS_FIND_REPORT_CALLBACK */
+    
     USBFS_currentTD.count = 0u;   /* Init not supported condition */
     pTmp = USBFS_GetConfigTablePtr(USBFS_configuration - 1u);
     reportType = CY_GET_REG8(USBFS_wValueHi);

+ 24 - 0
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_midi.c

@@ -26,6 +26,7 @@
 #include "USBFS_pvt.h"
 
 
+
 /***************************************
 *    MIDI Constants
 ***************************************/
@@ -269,6 +270,10 @@ void USBFS_MIDI_EP_Init(void)
                             /* `#START CUSTOM_MIDI_OUT_EP_SERV` Place your code here */
 
                             /* `#END` */
+
+                            #ifdef USBFS_MIDI_OUT_EP_SERVICE_CALLBACK
+                                USBFS_MIDI_OUT_EP_Service_Callback();
+                            #endif /* USBFS_MIDI_OUT_EP_SERVICE_CALLBACK */
                         }
                     #endif /* (USBFS_MIDI_EXT_MODE >= USBFS_ONE_EXT_INTRF) */
 
@@ -732,6 +737,9 @@ void USBFS_MIDI_EP_Init(void)
 
         /* `#END` */
 
+        #ifdef USBFS_MIDI_INIT_CALLBACK
+            USBFS_MIDI_Init_Callback();
+        #endif /* USBFS_MIDI_INIT_CALLBACK */
     }
 
 
@@ -1046,6 +1054,10 @@ void USBFS_MIDI_EP_Init(void)
 
         /* `#END` */
 
+        #ifdef USBFS_MIDI1_PROCESS_USB_OUT_ENTRY_CALLBACK
+            USBFS_MIDI1_ProcessUsbOut_EntryCallback();
+        #endif /* USBFS_MIDI1_PROCESS_USB_OUT_ENTRY_CALLBACK */
+
         cmd = epBuf[USBFS_EVENT_BYTE0] & USBFS_CIN_MASK;
         if((cmd != USBFS_RESERVED0) && (cmd != USBFS_RESERVED1))
         {
@@ -1118,6 +1130,10 @@ void USBFS_MIDI_EP_Init(void)
         /* `#START MIDI1_PROCESS_OUT_END` */
 
         /* `#END` */
+
+        #ifdef USBFS_MIDI1_PROCESS_USB_OUT_EXIT_CALLBACK
+            USBFS_MIDI1_ProcessUsbOut_ExitCallback();
+        #endif /* USBFS_MIDI1_PROCESS_USB_OUT_EXIT_CALLBACK */
     }
 
 
@@ -1269,6 +1285,10 @@ void USBFS_MIDI_EP_Init(void)
 
         /* `#END` */
 
+        #ifdef USBFS_MIDI2_PROCESS_USB_OUT_ENTRY_CALLBACK
+            USBFS_MIDI2_ProcessUsbOut_EntryCallback();
+        #endif /* USBFS_MIDI2_PROCESS_USB_OUT_ENTRY_CALLBACK */
+
         cmd = epBuf[USBFS_EVENT_BYTE0] & USBFS_CIN_MASK;
         if((cmd != USBFS_RESERVED0) && (cmd != USBFS_RESERVED1))
         {
@@ -1341,6 +1361,10 @@ void USBFS_MIDI_EP_Init(void)
         /* `#START MIDI2_PROCESS_OUT_END` */
 
         /* `#END` */
+
+        #ifdef USBFS_MIDI2_PROCESS_USB_OUT_EXIT_CALLBACK
+            USBFS_MIDI2_ProcessUsbOut_ExitCallback();
+        #endif /* USBFS_MIDI2_PROCESS_USB_OUT_EXIT_CALLBACK */
     }
 #endif /* (USBFS_MIDI_EXT_MODE >= USBFS_TWO_EXT_INTRF) */
 #endif /* (USBFS_MIDI_EXT_MODE >= USBFS_ONE_EXT_INTRF) */

+ 9 - 0
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_pm.c

@@ -19,6 +19,7 @@
 #include "USBFS_pvt.h"
 
 
+
 /***************************************
 * Custom Declarations
 ***************************************/
@@ -53,12 +54,20 @@ static USBFS_BACKUP_STRUCT  USBFS_backup;
     *******************************************************************************/
     CY_ISR(USBFS_DP_ISR)
     {
+        #ifdef USBFS_DP_ISR_ENTRY_CALLBACK
+            USBFS_DP_ISR_EntryCallback();
+        #endif /* USBFS_DP_ISR_ENTRY_CALLBACK */
+
         /* `#START DP_USER_CODE` Place your code here */
 
         /* `#END` */
 
         /* Clears active interrupt */
         CY_GET_REG8(USBFS_DP_INTSTAT_PTR);
+
+        #ifdef USBFS_DP_ISR_EXIT_CALLBACK
+            USBFS_DP_ISR_ExitCallback();
+        #endif /* USBFS_DP_ISR_EXIT_CALLBACK */
     }
 
 #endif /* (USBFS_DP_ISR_REMOVE == 0u) */

+ 5 - 1
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_vnd.c

@@ -17,6 +17,7 @@
 #include "USBFS.h"
 #include "USBFS_pvt.h"
 
+
 #if(USBFS_EXTERN_VND == USBFS_FALSE)
 
 
@@ -77,6 +78,10 @@ uint8 USBFS_HandleVendorRqst(void)
 
     /* `#END` */
 
+    #ifdef USBFS_HANDLE_VENDOR_RQST_CALLBACK
+        USBFS_HandleVendorRqst_Callback();
+    #endif /* USBFS_HANDLE_VENDOR_RQST_CALLBACK */
+
     return(requestHandled);
 }
 
@@ -89,7 +94,6 @@ uint8 USBFS_HandleVendorRqst(void)
 
 /* `#END` */
 
-
 #endif /* USBFS_EXTERN_VND */
 
 

+ 3 - 0
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cybootloader.c

@@ -2,6 +2,7 @@
 
 #include "cytypes.h"
 
+#if (!CYDEV_BOOTLOADER_ENABLE)
 
 #if defined(__GNUC__) || defined(__ARMCC_VERSION)
 __attribute__ ((__section__(".cyloadermeta"), used))
@@ -19,6 +20,8 @@ const uint8 cy_meta_loader[] = {
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u};
+#endif /* (!CYDEV_BOOTLOADER_ENABLE) */
+
 
 #if defined(__GNUC__) || defined(__ARMCC_VERSION)
 __attribute__ ((__section__(".cybootloader"), used))

+ 0 - 0
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cycodeshareexport.ld


+ 0 - 0
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cycodeshareimport.ld


+ 0 - 0
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cycodeshareimport.scat


+ 3 - 3
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice.h

@@ -1,9 +1,9 @@
 /*******************************************************************************
-* FILENAME: cydevice.h
+* File Name: cydevice.h
 * OBSOLETE: Do not use this file. Use the _trm version instead.
-* PSoC Creator  3.2
+* PSoC Creator  3.3
 *
-* DESCRIPTION:
+* Description:
 * This file provides all of the address values for the entire PSoC device.
 * This file is automatically generated by PSoC Creator.
 *

+ 3 - 3
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice_trm.h

@@ -1,9 +1,9 @@
 /*******************************************************************************
-* FILENAME: cydevice_trm.h
+* File Name: cydevice_trm.h
 * 
-* PSoC Creator  3.2
+* PSoC Creator  3.3
 *
-* DESCRIPTION:
+* Description:
 * This file provides all of the address values for the entire PSoC device.
 * This file is automatically generated by PSoC Creator.
 *

+ 3 - 3
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu.inc

@@ -1,9 +1,9 @@
 /*******************************************************************************
-* FILENAME: cydevicegnu.inc
+* File Name: cydevicegnu.inc
 * OBSOLETE: Do not use this file. Use the _trm version instead.
-* PSoC Creator  3.2
+* PSoC Creator  3.3
 *
-* DESCRIPTION:
+* Description:
 * This file provides all of the address values for the entire PSoC device.
 * This file is automatically generated by PSoC Creator.
 *

+ 3 - 3
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu_trm.inc

@@ -1,9 +1,9 @@
 /*******************************************************************************
-* FILENAME: cydevicegnu_trm.inc
+* File Name: cydevicegnu_trm.inc
 * 
-* PSoC Creator  3.2
+* PSoC Creator  3.3
 *
-* DESCRIPTION:
+* Description:
 * This file provides all of the address values for the entire PSoC device.
 * This file is automatically generated by PSoC Creator.
 *

+ 3 - 3
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar.inc

@@ -1,9 +1,9 @@
 ;
-; FILENAME: cydeviceiar.inc
+; File Name: cydeviceiar.inc
 ; OBSOLETE: Do not use this file. Use the _trm version instead.
-; PSoC Creator  3.2
+; PSoC Creator  3.3
 ;
-; DESCRIPTION:
+; Description:
 ; This file provides all of the address values for the entire PSoC device.
 ;
 ;-------------------------------------------------------------------------------

+ 3 - 3
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar_trm.inc

@@ -1,9 +1,9 @@
 ;
-; FILENAME: cydeviceiar_trm.inc
+; File Name: cydeviceiar_trm.inc
 ; 
-; PSoC Creator  3.2
+; PSoC Creator  3.3
 ;
-; DESCRIPTION:
+; Description:
 ; This file provides all of the address values for the entire PSoC device.
 ;
 ;-------------------------------------------------------------------------------

+ 3 - 3
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv.inc

@@ -1,9 +1,9 @@
 ;
-; FILENAME: cydevicerv.inc
+; File Name: cydevicerv.inc
 ; OBSOLETE: Do not use this file. Use the _trm version instead.
-; PSoC Creator  3.2
+; PSoC Creator  3.3
 ;
-; DESCRIPTION:
+; Description:
 ; This file provides all of the address values for the entire PSoC device.
 ;
 ;-------------------------------------------------------------------------------

+ 3 - 3
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv_trm.inc

@@ -1,9 +1,9 @@
 ;
-; FILENAME: cydevicerv_trm.inc
+; File Name: cydevicerv_trm.inc
 ; 
-; PSoC Creator  3.2
+; PSoC Creator  3.3
 ;
-; DESCRIPTION:
+; Description:
 ; This file provides all of the address values for the entire PSoC device.
 ;
 ;-------------------------------------------------------------------------------

File diff suppressed because it is too large
+ 206 - 113
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter.h


File diff suppressed because it is too large
+ 1660 - 1492
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter_cfg.c


+ 3 - 3
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter_cfg.h

@@ -1,9 +1,9 @@
 /*******************************************************************************
-* FILENAME: cyfitter_cfg.h
+* File Name: cyfitter_cfg.h
 * 
-* PSoC Creator  3.2
+* PSoC Creator  3.3
 *
-* DESCRIPTION:
+* Description:
 * This file provides basic startup and mux configration settings
 * This file is automatically generated by PSoC Creator.
 *

File diff suppressed because it is too large
+ 205 - 112
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfittergnu.inc


File diff suppressed because it is too large
+ 205 - 112
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitteriar.inc


File diff suppressed because it is too large
+ 205 - 112
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitterrv.inc


+ 4 - 4
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cymetadata.c

@@ -1,9 +1,9 @@
 /*******************************************************************************
-* FILENAME: cymetadata.c
+* File Name: cymetadata.c
 * 
-* PSoC Creator  3.2
+* PSoC Creator  3.3
 *
-* DESCRIPTION:
+* Description:
 * This file defines all extra memory spaces that need to be included.
 * This file is automatically generated by PSoC Creator.
 *
@@ -28,7 +28,7 @@ __attribute__ ((__section__(".cyloadablemeta"), used))
 const uint8 cy_meta_loadable[] = {
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
-    0x00u, 0x00u, 0x00u, 0x00u, 0x5Cu, 0xD1u, 0x40u, 0x04u,
+    0x00u, 0x00u, 0x00u, 0x00u, 0x5Cu, 0xD1u, 0x50u, 0x04u,
     0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,

+ 0 - 0
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/exported_symbols.txt


+ 3 - 3
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/project.h

@@ -1,9 +1,9 @@
 /*******************************************************************************
-* FILENAME: project.h
+* File Name: project.h
 * 
-* PSoC Creator  3.2
+* PSoC Creator  3.3
 *
-* DESCRIPTION:
+* Description:
 * It contains references to all generated header files and should not be modified.
 * This file is automatically generated by PSoC Creator.
 *

+ 0 - 0
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/renamed_symbols.txt


+ 141 - 141
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/SCSI2SD.cycdx

@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="utf-8"?>
 <blockRegMap version="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://cypress.com/xsd/cyblockregmap cyblockregmap.xsd" xmlns="http://cypress.com/xsd/cyblockregmap">
-  <block name="SD_TX_DMA_COMPLETE" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SD_RX_DMA_COMPLETE" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SD_TX_DMA" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_Parity_Error" BASE="0x0" SIZE="0x0" desc="" visible="true">
-    <register name="SCSI_Parity_Error_STATUS_REG" address="0x4000646B" bitWidth="8" desc="" />
-    <register name="SCSI_Parity_Error_MASK_REG" address="0x4000648B" bitWidth="8" desc="" />
-    <register name="SCSI_Parity_Error_STATUS_AUX_CTL_REG" address="0x4000649B" bitWidth="8" desc="">
+  <block name="SD_TX_DMA_COMPLETE" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SD_RX_DMA_COMPLETE" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SD_TX_DMA" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_Parity_Error" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false">
+    <register name="SCSI_Parity_Error_STATUS_REG" address="0x40006464" bitWidth="8" desc="" hidden="false" />
+    <register name="SCSI_Parity_Error_MASK_REG" address="0x40006484" bitWidth="8" desc="" hidden="false" />
+    <register name="SCSI_Parity_Error_STATUS_AUX_CTL_REG" address="0x40006494" bitWidth="8" desc="" hidden="false">
       <field name="FIFO0" from="5" to="5" access="RW" resetVal="" desc="FIFO0 clear">
         <value name="ENABLED" value="1" desc="Enable counter" />
         <value name="DISABLED" value="0" desc="Disable counter" />
@@ -33,22 +33,22 @@
       </field>
     </register>
   </block>
-  <block name="SCSI_RX_DMA_COMPLETE" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_RX_DMA" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SD_RX_DMA" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="ZeroTerminal_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="timer_clock" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="Debug_Timer" BASE="0x0" SIZE="0x0" desc="" visible="true">
-    <block name="VirtualMux_2" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ZeroTerminal_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="TimerHW" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="OneTerminal_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_3" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <register name="Debug_Timer_GLOBAL_ENABLE" address="0x400043A3" bitWidth="8" desc="PM.ACT.CFG">
+  <block name="SCSI_RX_DMA_COMPLETE" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_RX_DMA" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SD_RX_DMA" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="ZeroTerminal_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="timer_clock" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="Debug_Timer" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false">
+    <block name="VirtualMux_2" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ZeroTerminal_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="TimerHW" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="OneTerminal_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_3" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <register name="Debug_Timer_GLOBAL_ENABLE" address="0x400043A3" bitWidth="8" desc="PM.ACT.CFG" hidden="false">
       <field name="en_timer" from="3" to="0" access="RW" resetVal="" desc="Enable timer/counters." />
     </register>
-    <register name="Debug_Timer_CONTROL" address="0x40004F00" bitWidth="8" desc="TMRx.CFG0">
+    <register name="Debug_Timer_CONTROL" address="0x40004F00" bitWidth="8" desc="TMRx.CFG0" hidden="false">
       <field name="EN" from="0" to="0" access="RW" resetVal="" desc="Enables timer/comparator." />
       <field name="MODE" from="1" to="1" access="RW" resetVal="" desc="Mode. (0 = Timer; 1 = Comparator)">
         <value name="Timer" value="0" desc="Timer mode. CNT/CMP register holds timer count value." />
@@ -63,7 +63,7 @@
       </field>
       <field name="DEADBAND_PERIOD" from="7" to="6" access="RW" resetVal="" desc="Deadband Period" />
     </register>
-    <register name="Debug_Timer_CONTROL2" address="0x40004F01" bitWidth="8" desc="TMRx.CFG1">
+    <register name="Debug_Timer_CONTROL2" address="0x40004F01" bitWidth="8" desc="TMRx.CFG1" hidden="false">
       <field name="IRQ_SEL" from="0" to="0" access="RW" resetVal="" desc="Irq selection. (0 = raw interrupts; 1 = status register interrupts)" />
       <field name="FTC" from="1" to="1" access="RW" resetVal="" desc="First Terminal Count (FTC). Setting this bit forces a single pulse on the TC pin when first enabled.">
         <value name="Disable FTC" value="0" desc="Disable the single cycle pulse, which signifies the timer is starting." />
@@ -74,7 +74,7 @@
       <field name="CLK_BUS_EN_SEL" from="6" to="4" access="RW" resetVal="" desc="Digital Global Clock selection." />
       <field name="BUS_CLK_SEL" from="7" to="7" access="RW" resetVal="" desc="Bus Clock selection." />
     </register>
-    <register name="Debug_Timer_CONTROL3_" address="0x40004F02" bitWidth="8" desc="TMRx.CFG2">
+    <register name="Debug_Timer_CONTROL3_" address="0x40004F02" bitWidth="8" desc="TMRx.CFG2" hidden="false">
       <field name="TMR_CFG" from="1" to="0" access="RW" resetVal="" desc="Timer configuration (MODE = 0): 000 = Continuous; 001 = Pulsewidth; 010 = Period; 011 = Stop on IRQ">
         <value name="Continuous" value="0" desc="Timer runs while EN bit of CFG0 register is set to '1'." />
         <value name="Pulsewidth" value="1" desc="Timer runs from positive to negative edge of TIMEREN." />
@@ -92,16 +92,16 @@
       </field>
       <field name="HW_EN" from="7" to="7" access="RW" resetVal="" desc="When set Timer Enable controls counting." />
     </register>
-    <register name="Debug_Timer_PERIOD" address="0x40004F04" bitWidth="16" desc="TMRx.PER0 - Assigned Period" />
-    <register name="Debug_Timer_COUNTER" address="0x40004F06" bitWidth="16" desc="TMRx.CNT_CMP0 - Current Down Counter Value" />
+    <register name="Debug_Timer_PERIOD" address="0x40004F04" bitWidth="16" desc="TMRx.PER0 - Assigned Period" hidden="false" />
+    <register name="Debug_Timer_COUNTER" address="0x40004F06" bitWidth="16" desc="TMRx.CNT_CMP0 - Current Down Counter Value" hidden="false" />
   </block>
-  <block name="SCSI_TX_DMA_COMPLETE" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_TX_DMA" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="Debug_Timer_Interrupt" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_Filtered" BASE="0x0" SIZE="0x0" desc="" visible="true">
-    <register name="SCSI_Filtered_STATUS_REG" address="0x4000646A" bitWidth="8" desc="" />
-    <register name="SCSI_Filtered_MASK_REG" address="0x4000648A" bitWidth="8" desc="" />
-    <register name="SCSI_Filtered_STATUS_AUX_CTL_REG" address="0x4000649A" bitWidth="8" desc="">
+  <block name="SCSI_TX_DMA_COMPLETE" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_TX_DMA" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="Debug_Timer_Interrupt" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_Filtered" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false">
+    <register name="SCSI_Filtered_STATUS_REG" address="0x40006461" bitWidth="8" desc="" hidden="false" />
+    <register name="SCSI_Filtered_MASK_REG" address="0x40006481" bitWidth="8" desc="" hidden="false" />
+    <register name="SCSI_Filtered_STATUS_AUX_CTL_REG" address="0x40006491" bitWidth="8" desc="" hidden="false">
       <field name="FIFO0" from="5" to="5" access="RW" resetVal="" desc="FIFO0 clear">
         <value name="ENABLED" value="1" desc="Enable counter" />
         <value name="DISABLED" value="0" desc="Disable counter" />
@@ -128,153 +128,153 @@
       </field>
     </register>
   </block>
-  <block name="not_2" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="Clock_4" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="cydff_2" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="cy_boot" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_Glitch_Ctl" BASE="0x0" SIZE="0x0" desc="" visible="true">
-    <register name="SCSI_Glitch_Ctl_CONTROL_REG" address="0x40006474" bitWidth="8" desc="" />
+  <block name="not_2" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="Clock_4" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="cydff_2" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="cy_boot" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_Glitch_Ctl" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false">
+    <register name="SCSI_Glitch_Ctl_CONTROL_REG" address="0x4000647A" bitWidth="8" desc="" hidden="false" />
   </block>
-  <block name="mux_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_SEL_ISR" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="Clock_2" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="Clock_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="GlitchFilter_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="Clock_3" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="cydff_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="cy_constant_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_Out" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_In" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="OddParityGen_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SD_SCK" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SD_CS" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="CFG_EEPROM" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_CTL_PHASE" BASE="0x0" SIZE="0x0" desc="" visible="true">
-    <register name="SCSI_CTL_PHASE_CONTROL_REG" address="0x40006472" bitWidth="8" desc="" />
+  <block name="mux_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_SEL_ISR" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="Clock_2" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="Clock_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="GlitchFilter_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="Clock_3" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="cydff_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="cy_constant_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_Out" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_In" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="OddParityGen_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SD_SCK" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SD_CS" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="CFG_EEPROM" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_CTL_PHASE" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false">
+    <register name="SCSI_CTL_PHASE_CONTROL_REG" address="0x4000647B" bitWidth="8" desc="" hidden="false" />
   </block>
-  <block name="SD_Data_Clk" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_Out_DBx" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_In_DBx" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SD_DAT1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SD_DAT2" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SD_CD" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SD_MOSI" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="Bootloadable_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="USBFS" BASE="0x0" SIZE="0x0" desc="USBFS" visible="true">
-    <block name="ZeroTerminal_5" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_6" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_5" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ZeroTerminal_6" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ZeroTerminal_7" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_8" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_7" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ep_0" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_4" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ZeroTerminal_2" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ZeroTerminal_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ZeroTerminal_4" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_2" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="bus_reset" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="Dm" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="sof_int" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="dp_int" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="Dp" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ep_3" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ep_4" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="USB" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="arb_int" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ZeroTerminal_8" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ep_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ep_2" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ZeroTerminal_3" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_3" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="Clock_vbus" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <register name="USBFS_PM_USB_CR0" address="0x40004394" bitWidth="8" desc="USB Power Mode Control Register 0">
+  <block name="SD_Data_Clk" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_Out_DBx" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_In_DBx" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SD_DAT1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SD_DAT2" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SD_CD" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SD_MOSI" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="Bootloadable_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="USBFS" BASE="0x0" SIZE="0x0" desc="USBFS" visible="true" hidden="false">
+    <block name="ZeroTerminal_5" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_6" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_5" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ZeroTerminal_6" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ZeroTerminal_7" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_8" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_7" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ep_0" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_4" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ZeroTerminal_2" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ZeroTerminal_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ZeroTerminal_4" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_2" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="bus_reset" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="Dm" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="sof_int" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="dp_int" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="Dp" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ep_3" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ep_4" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="USB" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="arb_int" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ZeroTerminal_8" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ep_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ep_2" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ZeroTerminal_3" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_3" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="Clock_vbus" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <register name="USBFS_PM_USB_CR0" address="0x40004394" bitWidth="8" desc="USB Power Mode Control Register 0" hidden="false">
       <field name="fsusbio_ref_en" from="0" to="0" access="RW" resetVal="" desc="" />
       <field name="fsusbio_pd_n" from="1" to="1" access="RW" resetVal="" desc="" />
       <field name="fsusbio_pd_pullup_n" from="2" to="2" access="RW" resetVal="" desc="" />
     </register>
-    <register name="USBFS_PM_ACT_CFG" address="0x400043A5" bitWidth="8" desc="Active Power Mode Configuration Register" />
-    <register name="USBFS_PM_STBY_CFG" address="0x400043B5" bitWidth="8" desc="Standby Power Mode Configuration Register" />
-    <register name="USBFS_PRT.PS" address="0x400051F1" bitWidth="8" desc="Port Pin State Register">
+    <register name="USBFS_PM_ACT_CFG" address="0x400043A5" bitWidth="8" desc="Active Power Mode Configuration Register" hidden="false" />
+    <register name="USBFS_PM_STBY_CFG" address="0x400043B5" bitWidth="8" desc="Standby Power Mode Configuration Register" hidden="false" />
+    <register name="USBFS_PRT.PS" address="0x400051F1" bitWidth="8" desc="Port Pin State Register" hidden="false">
       <field name="PinState_DP" from="6" to="6" access="R" resetVal="" desc="" />
       <field name="PinState_DM" from="7" to="7" access="R" resetVal="" desc="" />
     </register>
-    <register name="USBFS_PRT_DM0" address="0x400051F2" bitWidth="8" desc="Port Drive Mode Register">
+    <register name="USBFS_PRT_DM0" address="0x400051F2" bitWidth="8" desc="Port Drive Mode Register" hidden="false">
       <field name="DriveMode_DP" from="6" to="6" access="RW" resetVal="" desc="" />
       <field name="DriveMode_DM" from="7" to="7" access="RW" resetVal="" desc="" />
     </register>
-    <register name="USBFS_PRT_DM1" address="0x400051F3" bitWidth="8" desc="Port Drive Mode Register">
+    <register name="USBFS_PRT_DM1" address="0x400051F3" bitWidth="8" desc="Port Drive Mode Register" hidden="false">
       <field name="PullUp_en_DP" from="6" to="6" access="RW" resetVal="" desc="" />
       <field name="PullUp_en_DM" from="7" to="7" access="RW" resetVal="" desc="" />
     </register>
-    <register name="USBFS_PRT.INP_DIS" address="0x400051F8" bitWidth="8" desc="Input buffer disable override">
+    <register name="USBFS_PRT.INP_DIS" address="0x400051F8" bitWidth="8" desc="Input buffer disable override" hidden="false">
       <field name="seinput_dis_dp" from="6" to="6" access="RW" resetVal="" desc="" />
       <field name="seinput_dis_dm" from="7" to="7" access="RW" resetVal="" desc="" />
     </register>
-    <register name="USBFS_EP0_DR0" address="0x40006000" bitWidth="8" desc="bmRequestType" />
-    <register name="USBFS_EP0_DR1" address="0x40006001" bitWidth="8" desc="bRequest" />
-    <register name="USBFS_EP0_DR2" address="0x40006002" bitWidth="8" desc="wValueLo" />
-    <register name="USBFS_EP0_DR3" address="0x40006003" bitWidth="8" desc="wValueHi" />
-    <register name="USBFS_EP0_DR4" address="0x40006004" bitWidth="8" desc="wIndexLo" />
-    <register name="USBFS_EP0_DR5" address="0x40006005" bitWidth="8" desc="wIndexHi" />
-    <register name="USBFS_EP0_DR6" address="0x40006006" bitWidth="8" desc="lengthLo" />
-    <register name="USBFS_EP0_DR7" address="0x40006007" bitWidth="8" desc="lengthHi" />
-    <register name="USBFS_CR0" address="0x40006008" bitWidth="8" desc="USB Control Register 0">
+    <register name="USBFS_EP0_DR0" address="0x40006000" bitWidth="8" desc="bmRequestType" hidden="false" />
+    <register name="USBFS_EP0_DR1" address="0x40006001" bitWidth="8" desc="bRequest" hidden="false" />
+    <register name="USBFS_EP0_DR2" address="0x40006002" bitWidth="8" desc="wValueLo" hidden="false" />
+    <register name="USBFS_EP0_DR3" address="0x40006003" bitWidth="8" desc="wValueHi" hidden="false" />
+    <register name="USBFS_EP0_DR4" address="0x40006004" bitWidth="8" desc="wIndexLo" hidden="false" />
+    <register name="USBFS_EP0_DR5" address="0x40006005" bitWidth="8" desc="wIndexHi" hidden="false" />
+    <register name="USBFS_EP0_DR6" address="0x40006006" bitWidth="8" desc="lengthLo" hidden="false" />
+    <register name="USBFS_EP0_DR7" address="0x40006007" bitWidth="8" desc="lengthHi" hidden="false" />
+    <register name="USBFS_CR0" address="0x40006008" bitWidth="8" desc="USB Control Register 0" hidden="false">
       <field name="device_address" from="6" to="0" access="R" resetVal="" desc="" />
       <field name="usb_enable" from="7" to="7" access="RW" resetVal="" desc="" />
     </register>
-    <register name="USBFS_CR1" address="0x40006009" bitWidth="8" desc="USB Control Register 1">
+    <register name="USBFS_CR1" address="0x40006009" bitWidth="8" desc="USB Control Register 1" hidden="false">
       <field name="reg_enable" from="0" to="0" access="RW" resetVal="" desc="" />
       <field name="enable_lock" from="1" to="1" access="RW" resetVal="" desc="" />
       <field name="bus_activity" from="2" to="2" access="RW" resetVal="" desc="" />
       <field name="trim_offset_msb" from="3" to="3" access="RW" resetVal="" desc="" />
     </register>
-    <register name="USBFS_SIE_EP1_CR0" address="0x4000600E" bitWidth="8" desc="The Endpoint1 Control Register" />
-    <register name="USBFS_USBIO_CR0" address="0x40006010" bitWidth="8" desc="USBIO Control Register 0">
+    <register name="USBFS_SIE_EP1_CR0" address="0x4000600E" bitWidth="8" desc="The Endpoint1 Control Register" hidden="false" />
+    <register name="USBFS_USBIO_CR0" address="0x40006010" bitWidth="8" desc="USBIO Control Register 0" hidden="false">
       <field name="rd" from="0" to="0" access="R" resetVal="" desc="" />
       <field name="td" from="5" to="5" access="RW" resetVal="" desc="" />
       <field name="tse0" from="6" to="6" access="RW" resetVal="" desc="" />
       <field name="ten" from="7" to="7" access="RW" resetVal="" desc="" />
     </register>
-    <register name="USBFS_USBIO_CR1" address="0x40006012" bitWidth="8" desc="USBIO Control Register 1">
+    <register name="USBFS_USBIO_CR1" address="0x40006012" bitWidth="8" desc="USBIO Control Register 1" hidden="false">
       <field name="dmo" from="0" to="0" access="R" resetVal="" desc="" />
       <field name="dpo" from="1" to="1" access="R" resetVal="" desc="" />
       <field name="usbpuen" from="2" to="2" access="RW" resetVal="" desc="" />
       <field name="iomode" from="5" to="5" access="RW" resetVal="" desc="" />
     </register>
-    <register name="USBFS_SIE_EP2_CR0" address="0x4000601E" bitWidth="8" desc="The Endpoint2 Control Register" />
-    <register name="USBFS_SIE_EP3_CR0" address="0x4000602E" bitWidth="8" desc="The Endpoint3 Control Register" />
-    <register name="USBFS_SIE_EP4_CR0" address="0x4000603E" bitWidth="8" desc="The Endpoint4 Control Register" />
-    <register name="USBFS_SIE_EP5_CR0" address="0x4000604E" bitWidth="8" desc="The Endpoint5 Control Register" />
-    <register name="USBFS_SIE_EP6_CR0" address="0x4000605E" bitWidth="8" desc="The Endpoint6 Control Register" />
-    <register name="USBFS_SIE_EP7_CR0" address="0x4000606E" bitWidth="8" desc="The Endpoint7 Control Register" />
-    <register name="USBFS_SIE_EP8_CR0" address="0x4000607E" bitWidth="8" desc="The Endpoint8 Control Register" />
-    <register name="USBFS_BUF_SIZE" address="0x4000608C" bitWidth="8" desc="Dedicated Endpoint Buffer Size Register" />
-    <register name="USBFS_EP_ACTIVE" address="0x4000608E" bitWidth="8" desc="Endpoint Active Indication Register" />
-    <register name="USBFS_EP_TYPE" address="0x4000608F" bitWidth="8" desc="Endpoint Type (IN/OUT) Indication" />
-    <register name="USBFS_USB_CLK_EN" address="0x4000609D" bitWidth="8" desc="USB Block Clock Enable Register" />
+    <register name="USBFS_SIE_EP2_CR0" address="0x4000601E" bitWidth="8" desc="The Endpoint2 Control Register" hidden="false" />
+    <register name="USBFS_SIE_EP3_CR0" address="0x4000602E" bitWidth="8" desc="The Endpoint3 Control Register" hidden="false" />
+    <register name="USBFS_SIE_EP4_CR0" address="0x4000603E" bitWidth="8" desc="The Endpoint4 Control Register" hidden="false" />
+    <register name="USBFS_SIE_EP5_CR0" address="0x4000604E" bitWidth="8" desc="The Endpoint5 Control Register" hidden="false" />
+    <register name="USBFS_SIE_EP6_CR0" address="0x4000605E" bitWidth="8" desc="The Endpoint6 Control Register" hidden="false" />
+    <register name="USBFS_SIE_EP7_CR0" address="0x4000606E" bitWidth="8" desc="The Endpoint7 Control Register" hidden="false" />
+    <register name="USBFS_SIE_EP8_CR0" address="0x4000607E" bitWidth="8" desc="The Endpoint8 Control Register" hidden="false" />
+    <register name="USBFS_BUF_SIZE" address="0x4000608C" bitWidth="8" desc="Dedicated Endpoint Buffer Size Register" hidden="false" />
+    <register name="USBFS_EP_ACTIVE" address="0x4000608E" bitWidth="8" desc="Endpoint Active Indication Register" hidden="false" />
+    <register name="USBFS_EP_TYPE" address="0x4000608F" bitWidth="8" desc="Endpoint Type (IN/OUT) Indication" hidden="false" />
+    <register name="USBFS_USB_CLK_EN" address="0x4000609D" bitWidth="8" desc="USB Block Clock Enable Register" hidden="false" />
   </block>
-  <block name="SD_MISO" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_Out_Ctl" BASE="0x0" SIZE="0x0" desc="" visible="true">
-    <register name="SCSI_Out_Ctl_CONTROL_REG" address="0x4000647F" bitWidth="8" desc="" />
+  <block name="SD_MISO" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_Out_Ctl" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false">
+    <register name="SCSI_Out_Ctl_CONTROL_REG" address="0x40006475" bitWidth="8" desc="" hidden="false" />
   </block>
-  <block name="SCSI_Out_Bits" BASE="0x0" SIZE="0x0" desc="" visible="true">
-    <register name="SCSI_Out_Bits_CONTROL_REG" address="0x4000647B" bitWidth="8" desc="" />
+  <block name="SCSI_Out_Bits" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false">
+    <register name="SCSI_Out_Bits_CONTROL_REG" address="0x40006575" bitWidth="8" desc="" hidden="false" />
   </block>
-  <block name="SCSI_Out_Mux" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SDCard" BASE="0x0" SIZE="0x0" desc="" visible="true">
-    <block name="VirtualMux_3" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ZeroTerminal_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_2" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="BSPIM" BASE="0x0" SIZE="0x0" desc="" visible="true" />
+  <block name="SCSI_Out_Mux" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SDCard" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false">
+    <block name="VirtualMux_3" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ZeroTerminal_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_2" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="BSPIM" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
   </block>
-  <block name="SCSI_Noise" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="not_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_CLK" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="LED1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="scsiTarget" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_RST_ISR" BASE="0x0" SIZE="0x0" desc="" visible="true" />
+  <block name="SCSI_Noise" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="not_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_CLK" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="LED1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="scsiTarget" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_RST_ISR" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
 </blockRegMap>

二進制
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/SCSI2SD.cyfit


+ 69 - 124
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/SCSI2SD.cyprj

@@ -130,6 +130,20 @@
 <build_action v="C_FILE" />
 <PropertyDeltas />
 </CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
+<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFile" version="3" xml_contents_version="1">
+<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItem" version="2" name="mo.c" persistent="..\..\src\mo.c">
+<Hidden v="False" />
+</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
+<build_action v="C_FILE" />
+<PropertyDeltas />
+</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
+<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFile" version="3" xml_contents_version="1">
+<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItem" version="2" name="tape.c" persistent="..\..\src\tape.c">
+<Hidden v="False" />
+</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
+<build_action v="C_FILE" />
+<PropertyDeltas />
+</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
 </dependencies>
 </CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
 </CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
@@ -280,6 +294,20 @@
 <build_action v="NONE" />
 <PropertyDeltas />
 </CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
+<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFile" version="3" xml_contents_version="1">
+<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItem" version="2" name="mo.h" persistent="..\..\src\mo.h">
+<Hidden v="False" />
+</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
+<build_action v="NONE" />
+<PropertyDeltas />
+</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
+<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFile" version="3" xml_contents_version="1">
+<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItem" version="2" name="tape.h" persistent="..\..\src\tape.h">
+<Hidden v="False" />
+</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
+<build_action v="NONE" />
+<PropertyDeltas />
+</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
 </dependencies>
 </CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
 </CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
@@ -3184,6 +3212,24 @@
 </CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
 <filters />
 </CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
+<CyGuid_405e30c3-81d4-4133-98d6-c3ecf21fec0d type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileGenerated" version="1">
+<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFile" version="3" xml_contents_version="1">
+<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItem" version="2" name="cycodeshareimport.ld" persistent=".\Generated_Source\PSoC5\cycodeshareimport.ld">
+<Hidden v="False" />
+</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
+<build_action v="NONE" />
+<PropertyDeltas />
+</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
+</CyGuid_405e30c3-81d4-4133-98d6-c3ecf21fec0d>
+<CyGuid_405e30c3-81d4-4133-98d6-c3ecf21fec0d type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileGenerated" version="1">
+<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFile" version="3" xml_contents_version="1">
+<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItem" version="2" name="cycodeshareimport.scat" persistent=".\Generated_Source\PSoC5\cycodeshareimport.scat">
+<Hidden v="False" />
+</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
+<build_action v="NONE" />
+<PropertyDeltas />
+</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
+</CyGuid_405e30c3-81d4-4133-98d6-c3ecf21fec0d>
 </dependencies>
 </CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
 </CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
@@ -3265,7 +3311,6 @@
 <GlobalPages />
 <GlobalTools name="Code Generation">
 <GlobalPages>
-<name_val_pair name="General@Application Type" v="Bootloadable" />
 <name_val_pair name="General@Custom Code Gen Options" v="" />
 <name_val_pair name="General@Skip Code Generation" v="False" />
 <name_val_pair name="General@Custom Synthesis Options" v="" />
@@ -3313,6 +3358,7 @@
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@C/C++@Optimization@Inline Functions" v="False" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@C/C++@Optimization@Optimization Level" v="None" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@C/C++@Optimization@Link Time Optimization" v="False" />
+<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@C/C++@Optimization@Fat LTO objects" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@C/C++@Command Line@Command Line" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@Library Generation@Command Line@Command Line" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@Linker@General@Additional Libraries" v="" />
@@ -3320,11 +3366,9 @@
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@Linker@General@Additional Link Files" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@Linker@General@Generate Map File" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@Linker@General@Custom Linker Script" v="" />
-<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@Linker@General@Use Debugging Information" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@Linker@General@Use Default Libs" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@Linker@General@Use Nano Lib" v="True" />
-<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@Linker@General@Enable printf Float" v="True" />
-<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@Linker@Optimization@Optimization Level" v="None" />
+<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@Linker@General@Enable Float printf" v="False" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@Linker@Optimization@Remove Unused Functions" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@Linker@Command Line@Command Line" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@General@Output Directory" v="${ProjectDir}\${ProcessorType}\${Platform}\${Config}" />
@@ -3348,6 +3392,7 @@
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@C/C++@Optimization@Inline Functions" v="False" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@C/C++@Optimization@Optimization Level" v="Size" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@C/C++@Optimization@Link Time Optimization" v="False" />
+<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@C/C++@Optimization@Fat LTO objects" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@C/C++@Command Line@Command Line" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@Library Generation@Command Line@Command Line" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@Linker@General@Additional Libraries" v="" />
@@ -3355,11 +3400,9 @@
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@Linker@General@Additional Link Files" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@Linker@General@Generate Map File" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@Linker@General@Custom Linker Script" v="" />
-<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@Linker@General@Use Debugging Information" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@Linker@General@Use Default Libs" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@Linker@General@Use Nano Lib" v="True" />
-<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@Linker@General@Enable printf Float" v="True" />
-<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@Linker@Optimization@Optimization Level" v="None" />
+<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@Linker@General@Enable Float printf" v="False" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@Linker@Optimization@Remove Unused Functions" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@Linker@Command Line@Command Line" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@General@Output Directory" v="${ProjectDir}\${ProcessorType}\${Platform}\${Config}" />
@@ -3383,6 +3426,7 @@
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@C/C++@Optimization@Inline Functions" v="False" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@C/C++@Optimization@Optimization Level" v="None" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@C/C++@Optimization@Link Time Optimization" v="False" />
+<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@C/C++@Optimization@Fat LTO objects" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@C/C++@Command Line@Command Line" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@Library Generation@Command Line@Command Line" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@Linker@General@Additional Libraries" v="" />
@@ -3390,11 +3434,9 @@
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@Linker@General@Additional Link Files" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@Linker@General@Generate Map File" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@Linker@General@Custom Linker Script" v="" />
-<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@Linker@General@Use Debugging Information" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@Linker@General@Use Default Libs" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@Linker@General@Use Nano Lib" v="True" />
-<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@Linker@General@Enable printf Float" v="True" />
-<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@Linker@Optimization@Optimization Level" v="None" />
+<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@Linker@General@Enable Float printf" v="False" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@Linker@Optimization@Remove Unused Functions" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@Linker@Command Line@Command Line" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@General@Output Directory" v="${ProjectDir}\${ProcessorType}\${Platform}\${Config}" />
@@ -3418,6 +3460,7 @@
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@C/C++@Optimization@Inline Functions" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@C/C++@Optimization@Optimization Level" v="Size" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@C/C++@Optimization@Link Time Optimization" v="False" />
+<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@C/C++@Optimization@Fat LTO objects" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@C/C++@Command Line@Command Line" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@Library Generation@Command Line@Command Line" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@Linker@General@Additional Libraries" v="" />
@@ -3425,11 +3468,9 @@
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@Linker@General@Additional Link Files" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@Linker@General@Generate Map File" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@Linker@General@Custom Linker Script" v="" />
-<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@Linker@General@Use Debugging Information" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@Linker@General@Use Default Libs" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@Linker@General@Use Nano Lib" v="True" />
-<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@Linker@General@Enable printf Float" v="True" />
-<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@Linker@Optimization@Optimization Level" v="Size" />
+<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@Linker@General@Enable Float printf" v="False" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@Linker@Optimization@Remove Unused Functions" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@Linker@Command Line@Command Line" v="" />
 </name>
@@ -3457,6 +3498,7 @@
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@C/C++@Optimization@Inline Functions" v="False" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@C/C++@Optimization@Optimization Level" v="None" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@C/C++@Optimization@Link Time Optimization" v="False" />
+<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@C/C++@Optimization@Fat LTO objects" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@C/C++@Command Line@Command Line" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@Library Generation@Command Line@Command Line" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@Linker@General@Additional Libraries" v="" />
@@ -3464,11 +3506,9 @@
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@Linker@General@Additional Link Files" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@Linker@General@Generate Map File" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@Linker@General@Custom Linker Script" v="" />
-<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@Linker@General@Use Debugging Information" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@Linker@General@Use Default Libs" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@Linker@General@Use Nano Lib" v="True" />
-<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@Linker@General@Enable printf Float" v="True" />
-<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@Linker@Optimization@Optimization Level" v="None" />
+<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@Linker@General@Enable Float printf" v="False" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@Linker@Optimization@Remove Unused Functions" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@Linker@Command Line@Command Line" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@General@Output Directory" v="${ProjectDir}\${ProcessorType}\${Platform}\${Config}" />
@@ -3492,6 +3532,7 @@
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@C/C++@Optimization@Inline Functions" v="False" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@C/C++@Optimization@Optimization Level" v="Size" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@C/C++@Optimization@Link Time Optimization" v="False" />
+<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@C/C++@Optimization@Fat LTO objects" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@C/C++@Command Line@Command Line" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@Library Generation@Command Line@Command Line" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@Linker@General@Additional Libraries" v="" />
@@ -3499,11 +3540,9 @@
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@Linker@General@Additional Link Files" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@Linker@General@Generate Map File" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@Linker@General@Custom Linker Script" v="" />
-<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@Linker@General@Use Debugging Information" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@Linker@General@Use Default Libs" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@Linker@General@Use Nano Lib" v="True" />
-<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@Linker@General@Enable printf Float" v="True" />
-<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@Linker@Optimization@Optimization Level" v="None" />
+<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@Linker@General@Enable Float printf" v="False" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@Linker@Optimization@Remove Unused Functions" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@Linker@Command Line@Command Line" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@General@Output Directory" v="${ProjectDir}\${ProcessorType}\${Platform}\${Config}" />
@@ -3527,6 +3566,7 @@
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@C/C++@Optimization@Inline Functions" v="False" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@C/C++@Optimization@Optimization Level" v="None" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@C/C++@Optimization@Link Time Optimization" v="False" />
+<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@C/C++@Optimization@Fat LTO objects" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@C/C++@Command Line@Command Line" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@Library Generation@Command Line@Command Line" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@Linker@General@Additional Libraries" v="" />
@@ -3534,11 +3574,9 @@
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@Linker@General@Additional Link Files" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@Linker@General@Generate Map File" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@Linker@General@Custom Linker Script" v="" />
-<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@Linker@General@Use Debugging Information" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@Linker@General@Use Default Libs" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@Linker@General@Use Nano Lib" v="True" />
-<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@Linker@General@Enable printf Float" v="True" />
-<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@Linker@Optimization@Optimization Level" v="None" />
+<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@Linker@General@Enable Float printf" v="False" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@Linker@Optimization@Remove Unused Functions" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@Linker@Command Line@Command Line" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@General@Output Directory" v="${ProjectDir}\${ProcessorType}\${Platform}\${Config}" />
@@ -3562,6 +3600,7 @@
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@C/C++@Optimization@Inline Functions" v="False" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@C/C++@Optimization@Optimization Level" v="Size" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@C/C++@Optimization@Link Time Optimization" v="False" />
+<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@C/C++@Optimization@Fat LTO objects" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@C/C++@Command Line@Command Line" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@Library Generation@Command Line@Command Line" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@Linker@General@Additional Libraries" v="" />
@@ -3569,11 +3608,9 @@
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@Linker@General@Additional Link Files" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@Linker@General@Generate Map File" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@Linker@General@Custom Linker Script" v="" />
-<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@Linker@General@Use Debugging Information" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@Linker@General@Use Default Libs" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@Linker@General@Use Nano Lib" v="True" />
-<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@Linker@General@Enable printf Float" v="True" />
-<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@Linker@Optimization@Optimization Level" v="None" />
+<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@Linker@General@Enable Float printf" v="False" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@Linker@Optimization@Remove Unused Functions" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@Linker@Command Line@Command Line" v="" />
 </name>
@@ -3581,101 +3618,9 @@
 <platform>
 <name v="5bca58cd-5542-421c-b08d-9513dbb687fd">
 <name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@General@Output Directory" v="${ProjectDir}\${ProcessorType}\${Platform}\${Config}" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@Assembly@General@Additional Include Directories" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@Assembly@General@Generate Debugging Information" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@Assembly@General@Suppress Warnings" v="False" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@Assembly@General@Generate List Files" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@Assembly@Command Line@Command Line" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@C/C++@General@Additional Include Directories" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@C/C++@General@Generate List Files" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@C/C++@General@Default Char Unsigned" v="False" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@C/C++@General@Generate Debugging Information" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@C/C++@General@Preprocessor Definitions" v="DEBUG" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@C/C++@General@Strict Compilation" v="False" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@C/C++@Optimization@Inline Functions" v="False" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@C/C++@Optimization@Optimization Level" v="None" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@C/C++@Optimization@Split Sections" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@C/C++@Command Line@Command Line" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@Library Generation@Command Line@Command Line" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@Linker@General@Additional Libraries" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@Linker@General@Additional Library Directories" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@Linker@General@Generate Map File" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@Linker@General@Custom Linker Script" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@Linker@General@Generate Debugging Information" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@Linker@General@Use Default Libs" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM0@Linker@Command Line@Command Line" v="" />
 <name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@General@Output Directory" v="${ProjectDir}\${ProcessorType}\${Platform}\${Config}" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@Assembly@General@Additional Include Directories" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@Assembly@General@Generate Debugging Information" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@Assembly@General@Suppress Warnings" v="False" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@Assembly@General@Generate List Files" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@Assembly@Command Line@Command Line" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@C/C++@General@Additional Include Directories" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@C/C++@General@Generate List Files" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@C/C++@General@Default Char Unsigned" v="False" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@C/C++@General@Generate Debugging Information" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@C/C++@General@Preprocessor Definitions" v="NDEBUG" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@C/C++@General@Strict Compilation" v="False" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@C/C++@Optimization@Inline Functions" v="False" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@C/C++@Optimization@Optimization Level" v="Size" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@C/C++@Optimization@Split Sections" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@C/C++@Command Line@Command Line" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@Library Generation@Command Line@Command Line" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@Linker@General@Additional Libraries" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@Linker@General@Additional Library Directories" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@Linker@General@Generate Map File" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@Linker@General@Custom Linker Script" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@Linker@General@Generate Debugging Information" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@Linker@General@Use Default Libs" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM0@Linker@Command Line@Command Line" v="" />
 <name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@General@Output Directory" v="${ProjectDir}\${ProcessorType}\${Platform}\${Config}" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@Assembly@General@Additional Include Directories" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@Assembly@General@Generate Debugging Information" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@Assembly@General@Suppress Warnings" v="False" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@Assembly@General@Generate List Files" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@Assembly@Command Line@Command Line" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@C/C++@General@Additional Include Directories" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@C/C++@General@Generate List Files" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@C/C++@General@Default Char Unsigned" v="False" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@C/C++@General@Generate Debugging Information" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@C/C++@General@Preprocessor Definitions" v="DEBUG" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@C/C++@General@Strict Compilation" v="False" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@C/C++@Optimization@Inline Functions" v="False" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@C/C++@Optimization@Optimization Level" v="None" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@C/C++@Optimization@Split Sections" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@C/C++@Command Line@Command Line" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@Library Generation@Command Line@Command Line" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@Linker@General@Additional Libraries" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@Linker@General@Additional Library Directories" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@Linker@General@Generate Map File" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@Linker@General@Custom Linker Script" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@Linker@General@Generate Debugging Information" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@Linker@General@Use Default Libs" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Debug@CortexM3@Linker@Command Line@Command Line" v="" />
 <name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@General@Output Directory" v="${ProjectDir}\${ProcessorType}\${Platform}\${Config}" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@Assembly@General@Additional Include Directories" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@Assembly@General@Generate Debugging Information" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@Assembly@General@Suppress Warnings" v="False" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@Assembly@General@Generate List Files" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@Assembly@Command Line@Command Line" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@C/C++@General@Additional Include Directories" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@C/C++@General@Generate List Files" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@C/C++@General@Default Char Unsigned" v="False" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@C/C++@General@Generate Debugging Information" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@C/C++@General@Preprocessor Definitions" v="NDEBUG" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@C/C++@General@Strict Compilation" v="False" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@C/C++@Optimization@Inline Functions" v="False" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@C/C++@Optimization@Optimization Level" v="Size" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@C/C++@Optimization@Split Sections" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@C/C++@Command Line@Command Line" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@Library Generation@Command Line@Command Line" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@Linker@General@Additional Libraries" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@Linker@General@Additional Library Directories" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@Linker@General@Generate Map File" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@Linker@General@Custom Linker Script" v="" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@Linker@General@Generate Debugging Information" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@Linker@General@Use Default Libs" v="True" />
-<name_val_pair name="5bca58cd-5542-421c-b08d-9513dbb687fd@Release@CortexM3@Linker@Command Line@Command Line" v="" />
 </name>
 </platform>
 <platform>
@@ -3699,6 +3644,7 @@
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Debug@CortexM0@Library Generation@Command Line@Command Line" v="" />
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Debug@CortexM0@Linker@General@Additional Libraries" v="" />
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Debug@CortexM0@Linker@General@Additional Library Directories" v="" />
+<name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Debug@CortexM0@Linker@General@Use MicroLib" v="True" />
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Debug@CortexM0@Linker@General@Generate Map File" v="True" />
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Debug@CortexM0@Linker@General@Custom Linker Script" v="" />
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Debug@CortexM0@Linker@General@Generate Debugging Information" v="True" />
@@ -3723,6 +3669,7 @@
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Release@CortexM0@Library Generation@Command Line@Command Line" v="" />
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Release@CortexM0@Linker@General@Additional Libraries" v="" />
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Release@CortexM0@Linker@General@Additional Library Directories" v="" />
+<name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Release@CortexM0@Linker@General@Use MicroLib" v="True" />
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Release@CortexM0@Linker@General@Generate Map File" v="True" />
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Release@CortexM0@Linker@General@Custom Linker Script" v="" />
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Release@CortexM0@Linker@General@Generate Debugging Information" v="True" />
@@ -3747,6 +3694,7 @@
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Debug@CortexM3@Library Generation@Command Line@Command Line" v="" />
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Debug@CortexM3@Linker@General@Additional Libraries" v="" />
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Debug@CortexM3@Linker@General@Additional Library Directories" v="" />
+<name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Debug@CortexM3@Linker@General@Use MicroLib" v="True" />
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Debug@CortexM3@Linker@General@Generate Map File" v="True" />
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Debug@CortexM3@Linker@General@Custom Linker Script" v="" />
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Debug@CortexM3@Linker@General@Generate Debugging Information" v="True" />
@@ -3771,6 +3719,7 @@
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Release@CortexM3@Library Generation@Command Line@Command Line" v="" />
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Release@CortexM3@Linker@General@Additional Libraries" v="" />
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Release@CortexM3@Linker@General@Additional Library Directories" v="" />
+<name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Release@CortexM3@Linker@General@Use MicroLib" v="True" />
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Release@CortexM3@Linker@General@Generate Map File" v="True" />
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Release@CortexM3@Linker@General@Custom Linker Script" v="" />
 <name_val_pair name="fdb8e1ae-f83a-46cf-9446-1d703716f38a@Release@CortexM3@Linker@General@Generate Debugging Information" v="True" />
@@ -3790,11 +3739,9 @@
 </platforms>
 <project_current_platform v="c9323d49-d323-40b8-9b59-cc008d68a989" />
 <project_current_processor v="CortexM3" />
-<component_generation v="PSoC Creator  2.2 Component Pack 6" />
 <last_selected_tab v="Cypress" />
-<component_dependent_projects_generation v="(69eeda1b-ded5-4da3-a74d-3a98f2d5d4ab , 2.1PR) | (b1a3f413-e018-46a5-a51c-20818b2f118e , 3.0) | (cd381074-8dad-4f43-bb88-7719b3e16126 , 2.1) | (29420278-6fcc-46a7-a651-999ec5c253d2 , 2.1) | (e95576e7-780d-474a-b944-018db0492cc9 , 2.1)" />
-<WriteAppVersionLastSavedWith v="3.1.0.1570" />
-<WriteAppMarketingVersionLastSavedWith v=" 3.1" />
+<WriteAppVersionLastSavedWith v="3.3.0.410" />
+<WriteAppMarketingVersionLastSavedWith v=" 3.3" />
 <project_id v="6e1f5cbb-a0ca-4f55-a1fa-7b20c5be3a3e" /><custom_data><CyGuid_7a7929f8-5e3b-4f86-a093-2d4ee6513111 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtProjectCustomData" version="1"><CyGuid_fdba8dfd-b15b-4469-9bbb-9e40c3e70997 type_name="CyDesigner.Common.Base.CyCustomData" version="2"><userData /></CyGuid_fdba8dfd-b15b-4469-9bbb-9e40c3e70997><properties /></CyGuid_7a7929f8-5e3b-4f86-a093-2d4ee6513111></custom_data></CyGuid_49cfd574-032a-4a64-b7be-d4eeeaf25e43>
 </CyGuid_60697ce6-dce2-4816-8680-4de0635742eb>
 <top_block v="TopDesign" />
@@ -3808,7 +3755,5 @@
 <ignored_deps />
 </CyGuid_495451fe-d201-4d01-b22d-5d3f5609ac37>
 <boot_component v="cy_boot_v4_20" />
-<BootloaderTag hexFile="" elfFile="" />
-<current_generation v="7" />
-</CyGuid_fec8f9e8-2365-4bdb-96d3-a4380222e01b>
+<current_generation v="7" /><BootloaderTag hexFile="" elfFile="" /></CyGuid_fec8f9e8-2365-4bdb-96d3-a4380222e01b>
 </CyXmlSerializer>

+ 6 - 6
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/SCSI2SD.svd

@@ -9,7 +9,7 @@
     <peripheral>
       <name>SCSI_Parity_Error</name>
       <description>No description available</description>
-      <baseAddress>0x4000646B</baseAddress>
+      <baseAddress>0x40006464</baseAddress>
       <addressBlock>
         <offset>0</offset>
         <size>0x0</size>
@@ -456,7 +456,7 @@
     <peripheral>
       <name>SCSI_Filtered</name>
       <description>No description available</description>
-      <baseAddress>0x4000646A</baseAddress>
+      <baseAddress>0x40006461</baseAddress>
       <addressBlock>
         <offset>0</offset>
         <size>0x0</size>
@@ -611,7 +611,7 @@
     <peripheral>
       <name>SCSI_Glitch_Ctl</name>
       <description>No description available</description>
-      <baseAddress>0x40006474</baseAddress>
+      <baseAddress>0x4000647A</baseAddress>
       <addressBlock>
         <offset>0</offset>
         <size>0x0</size>
@@ -632,7 +632,7 @@
     <peripheral>
       <name>SCSI_CTL_PHASE</name>
       <description>No description available</description>
-      <baseAddress>0x40006472</baseAddress>
+      <baseAddress>0x4000647B</baseAddress>
       <addressBlock>
         <offset>0</offset>
         <size>0x0</size>
@@ -1137,7 +1137,7 @@
     <peripheral>
       <name>SCSI_Out_Ctl</name>
       <description>No description available</description>
-      <baseAddress>0x4000647F</baseAddress>
+      <baseAddress>0x40006475</baseAddress>
       <addressBlock>
         <offset>0</offset>
         <size>0x0</size>
@@ -1158,7 +1158,7 @@
     <peripheral>
       <name>SCSI_Out_Bits</name>
       <description>No description available</description>
-      <baseAddress>0x4000647B</baseAddress>
+      <baseAddress>0x40006575</baseAddress>
       <addressBlock>
         <offset>0</offset>
         <size>0x0</size>

二進制
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/TopDesign/TopDesign.cysch


+ 61 - 42
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/scsiTarget/scsiTarget.v

@@ -63,7 +63,7 @@ localparam IO_READ = 1'b0;
 /////////////////////////////////////////////////////////////////////////////
 // TX States:
 // IDLE
-//     Wait for the SCSI Initiator to be ready
+//     Wait for an entry in the input FIFO
 // FIFOLOAD
 //     Load F0 into A0. Feed (old) A0 into the ALU SRCA.
 // TX
@@ -79,27 +79,28 @@ localparam IO_READ = 1'b0;
 // READY
 //     REQ and DBx output signals will be output in this state
 //     Wait for acknowledgement from the SCSI initiator
-//     Wait for space in output fifo
 // RX
-//     Dummy state for flow control.
-//     REQ signal will be output in this state
-//     PI enabled for input into ALU "PASS" operation, storing into F1.
+//     Wait for the initiator to release he ACK signal. Once released,
+//     PI enabled for input into ALU "PASS" operation, storing into F1 in the
+//     next state, either IDLE or FIFOLOAD.
 //
 // RX States:
 // IDLE
-//     Wait for a dummy "enabling" entry in the input FIFO,
-//     and for the SCSI Initiator to be ready
+//     Wait for a dummy "enabling" entry in the input FIFO
 // FIFOLOAD
 //     Load F0 into A0.
 //     The input FIFO is used to control the number of bytes we attempt to
 //     read from the SCSI bus.
+// WAIT_TIL_READY
+//     Wait for space in output fifo
+//
 // READY
 //     REQ signal will be output in this state
 //     Wait for the initiator to send a byte on the SCSI bus.
-//     Wait for space in output fifo
 // RX
-//     REQ signal will be output in this state
-//     PI enabled for input into ALU "PASS" operation, storing into F1.
+//     Wait for the initiator to release he ACK signal. Once released,
+//     PI enabled for input into ALU "PASS" operation, storing into F1 in the
+//     next state, either IDLE or FIFOLOAD.
 
 
 localparam STATE_IDLE = 3'b000;
@@ -138,11 +139,12 @@ reg parityErrReg;
 reg[2:0] genParity;
 
 reg REQReg;
+reg[7:0] dbxInReg;
 
 // Set Output Pins
 assign REQ = REQReg; // STATE_READY & STATE_RX
 assign DBx_out[7:0] = data;
-assign pi[7:0] = ~nDBx_in[7:0]; // Invert active low scsi bus
+assign pi[7:0] = dbxInReg[7:0];
 assign parityErr = parityErrReg;
 
 
@@ -163,7 +165,7 @@ wire f0_bus_stat;   // Tx FIFO not full
 wire f0_blk_stat;	// Tx FIFO empty
 wire f1_bus_stat;	// Rx FIFO not empty
 wire f1_blk_stat;	// Rx FIFO full
-wire txComplete = f0_blk_stat && (state == STATE_IDLE) && nACK;
+wire txComplete = f0_blk_stat && (state == STATE_IDLE);
 cy_psoc3_status #(.cy_force_order(1), .cy_md_select(8'h00)) StatusReg
 (
 	.clock(op_clk),
@@ -198,17 +200,21 @@ always @(posedge op_clk) begin
 		end
 
 		STATE_FIFOLOAD:
+		begin
+			fifoStore <= 1'b0;
+
 			if (!nRST) state <= STATE_IDLE;
 			else if (IO == IO_WRITE)
 				state <= STATE_TX;
 
-			// Check that SCSI initiator is ready, and output FIFO is not full.
-			else if (nACK && !f1_blk_stat) begin
+			// Check the output FIFO is not full.
+			else if (!f1_blk_stat) begin
 				state <= STATE_READY;
 				REQReg <= 1'b1;
 			end else begin
 				state <= STATE_WAIT_TIL_READY;
 			end
+		end
 
 		STATE_TX:
 		begin
@@ -223,19 +229,16 @@ always @(posedge op_clk) begin
 
 		STATE_DESKEW:
 			if (!nRST) state <= STATE_IDLE;
-			else if(deskewComplete && nACK) begin
+			else if(deskewComplete) begin
 				state <= STATE_READY;
 				REQReg <= 1'b1;
-			end else if (deskewComplete) begin
-				state <= STATE_WAIT_TIL_READY;
 			end else state <= STATE_DESKEW;
 
-		STATE_WAIT_TIL_READY:
+		STATE_WAIT_TIL_READY: // IO == IO_READ only
 			if (!nRST) state <= STATE_IDLE;
 
-			// Check that SCSI initiator is ready, and output FIFO is not full.
-			// Note that output FIFO is unused in TX mode.
-			else if (nACK && ((IO == IO_WRITE) || !f1_blk_stat)) begin
+			// Wait until the output FIFO is not full.
+			else if (!f1_blk_stat) begin
 				state <= STATE_READY;
 				REQReg <= 1'b1;
 			end else begin
@@ -246,7 +249,7 @@ always @(posedge op_clk) begin
 			if (!nRST) state <= STATE_IDLE;
 			else if (~nACK) begin
 				state <= STATE_RX;
-				fifoStore <= 1'b1;
+				dbxInReg[7:0] = ~nDBx_in[7:0]; // Invert active low scsi bus
 
 				genParity[0] <= (~nDBP) ^ 1'b1 ^ ~nDBx_in[7] ^ ~nDBx_in[6];
 				genParity[1] <= ~nDBx_in[5] ^ ~nDBx_in[4] ^ ~nDBx_in[3];
@@ -255,9 +258,24 @@ always @(posedge op_clk) begin
 
 		STATE_RX:
 		begin
-			state <= STATE_IDLE;
+			// Wait for this transfer to complete.
+			// We need to wait at the end, because some hosts will set ACK
+			// before REQ for the first byte of a phase.
+			if (!nRST) state <= STATE_IDLE;
+			else if (nACK && !f0_blk_stat)
+			begin // Next byte is ready, skip IDLE.
+				fifoStore <= 1'b1;
+				state <= STATE_FIFOLOAD;
+			end
+			else if (nACK)
+			begin
+				fifoStore <= 1'b1;
+				state <= STATE_IDLE;
+			end
+			else
+				state <= STATE_RX;
+
 			REQReg <= 1'b0;
-			fifoStore <= 1'b0;
 			parityErrReg <= 1'b0;
 			data <= 8'b0;
 			if (IO == IO_READ) begin
@@ -273,58 +291,58 @@ end
 // The data output is valid during the DESKEW_INIT phase as well,
 // so we subtract 1.
 // SCSI-1 deskew + cable skew = 55ns
-// D0 = [0.000000055 / (1 / clk)] - 1 = 2
+// D0 = [0.000000055 / (1 / clk)] - 1 = 1 (clk = 25MHz)
 // SCSI-2 FAST deskew + cable skew = 25ns
-// D0 = [0.000000025 / (1 / clk)] - 1 = 0
-cy_psoc3_dp #(.d0_init(2), 
+// D0 = [0.000000025 / (1 / clk)] - 1 = 0 (clk = 25MHz)
+cy_psoc3_dp #(.d0_init(1), 
 .cy_dpconfig(
 {
     `CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
     `CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
-    `CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
-    `CS_CMP_SEL_CFGA, /*CFGRAM0:           IDLE*/
+    `CS_FEEDBACK_ENBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
+    `CS_CMP_SEL_CFGA, /*CFGRAM0:            IDLE*/
     `CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
     `CS_SHFT_OP_PASS, `CS_A0_SRC___F0, `CS_A1_SRC_NONE,
-    `CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
-    `CS_CMP_SEL_CFGA, /*CFGRAM1:           FIFO Load*/
+    `CS_FEEDBACK_ENBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
+    `CS_CMP_SEL_CFGA, /*CFGRAM1:            FIFO Load*/
     `CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
     `CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
     `CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
-    `CS_CMP_SEL_CFGA, /*CFGRAM2:           TX*/
+    `CS_CMP_SEL_CFGA, /*CFGRAM2:            TX*/
     `CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
     `CS_SHFT_OP_PASS, `CS_A0_SRC___D0, `CS_A1_SRC_NONE,
     `CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
-    `CS_CMP_SEL_CFGA, /*CFGRAM3:           DESKEW INIT*/
+    `CS_CMP_SEL_CFGA, /*CFGRAM3:            DESKEW INIT*/
     `CS_ALU_OP__DEC, `CS_SRCA_A0, `CS_SRCB_D0,
     `CS_SHFT_OP_PASS, `CS_A0_SRC__ALU, `CS_A1_SRC_NONE,
     `CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
-    `CS_CMP_SEL_CFGA, /*CFGRAM4:           DESKEW*/
+    `CS_CMP_SEL_CFGA, /*CFGRAM4:            DESKEW*/
     `CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
     `CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
     `CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
-    `CS_CMP_SEL_CFGA, /*CFGRAM5: WAIT TIL READY*/
+    `CS_CMP_SEL_CFGA, /*CFGRAM5:  WAIT TIL READY*/
     `CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
     `CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
     `CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
-    `CS_CMP_SEL_CFGA, /*CFGRAM6:           READY*/
+    `CS_CMP_SEL_CFGA, /*CFGRAM6:            READY*/
     `CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
     `CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
     `CS_FEEDBACK_ENBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
-    `CS_CMP_SEL_CFGA, /*CFGRAM7:           RX*/
-    8'hFF, 8'h00,  /*CFG9:              */
-    8'hFF, 8'hFF,  /*CFG11-10:              */
+    `CS_CMP_SEL_CFGA, /*CFGRAM7:            RX*/
+    8'hFF, 8'h00,  /*CFG9:               */
+    8'hFF, 8'hFF,  /*CFG11-10:               */
     `SC_CMPB_A1_D1, `SC_CMPA_A1_D1, `SC_CI_B_ARITH,
     `SC_CI_A_ARITH, `SC_C1_MASK_DSBL, `SC_C0_MASK_DSBL,
     `SC_A_MASK_DSBL, `SC_DEF_SI_0, `SC_SI_B_DEFSI,
-    `SC_SI_A_DEFSI, /*CFG13-12:              */
+    `SC_SI_A_DEFSI, /*CFG13-12:               */
     `SC_A0_SRC_ACC, `SC_SHIFT_SL, `SC_PI_DYN_EN,
     1'h0, `SC_FIFO1_ALU, `SC_FIFO0_BUS,
     `SC_MSB_DSBL, `SC_MSB_BIT0, `SC_MSB_NOCHN,
     `SC_FB_NOCHN, `SC_CMP1_NOCHN,
-    `SC_CMP0_NOCHN, /*CFG15-14:              */
+    `SC_CMP0_NOCHN, /*CFG15-14:               */
     10'h00, `SC_FIFO_CLK__DP,`SC_FIFO_CAP_AX,
     `SC_FIFO_LEVEL,`SC_FIFO__SYNC,`SC_EXTCRC_DSBL,
-    `SC_WRK16CAT_DSBL /*CFG17-16:              */
+    `SC_WRK16CAT_DSBL /*CFG17-16:               */
 }
 )) datapath(
         /*  input                   */  .reset(1'b0),
@@ -382,3 +400,4 @@ endmodule
 //`#end` -- edit above this line, do not edit this line
 
 
+

+ 5 - 0
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/Debug_Timer_Interrupt.c

@@ -20,6 +20,7 @@
 #include <CyLib.h>
 #include <Debug_Timer_Interrupt.h>
 
+
 #if !defined(Debug_Timer_Interrupt__REMOVED) /* Check for removal by optimization */
 
 /*******************************************************************************
@@ -158,6 +159,10 @@ void Debug_Timer_Interrupt_Stop(void)
 *******************************************************************************/
 CY_ISR(Debug_Timer_Interrupt_Interrupt)
 {
+    #ifdef Debug_Timer_Interrupt_INTERRUPT_INTERRUPT_CALLBACK
+        Debug_Timer_Interrupt_Interrupt_InterruptCallback();
+    #endif /* Debug_Timer_Interrupt_INTERRUPT_INTERRUPT_CALLBACK */ 
+
     /*  Place your Interrupt code here. */
     /* `#START Debug_Timer_Interrupt_Interrupt` */
 

+ 5 - 0
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RST_ISR.c

@@ -20,6 +20,7 @@
 #include <CyLib.h>
 #include <SCSI_RST_ISR.h>
 
+
 #if !defined(SCSI_RST_ISR__REMOVED) /* Check for removal by optimization */
 
 /*******************************************************************************
@@ -158,6 +159,10 @@ void SCSI_RST_ISR_Stop(void)
 *******************************************************************************/
 CY_ISR(SCSI_RST_ISR_Interrupt)
 {
+    #ifdef SCSI_RST_ISR_INTERRUPT_INTERRUPT_CALLBACK
+        SCSI_RST_ISR_Interrupt_InterruptCallback();
+    #endif /* SCSI_RST_ISR_INTERRUPT_INTERRUPT_CALLBACK */ 
+
     /*  Place your Interrupt code here. */
     /* `#START SCSI_RST_ISR_Interrupt` */
 

+ 5 - 0
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RX_DMA_COMPLETE.c

@@ -20,6 +20,7 @@
 #include <CyLib.h>
 #include <SCSI_RX_DMA_COMPLETE.h>
 
+
 #if !defined(SCSI_RX_DMA_COMPLETE__REMOVED) /* Check for removal by optimization */
 
 /*******************************************************************************
@@ -158,6 +159,10 @@ void SCSI_RX_DMA_COMPLETE_Stop(void)
 *******************************************************************************/
 CY_ISR(SCSI_RX_DMA_COMPLETE_Interrupt)
 {
+    #ifdef SCSI_RX_DMA_COMPLETE_INTERRUPT_INTERRUPT_CALLBACK
+        SCSI_RX_DMA_COMPLETE_Interrupt_InterruptCallback();
+    #endif /* SCSI_RX_DMA_COMPLETE_INTERRUPT_INTERRUPT_CALLBACK */ 
+
     /*  Place your Interrupt code here. */
     /* `#START SCSI_RX_DMA_COMPLETE_Interrupt` */
 

+ 5 - 0
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_SEL_ISR.c

@@ -20,6 +20,7 @@
 #include <CyLib.h>
 #include <SCSI_SEL_ISR.h>
 
+
 #if !defined(SCSI_SEL_ISR__REMOVED) /* Check for removal by optimization */
 
 /*******************************************************************************
@@ -158,6 +159,10 @@ void SCSI_SEL_ISR_Stop(void)
 *******************************************************************************/
 CY_ISR(SCSI_SEL_ISR_Interrupt)
 {
+    #ifdef SCSI_SEL_ISR_INTERRUPT_INTERRUPT_CALLBACK
+        SCSI_SEL_ISR_Interrupt_InterruptCallback();
+    #endif /* SCSI_SEL_ISR_INTERRUPT_INTERRUPT_CALLBACK */ 
+
     /*  Place your Interrupt code here. */
     /* `#START SCSI_SEL_ISR_Interrupt` */
 

+ 5 - 0
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_TX_DMA_COMPLETE.c

@@ -20,6 +20,7 @@
 #include <CyLib.h>
 #include <SCSI_TX_DMA_COMPLETE.h>
 
+
 #if !defined(SCSI_TX_DMA_COMPLETE__REMOVED) /* Check for removal by optimization */
 
 /*******************************************************************************
@@ -158,6 +159,10 @@ void SCSI_TX_DMA_COMPLETE_Stop(void)
 *******************************************************************************/
 CY_ISR(SCSI_TX_DMA_COMPLETE_Interrupt)
 {
+    #ifdef SCSI_TX_DMA_COMPLETE_INTERRUPT_INTERRUPT_CALLBACK
+        SCSI_TX_DMA_COMPLETE_Interrupt_InterruptCallback();
+    #endif /* SCSI_TX_DMA_COMPLETE_INTERRUPT_INTERRUPT_CALLBACK */ 
+
     /*  Place your Interrupt code here. */
     /* `#START SCSI_TX_DMA_COMPLETE_Interrupt` */
 

+ 19 - 2
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/SDCard_INT.c

@@ -18,6 +18,7 @@
 
 #include "SDCard_PVT.h"
 
+
 /* User code required at start of ISR */
 /* `#START SDCard_ISR_START_DEF` */
 
@@ -54,11 +55,15 @@ CY_ISR(SDCard_TX_ISR)
         uint8 tmpStatus;
     #endif /* (SDCard_TX_SOFTWARE_BUF_ENABLED) */
 
+    #ifdef SDCard_TX_ISR_ENTRY_CALLBACK
+        SDCard_TX_ISR_EntryCallback();
+    #endif /* SDCard_TX_ISR_ENTRY_CALLBACK */
+
     /* User code required at start of ISR */
     /* `#START SDCard_TX_ISR_START` */
 
     /* `#END` */
-
+    
     #if(SDCard_TX_SOFTWARE_BUF_ENABLED)
         /* Check if TX data buffer is not empty and there is space in TX FIFO */
         while(SDCard_txBufferRead != SDCard_txBufferWrite)
@@ -104,6 +109,10 @@ CY_ISR(SDCard_TX_ISR)
     /* `#START SDCard_TX_ISR_END` */
 
     /* `#END` */
+    
+    #ifdef SDCard_TX_ISR_EXIT_CALLBACK
+        SDCard_TX_ISR_ExitCallback();
+    #endif /* SDCard_TX_ISR_EXIT_CALLBACK */
 }
 
 
@@ -138,11 +147,15 @@ CY_ISR(SDCard_RX_ISR)
         uint8 rxData;
     #endif /* (SDCard_RX_SOFTWARE_BUF_ENABLED) */
 
+    #ifdef SDCard_RX_ISR_ENTRY_CALLBACK
+        SDCard_RX_ISR_EntryCallback();
+    #endif /* SDCard_RX_ISR_ENTRY_CALLBACK */
+
     /* User code required at start of ISR */
     /* `#START SDCard_RX_ISR_START` */
 
     /* `#END` */
-
+    
     #if(SDCard_RX_SOFTWARE_BUF_ENABLED)
 
         tmpStatus = SDCard_GET_STATUS_RX(SDCard_swStatusRx);
@@ -184,6 +197,10 @@ CY_ISR(SDCard_RX_ISR)
     /* `#START SDCard_RX_ISR_END` */
 
     /* `#END` */
+    
+    #ifdef SDCard_RX_ISR_EXIT_CALLBACK
+        SDCard_RX_ISR_ExitCallback();
+    #endif /* SDCard_RX_ISR_EXIT_CALLBACK */
 }
 
 /* [] END OF FILE */

+ 5 - 0
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_RX_DMA_COMPLETE.c

@@ -20,6 +20,7 @@
 #include <CyLib.h>
 #include <SD_RX_DMA_COMPLETE.h>
 
+
 #if !defined(SD_RX_DMA_COMPLETE__REMOVED) /* Check for removal by optimization */
 
 /*******************************************************************************
@@ -158,6 +159,10 @@ void SD_RX_DMA_COMPLETE_Stop(void)
 *******************************************************************************/
 CY_ISR(SD_RX_DMA_COMPLETE_Interrupt)
 {
+    #ifdef SD_RX_DMA_COMPLETE_INTERRUPT_INTERRUPT_CALLBACK
+        SD_RX_DMA_COMPLETE_Interrupt_InterruptCallback();
+    #endif /* SD_RX_DMA_COMPLETE_INTERRUPT_INTERRUPT_CALLBACK */ 
+
     /*  Place your Interrupt code here. */
     /* `#START SD_RX_DMA_COMPLETE_Interrupt` */
 

+ 5 - 0
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_TX_DMA_COMPLETE.c

@@ -20,6 +20,7 @@
 #include <CyLib.h>
 #include <SD_TX_DMA_COMPLETE.h>
 
+
 #if !defined(SD_TX_DMA_COMPLETE__REMOVED) /* Check for removal by optimization */
 
 /*******************************************************************************
@@ -158,6 +159,10 @@ void SD_TX_DMA_COMPLETE_Stop(void)
 *******************************************************************************/
 CY_ISR(SD_TX_DMA_COMPLETE_Interrupt)
 {
+    #ifdef SD_TX_DMA_COMPLETE_INTERRUPT_INTERRUPT_CALLBACK
+        SD_TX_DMA_COMPLETE_Interrupt_InterruptCallback();
+    #endif /* SD_TX_DMA_COMPLETE_INTERRUPT_INTERRUPT_CALLBACK */ 
+
     /*  Place your Interrupt code here. */
     /* `#START SD_TX_DMA_COMPLETE_Interrupt` */
 

+ 46 - 1
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_audio.c

@@ -17,6 +17,7 @@
 
 #include "USBFS.h"
 
+
 #if defined(USBFS_ENABLE_AUDIO_CLASS)
 
 #include "USBFS_audio.h"
@@ -124,6 +125,11 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
                 /* `#START AUDIO_READ_REQUESTS` Place other request handler here */
 
                 /* `#END` */
+                
+                #ifdef USBFS_DISPATCH_AUDIO_CLASS_AUDIO_READ_REQUESTS_CALLBACK
+                    USBFS_DispatchAUDIOClass_AUDIO_READ_REQUESTS_Callback();
+                #endif /* USBFS_DISPATCH_AUDIO_CLASS_AUDIO_READ_REQUESTS_CALLBACK */
+
                     break;
                 default:
                     break;
@@ -142,7 +148,11 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
 
                         /* `#END` */
 
-                         /* Entity ID Control Selector is MUTE */
+                        #ifdef USBFS_DISPATCH_AUDIO_CLASS_MUTE_CONTROL_GET_REQUEST_CALLBACK
+                            USBFS_DispatchAUDIOClass_MUTE_CONTROL_GET_REQUEST_Callback();
+                        #endif /* USBFS_DISPATCH_AUDIO_CLASS_MUTE_CONTROL_GET_REQUEST_CALLBACK */
+
+                        /* Entity ID Control Selector is MUTE */
                         USBFS_currentTD.wCount = 1u;
                         USBFS_currentTD.pData  = &USBFS_currentMute;
                         requestHandled   = USBFS_InitControlRead();
@@ -153,6 +163,10 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
 
                         /* `#END` */
 
+                        #ifdef USBFS_DISPATCH_AUDIO_CLASS_VOLUME_CONTROL_GET_REQUEST_CALLBACK
+                            USBFS_DispatchAUDIOClass_VOLUME_CONTROL_GET_REQUEST_Callback();
+                        #endif /* USBFS_DISPATCH_AUDIO_CLASS_VOLUME_CONTROL_GET_REQUEST_CALLBACK */
+
                         /* Entity ID Control Selector is VOLUME, */
                         USBFS_currentTD.wCount = USBFS_VOLUME_LEN;
                         USBFS_currentTD.pData  = USBFS_currentVolume;
@@ -163,6 +177,10 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
                         /* `#START OTHER_GET_CUR_REQUESTS` Place other request handler here */
 
                         /* `#END` */
+
+                        #ifdef USBFS_DISPATCH_AUDIO_CLASS_OTHER_GET_CUR_REQUESTS_CALLBACK
+                            USBFS_DispatchAUDIOClass_OTHER_GET_CUR_REQUESTS_Callback();
+                        #endif /* USBFS_DISPATCH_AUDIO_CLASS_OTHER_GET_CUR_REQUESTS_CALLBACK */
                     }
                     break;
                 case USBFS_GET_MIN:    /* GET_MIN */
@@ -205,6 +223,11 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
                 /* `#START AUDIO_WRITE_REQUESTS` Place other request handler here */
 
                 /* `#END` */
+
+                #ifdef USBFS_DISPATCH_AUDIO_CLASS_AUDIO_WRITE_REQUESTS_CALLBACK
+                    USBFS_DispatchAUDIOClass_AUDIO_WRITE_REQUESTS_Callback();
+                #endif /* USBFS_DISPATCH_AUDIO_CLASS_AUDIO_WRITE_REQUESTS_CALLBACK */
+
                     break;
                 default:
                     break;
@@ -237,6 +260,11 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
                 /* `#START AUDIO_SAMPLING_FREQ_REQUESTS` Place other request handler here */
 
                 /* `#END` */
+
+                #ifdef USBFS_DISPATCH_AUDIO_CLASS_AUDIO_SAMPLING_FREQ_REQUESTS_CALLBACK
+                    USBFS_DispatchAUDIOClass_AUDIO_SAMPLING_FREQ_REQUESTS_Callback();
+                #endif /* USBFS_DISPATCH_AUDIO_CLASS_AUDIO_SAMPLING_FREQ_REQUESTS_CALLBACK */
+
                     break;
                 default:
                     break;
@@ -255,6 +283,10 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
 
                         /* `#END` */
 
+                        #ifdef USBFS_DISPATCH_AUDIO_CLASS_MUTE_SET_REQUEST_CALLBACK
+                            USBFS_DispatchAUDIOClass_MUTE_SET_REQUEST_Callback();
+                        #endif /* USBFS_DISPATCH_AUDIO_CLASS_MUTE_SET_REQUEST_CALLBACK */
+
                         /* Entity ID Control Selector is MUTE */
                         USBFS_currentTD.wCount = 1u;
                         USBFS_currentTD.pData  = &USBFS_currentMute;
@@ -266,6 +298,10 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
 
                         /* `#END` */
 
+                        #ifdef USBFS_DISPATCH_AUDIO_CLASS_VOLUME_CONTROL_SET_REQUEST_CALLBACK
+                            USBFS_DispatchAUDIOClass_VOLUME_CONTROL_SET_REQUEST_Callback();
+                        #endif /* USBFS_DISPATCH_AUDIO_CLASS_VOLUME_CONTROL_SET_REQUEST_CALLBACK */
+
                         /* Entity ID Control Selector is VOLUME */
                         USBFS_currentTD.wCount = USBFS_VOLUME_LEN;
                         USBFS_currentTD.pData  = USBFS_currentVolume;
@@ -276,12 +312,21 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
                         /* `#START OTHER_SET_CUR_REQUESTS` Place other request handler here */
 
                         /* `#END` */
+
+                        #ifdef USBFS_DISPATCH_AUDIO_CLASS_OTHER_SET_CUR_REQUESTS_CALLBACK
+                            USBFS_DispatchAUDIOClass_OTHER_SET_CUR_REQUESTS_Callback();
+                        #endif /* USBFS_DISPATCH_AUDIO_CLASS_OTHER_SET_CUR_REQUESTS_CALLBACK */
                     }
                 #endif /*  USBFS_ENABLE_AUDIO_STREAMING */
 
                 /* `#START AUDIO_CONTROL_SEL_REQUESTS` Place other request handler here */
 
                 /* `#END` */
+
+                #ifdef USBFS_DISPATCH_AUDIO_CLASS_AUDIO_CONTROL_SEL_REQUESTS_CALLBACK
+                    USBFS_DispatchAUDIOClass_AUDIO_CONTROL_SEL_REQUESTS_Callback();
+                #endif /* USBFS_DISPATCH_AUDIO_CLASS_AUDIO_CONTROL_SEL_REQUESTS_CALLBACK */
+
                     break;
                 default:
                     break;

+ 9 - 0
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_cdc.c

@@ -23,6 +23,7 @@
 #include "USBFS_pvt.h"
 
 
+
 /***************************************
 *    CDC Variables
 ***************************************/
@@ -104,6 +105,10 @@ uint8 USBFS_DispatchCDCClassRqst(void)
 
             /* `#END` */
 
+            #ifdef USBFS_DISPATCH_CDC_CLASS_CDC_READ_REQUESTS_CALLBACK
+                USBFS_DispatchCDCClass_CDC_READ_REQUESTS_Callback();
+            #endif /* USBFS_DISPATCH_CDC_CLASS_CDC_READ_REQUESTS_CALLBACK */
+
             default:    /* requestHandled is initialized as FALSE by default */
                 break;
         }
@@ -130,6 +135,10 @@ uint8 USBFS_DispatchCDCClassRqst(void)
 
             /* `#END` */
 
+            #ifdef USBFS_DISPATCH_CDC_CLASS_CDC_WRITE_REQUESTS_CALLBACK
+                USBFS_DispatchCDCClass_CDC_WRITE_REQUESTS_Callback();
+            #endif /* USBFS_DISPATCH_CDC_CLASS_CDC_WRITE_REQUESTS_CALLBACK */
+
             default:    /* requestHandled is initialized as FALSE by default */
                 break;
         }

+ 5 - 0
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_cls.c

@@ -21,6 +21,7 @@
 #include "USBFS_pvt.h"
 
 
+
 /***************************************
 * User Implemented Class Driver Declarations.
 ***************************************/
@@ -89,6 +90,10 @@ uint8 USBFS_DispatchClassRqst(void)
 
     /* `#END` */
 
+    #ifdef USBFS_DISPATCH_CLASS_RQST_CALLBACK
+        USBFS_DispatchClassRqst_Callback();
+    #endif /* USBFS_DISPATCH_CLASS_RQST_CALLBACK */
+
     return(requestHandled);
 }
 

+ 8 - 1
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_drv.c

@@ -18,6 +18,7 @@
 #include "USBFS_pvt.h"
 
 
+
 /***************************************
 * Global data allocation
 ***************************************/
@@ -68,7 +69,10 @@ CY_ISR(USBFS_EP_0_ISR)
     uint8 bRegTemp;
     uint8 modifyReg;
 
-
+    #ifdef USBFS_EP_0_ISR_ENTRY_CALLBACK
+        USBFS_EP_0_ISR_EntryCallback();
+    #endif /* USBFS_EP_0_ISR_ENTRY_CALLBACK */
+    
     bRegTemp = CY_GET_REG8(USBFS_EP0_CR_PTR);
     if ((bRegTemp & USBFS_MODE_ACKD) != 0u)
     {
@@ -128,6 +132,9 @@ CY_ISR(USBFS_EP_0_ISR)
             }
         }
     }
+    #ifdef USBFS_EP_0_ISR_EXIT_CALLBACK
+        USBFS_EP_0_ISR_ExitCallback();
+    #endif /* USBFS_EP_0_ISR_EXIT_CALLBACK */
 }
 
 

+ 101 - 0
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_episr.c

@@ -16,6 +16,7 @@
 
 #include "USBFS.h"
 #include "USBFS_pvt.h"
+
 #if (defined(USBFS_ENABLE_MIDI_STREAMING) && (USBFS_ENABLE_MIDI_API != 0u))
     #include "USBFS_midi.h"
 #endif /* (defined(USBFS_ENABLE_MIDI_STREAMING) && (USBFS_ENABLE_MIDI_API != 0u)) */
@@ -57,6 +58,10 @@
             uint8 int_en;
         #endif /* USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3 */
 
+        #ifdef USBFS_EP_1_ISR_ENTRY_CALLBACK
+            USBFS_EP_1_ISR_EntryCallback();
+        #endif /* USBFS_EP_1_ISR_ENTRY_CALLBACK */
+
         /* `#START EP1_USER_CODE` Place your code here */
 
         /* `#END` */
@@ -90,6 +95,10 @@
 
         /* `#END` */
 
+        #ifdef USBFS_EP_1_ISR_EXIT_CALLBACK
+            USBFS_EP_1_ISR_ExitCallback();
+        #endif /* USBFS_EP_1_ISR_EXIT_CALLBACK */
+
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)
             EA = int_en;
@@ -122,6 +131,10 @@
             uint8 int_en;
         #endif /* USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3 */
 
+        #ifdef USBFS_EP_2_ISR_ENTRY_CALLBACK
+            USBFS_EP_2_ISR_EntryCallback();
+        #endif /* USBFS_EP_2_ISR_ENTRY_CALLBACK */
+
         /* `#START EP2_USER_CODE` Place your code here */
 
         /* `#END` */
@@ -155,6 +168,10 @@
 
         /* `#END` */
 
+        #ifdef USBFS_EP_2_ISR_EXIT_CALLBACK
+            USBFS_EP_2_ISR_ExitCallback();
+        #endif /* USBFS_EP_2_ISR_EXIT_CALLBACK */
+        
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)
             EA = int_en;
@@ -187,6 +204,10 @@
             uint8 int_en;
         #endif /* USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3 */
 
+        #ifdef USBFS_EP_3_ISR_ENTRY_CALLBACK
+            USBFS_EP_3_ISR_EntryCallback();
+        #endif /* USBFS_EP_3_ISR_ENTRY_CALLBACK */
+
         /* `#START EP3_USER_CODE` Place your code here */
 
         /* `#END` */
@@ -220,6 +241,10 @@
 
         /* `#END` */
 
+        #ifdef USBFS_EP_3_ISR_EXIT_CALLBACK
+            USBFS_EP_3_ISR_ExitCallback();
+        #endif /* USBFS_EP_3_ISR_EXIT_CALLBACK */
+
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)
             EA = int_en;
@@ -252,6 +277,10 @@
             uint8 int_en;
         #endif /* CY_PSOC3 & USBFS_ISR_SERVICE_MIDI_OUT  */
 
+        #ifdef USBFS_EP_4_ISR_ENTRY_CALLBACK
+            USBFS_EP_4_ISR_EntryCallback();
+        #endif /* USBFS_EP_4_ISR_ENTRY_CALLBACK */
+
         /* `#START EP4_USER_CODE` Place your code here */
 
         /* `#END` */
@@ -285,6 +314,10 @@
 
         /* `#END` */
 
+        #ifdef USBFS_EP_4_ISR_EXIT_CALLBACK
+            USBFS_EP_4_ISR_ExitCallback();
+        #endif /* USBFS_EP_4_ISR_EXIT_CALLBACK */
+
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)
             EA = int_en;
@@ -317,6 +350,10 @@
             uint8 int_en;
         #endif /* CY_PSOC3 & USBFS_ISR_SERVICE_MIDI_OUT  */
 
+        #ifdef USBFS_EP_5_ISR_ENTRY_CALLBACK
+            USBFS_EP_5_ISR_EntryCallback();
+        #endif /* USBFS_EP_5_ISR_ENTRY_CALLBACK */
+
         /* `#START EP5_USER_CODE` Place your code here */
 
         /* `#END` */
@@ -350,6 +387,10 @@
 
         /* `#END` */
 
+        #ifdef USBFS_EP_5_ISR_EXIT_CALLBACK
+            USBFS_EP_5_ISR_ExitCallback();
+        #endif /* USBFS_EP_5_ISR_EXIT_CALLBACK */
+
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)
             EA = int_en;
@@ -381,6 +422,10 @@
             uint8 int_en;
         #endif /* CY_PSOC3 & USBFS_ISR_SERVICE_MIDI_OUT  */
 
+        #ifdef USBFS_EP_6_ISR_ENTRY_CALLBACK
+            USBFS_EP_6_ISR_EntryCallback();
+        #endif /* USBFS_EP_6_ISR_ENTRY_CALLBACK */
+
         /* `#START EP6_USER_CODE` Place your code here */
 
         /* `#END` */
@@ -414,6 +459,10 @@
 
         /* `#END` */
 
+        #ifdef USBFS_EP_6_ISR_EXIT_CALLBACK
+            USBFS_EP_6_ISR_ExitCallback();
+        #endif /* USBFS_EP_6_ISR_EXIT_CALLBACK */
+
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)
             EA = int_en;
@@ -446,6 +495,10 @@
             uint8 int_en;
         #endif /* CY_PSOC3 & USBFS_ISR_SERVICE_MIDI_OUT  */
 
+        #ifdef USBFS_EP_7_ISR_ENTRY_CALLBACK
+            USBFS_EP_7_ISR_EntryCallback();
+        #endif /* USBFS_EP_7_ISR_ENTRY_CALLBACK */
+
         /* `#START EP7_USER_CODE` Place your code here */
 
         /* `#END` */
@@ -479,6 +532,10 @@
 
         /* `#END` */
 
+        #ifdef USBFS_EP_7_ISR_EXIT_CALLBACK
+            USBFS_EP_7_ISR_ExitCallback();
+        #endif /* USBFS_EP_7_ISR_EXIT_CALLBACK */
+
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)
             EA = int_en;
@@ -511,6 +568,10 @@
             uint8 int_en;
         #endif /* CY_PSOC3 & USBFS_ISR_SERVICE_MIDI_OUT  */
 
+        #ifdef USBFS_EP_8_ISR_ENTRY_CALLBACK
+            USBFS_EP_8_ISR_EntryCallback();
+        #endif /* USBFS_EP_8_ISR_ENTRY_CALLBACK */
+
         /* `#START EP8_USER_CODE` Place your code here */
 
         /* `#END` */
@@ -544,6 +605,10 @@
 
         /* `#END` */
 
+        #ifdef USBFS_EP_8_ISR_EXIT_CALLBACK
+            USBFS_EP_8_ISR_ExitCallback();
+        #endif /* USBFS_EP_8_ISR_EXIT_CALLBACK */
+
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)
             EA = int_en;
@@ -569,6 +634,10 @@
 *******************************************************************************/
 CY_ISR(USBFS_SOF_ISR)
 {
+    #ifdef USBFS_SOF_ISR_INTERRUPT_CALLBACK
+        USBFS_SOF_ISR_InterruptCallback();
+    #endif /* USBFS_SOF_ISR_INTERRUPT_CALLBACK */
+
     /* `#START SOF_USER_CODE` Place your code here */
 
     /* `#END` */
@@ -592,11 +661,19 @@ CY_ISR(USBFS_SOF_ISR)
 *******************************************************************************/
 CY_ISR(USBFS_BUS_RESET_ISR)
 {
+    #ifdef USBFS_BUS_RESET_ISR_ENTRY_CALLBACK
+        USBFS_BUS_RESET_ISR_EntryCallback();
+    #endif /* USBFS_BUS_RESET_ISR_ENTRY_CALLBACK */
+
     /* `#START BUS_RESET_USER_CODE` Place your code here */
 
     /* `#END` */
 
     USBFS_ReInitComponent();
+
+    #ifdef USBFS_BUS_RESET_ISR_EXIT_CALLBACK
+        USBFS_BUS_RESET_ISR_ExitCallback();
+    #endif /* USBFS_BUS_RESET_ISR_EXIT_CALLBACK */    
 }
 
 
@@ -627,6 +704,10 @@ CY_ISR(USBFS_BUS_RESET_ISR)
         uint8 ep = USBFS_EP1;
         uint8 ptr = 0u;
 
+        #ifdef USBFS_ARB_ISR_ENTRY_CALLBACK
+            USBFS_ARB_ISR_EntryCallback();
+        #endif /* USBFS_ARB_ISR_ENTRY_CALLBACK */
+
         /* `#START ARB_BEGIN_USER_CODE` Place your code here */
 
         /* `#END` */
@@ -687,6 +768,10 @@ CY_ISR(USBFS_BUS_RESET_ISR)
 
                 /* `#END` */
 
+                #ifdef USBFS_ARB_ISR_CALLBACK
+                    USBFS_ARB_ISR_Callback();
+                #endif /* USBFS_ARB_ISR_CALLBACK */
+
                 CY_SET_REG8((reg8 *)(USBFS_ARB_EP1_SR_IND + ptr), ep_status);   /* Clear Serviced events */
             }
             ptr += USBFS_EPX_CNTX_ADDR_OFFSET;               /* prepare pointer for next EP */
@@ -697,6 +782,10 @@ CY_ISR(USBFS_BUS_RESET_ISR)
         /* `#START ARB_END_USER_CODE` Place your code here */
 
         /* `#END` */
+
+        #ifdef USBFS_ARB_ISR_EXIT_CALLBACK
+            USBFS_ARB_ISR_ExitCallback();
+        #endif /* USBFS_ARB_ISR_EXIT_CALLBACK */
     }
 
 #endif /*  USBFS_EP_MM */
@@ -724,6 +813,10 @@ CY_ISR(USBFS_BUS_RESET_ISR)
         uint8 ep = USBFS_EP1;
         uint8 ptr = 0u;
 
+        #ifdef USBFS_EP_DMA_DONE_ISR_ENTRY_CALLBACK
+            USBFS_EP_DMA_DONE_ISR_EntryCallback();
+        #endif /* USBFS_EP_DMA_DONE_ISR_ENTRY_CALLBACK */
+
         /* `#START EP_DMA_DONE_BEGIN_USER_CODE` Place your code here */
 
         /* `#END` */
@@ -747,6 +840,10 @@ CY_ISR(USBFS_BUS_RESET_ISR)
 
                         /* `#END` */
 
+                        #ifdef USBFS_EP_DMA_DONE_ISR_CALLBACK
+                            USBFS_EP_DMA_DONE_ISR_Callback();
+                        #endif /* USBFS_EP_DMA_DONE_ISR_CALLBACK */
+
                         CY_SET_REG8((reg8 *)(USBFS_ARB_RW1_WA_MSB_IND + ptr), 0x00u);
                         /* repeat 2 last bytes to prefetch endpoint area */
                         CY_SET_REG8((reg8 *)(USBFS_ARB_RW1_WA_IND + ptr),
@@ -773,6 +870,10 @@ CY_ISR(USBFS_BUS_RESET_ISR)
         /* `#START EP_DMA_DONE_END_USER_CODE` Place your code here */
 
         /* `#END` */
+
+        #ifdef USBFS_EP_DMA_DONE_ISR_EXIT_CALLBACK
+            USBFS_EP_DMA_DONE_ISR_ExitCallback();
+        #endif /* USBFS_EP_DMA_DONE_ISR_EXIT_CALLBACK */
     }
 #endif /* ((USBFS_EP_MM == USBFS__EP_DMAAUTO) && (USBFS_EP_DMA_AUTO_OPT == 0u)) */
 

+ 6 - 0
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_hid.c

@@ -25,6 +25,7 @@
 #include "USBFS_hid.h"
 
 
+
 /***************************************
 *    HID Variables
 ***************************************/
@@ -375,6 +376,11 @@ void USBFS_FindReport(void)
     /* `#START HID_FINDREPORT` Place custom handling here */
 
     /* `#END` */
+    
+    #ifdef USBFS_FIND_REPORT_CALLBACK
+        USBFS_FindReport_Callback();
+    #endif /* USBFS_FIND_REPORT_CALLBACK */
+    
     USBFS_currentTD.count = 0u;   /* Init not supported condition */
     pTmp = USBFS_GetConfigTablePtr(USBFS_configuration - 1u);
     reportType = CY_GET_REG8(USBFS_wValueHi);

+ 24 - 0
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_midi.c

@@ -26,6 +26,7 @@
 #include "USBFS_pvt.h"
 
 
+
 /***************************************
 *    MIDI Constants
 ***************************************/
@@ -269,6 +270,10 @@ void USBFS_MIDI_EP_Init(void)
                             /* `#START CUSTOM_MIDI_OUT_EP_SERV` Place your code here */
 
                             /* `#END` */
+
+                            #ifdef USBFS_MIDI_OUT_EP_SERVICE_CALLBACK
+                                USBFS_MIDI_OUT_EP_Service_Callback();
+                            #endif /* USBFS_MIDI_OUT_EP_SERVICE_CALLBACK */
                         }
                     #endif /* (USBFS_MIDI_EXT_MODE >= USBFS_ONE_EXT_INTRF) */
 
@@ -732,6 +737,9 @@ void USBFS_MIDI_EP_Init(void)
 
         /* `#END` */
 
+        #ifdef USBFS_MIDI_INIT_CALLBACK
+            USBFS_MIDI_Init_Callback();
+        #endif /* USBFS_MIDI_INIT_CALLBACK */
     }
 
 
@@ -1046,6 +1054,10 @@ void USBFS_MIDI_EP_Init(void)
 
         /* `#END` */
 
+        #ifdef USBFS_MIDI1_PROCESS_USB_OUT_ENTRY_CALLBACK
+            USBFS_MIDI1_ProcessUsbOut_EntryCallback();
+        #endif /* USBFS_MIDI1_PROCESS_USB_OUT_ENTRY_CALLBACK */
+
         cmd = epBuf[USBFS_EVENT_BYTE0] & USBFS_CIN_MASK;
         if((cmd != USBFS_RESERVED0) && (cmd != USBFS_RESERVED1))
         {
@@ -1118,6 +1130,10 @@ void USBFS_MIDI_EP_Init(void)
         /* `#START MIDI1_PROCESS_OUT_END` */
 
         /* `#END` */
+
+        #ifdef USBFS_MIDI1_PROCESS_USB_OUT_EXIT_CALLBACK
+            USBFS_MIDI1_ProcessUsbOut_ExitCallback();
+        #endif /* USBFS_MIDI1_PROCESS_USB_OUT_EXIT_CALLBACK */
     }
 
 
@@ -1269,6 +1285,10 @@ void USBFS_MIDI_EP_Init(void)
 
         /* `#END` */
 
+        #ifdef USBFS_MIDI2_PROCESS_USB_OUT_ENTRY_CALLBACK
+            USBFS_MIDI2_ProcessUsbOut_EntryCallback();
+        #endif /* USBFS_MIDI2_PROCESS_USB_OUT_ENTRY_CALLBACK */
+
         cmd = epBuf[USBFS_EVENT_BYTE0] & USBFS_CIN_MASK;
         if((cmd != USBFS_RESERVED0) && (cmd != USBFS_RESERVED1))
         {
@@ -1341,6 +1361,10 @@ void USBFS_MIDI_EP_Init(void)
         /* `#START MIDI2_PROCESS_OUT_END` */
 
         /* `#END` */
+
+        #ifdef USBFS_MIDI2_PROCESS_USB_OUT_EXIT_CALLBACK
+            USBFS_MIDI2_ProcessUsbOut_ExitCallback();
+        #endif /* USBFS_MIDI2_PROCESS_USB_OUT_EXIT_CALLBACK */
     }
 #endif /* (USBFS_MIDI_EXT_MODE >= USBFS_TWO_EXT_INTRF) */
 #endif /* (USBFS_MIDI_EXT_MODE >= USBFS_ONE_EXT_INTRF) */

+ 9 - 0
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_pm.c

@@ -19,6 +19,7 @@
 #include "USBFS_pvt.h"
 
 
+
 /***************************************
 * Custom Declarations
 ***************************************/
@@ -53,12 +54,20 @@ static USBFS_BACKUP_STRUCT  USBFS_backup;
     *******************************************************************************/
     CY_ISR(USBFS_DP_ISR)
     {
+        #ifdef USBFS_DP_ISR_ENTRY_CALLBACK
+            USBFS_DP_ISR_EntryCallback();
+        #endif /* USBFS_DP_ISR_ENTRY_CALLBACK */
+
         /* `#START DP_USER_CODE` Place your code here */
 
         /* `#END` */
 
         /* Clears active interrupt */
         CY_GET_REG8(USBFS_DP_INTSTAT_PTR);
+
+        #ifdef USBFS_DP_ISR_EXIT_CALLBACK
+            USBFS_DP_ISR_ExitCallback();
+        #endif /* USBFS_DP_ISR_EXIT_CALLBACK */
     }
 
 #endif /* (USBFS_DP_ISR_REMOVE == 0u) */

+ 5 - 1
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_vnd.c

@@ -17,6 +17,7 @@
 #include "USBFS.h"
 #include "USBFS_pvt.h"
 
+
 #if(USBFS_EXTERN_VND == USBFS_FALSE)
 
 
@@ -77,6 +78,10 @@ uint8 USBFS_HandleVendorRqst(void)
 
     /* `#END` */
 
+    #ifdef USBFS_HANDLE_VENDOR_RQST_CALLBACK
+        USBFS_HandleVendorRqst_Callback();
+    #endif /* USBFS_HANDLE_VENDOR_RQST_CALLBACK */
+
     return(requestHandled);
 }
 
@@ -89,7 +94,6 @@ uint8 USBFS_HandleVendorRqst(void)
 
 /* `#END` */
 
-
 #endif /* USBFS_EXTERN_VND */
 
 

+ 3 - 0
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cybootloader.c

@@ -2,6 +2,7 @@
 
 #include "cytypes.h"
 
+#if (!CYDEV_BOOTLOADER_ENABLE)
 
 #if defined(__GNUC__) || defined(__ARMCC_VERSION)
 __attribute__ ((__section__(".cyloadermeta"), used))
@@ -19,6 +20,8 @@ const uint8 cy_meta_loader[] = {
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u};
+#endif /* (!CYDEV_BOOTLOADER_ENABLE) */
+
 
 #if defined(__GNUC__) || defined(__ARMCC_VERSION)
 __attribute__ ((__section__(".cybootloader"), used))

+ 0 - 0
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cycodeshareexport.ld


+ 0 - 0
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cycodeshareimport.ld


+ 0 - 0
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cycodeshareimport.scat


+ 3 - 3
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice.h

@@ -1,9 +1,9 @@
 /*******************************************************************************
-* FILENAME: cydevice.h
+* File Name: cydevice.h
 * OBSOLETE: Do not use this file. Use the _trm version instead.
-* PSoC Creator  3.2
+* PSoC Creator  3.3
 *
-* DESCRIPTION:
+* Description:
 * This file provides all of the address values for the entire PSoC device.
 * This file is automatically generated by PSoC Creator.
 *

+ 3 - 3
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice_trm.h

@@ -1,9 +1,9 @@
 /*******************************************************************************
-* FILENAME: cydevice_trm.h
+* File Name: cydevice_trm.h
 * 
-* PSoC Creator  3.2
+* PSoC Creator  3.3
 *
-* DESCRIPTION:
+* Description:
 * This file provides all of the address values for the entire PSoC device.
 * This file is automatically generated by PSoC Creator.
 *

+ 3 - 3
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu.inc

@@ -1,9 +1,9 @@
 /*******************************************************************************
-* FILENAME: cydevicegnu.inc
+* File Name: cydevicegnu.inc
 * OBSOLETE: Do not use this file. Use the _trm version instead.
-* PSoC Creator  3.2
+* PSoC Creator  3.3
 *
-* DESCRIPTION:
+* Description:
 * This file provides all of the address values for the entire PSoC device.
 * This file is automatically generated by PSoC Creator.
 *

+ 3 - 3
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu_trm.inc

@@ -1,9 +1,9 @@
 /*******************************************************************************
-* FILENAME: cydevicegnu_trm.inc
+* File Name: cydevicegnu_trm.inc
 * 
-* PSoC Creator  3.2
+* PSoC Creator  3.3
 *
-* DESCRIPTION:
+* Description:
 * This file provides all of the address values for the entire PSoC device.
 * This file is automatically generated by PSoC Creator.
 *

+ 3 - 3
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar.inc

@@ -1,9 +1,9 @@
 ;
-; FILENAME: cydeviceiar.inc
+; File Name: cydeviceiar.inc
 ; OBSOLETE: Do not use this file. Use the _trm version instead.
-; PSoC Creator  3.2
+; PSoC Creator  3.3
 ;
-; DESCRIPTION:
+; Description:
 ; This file provides all of the address values for the entire PSoC device.
 ;
 ;-------------------------------------------------------------------------------

+ 3 - 3
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar_trm.inc

@@ -1,9 +1,9 @@
 ;
-; FILENAME: cydeviceiar_trm.inc
+; File Name: cydeviceiar_trm.inc
 ; 
-; PSoC Creator  3.2
+; PSoC Creator  3.3
 ;
-; DESCRIPTION:
+; Description:
 ; This file provides all of the address values for the entire PSoC device.
 ;
 ;-------------------------------------------------------------------------------

+ 3 - 3
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv.inc

@@ -1,9 +1,9 @@
 ;
-; FILENAME: cydevicerv.inc
+; File Name: cydevicerv.inc
 ; OBSOLETE: Do not use this file. Use the _trm version instead.
-; PSoC Creator  3.2
+; PSoC Creator  3.3
 ;
-; DESCRIPTION:
+; Description:
 ; This file provides all of the address values for the entire PSoC device.
 ;
 ;-------------------------------------------------------------------------------

+ 3 - 3
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv_trm.inc

@@ -1,9 +1,9 @@
 ;
-; FILENAME: cydevicerv_trm.inc
+; File Name: cydevicerv_trm.inc
 ; 
-; PSoC Creator  3.2
+; PSoC Creator  3.3
 ;
-; DESCRIPTION:
+; Description:
 ; This file provides all of the address values for the entire PSoC device.
 ;
 ;-------------------------------------------------------------------------------

File diff suppressed because it is too large
+ 218 - 128
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter.h


File diff suppressed because it is too large
+ 1293 - 1365
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter_cfg.c


+ 3 - 3
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter_cfg.h

@@ -1,9 +1,9 @@
 /*******************************************************************************
-* FILENAME: cyfitter_cfg.h
+* File Name: cyfitter_cfg.h
 * 
-* PSoC Creator  3.2
+* PSoC Creator  3.3
 *
-* DESCRIPTION:
+* Description:
 * This file provides basic startup and mux configration settings
 * This file is automatically generated by PSoC Creator.
 *

File diff suppressed because it is too large
+ 217 - 127
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfittergnu.inc


File diff suppressed because it is too large
+ 217 - 127
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitteriar.inc


File diff suppressed because it is too large
+ 217 - 127
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitterrv.inc


+ 4 - 4
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cymetadata.c

@@ -1,9 +1,9 @@
 /*******************************************************************************
-* FILENAME: cymetadata.c
+* File Name: cymetadata.c
 * 
-* PSoC Creator  3.2
+* PSoC Creator  3.3
 *
-* DESCRIPTION:
+* Description:
 * This file defines all extra memory spaces that need to be included.
 * This file is automatically generated by PSoC Creator.
 *
@@ -28,7 +28,7 @@ __attribute__ ((__section__(".cyloadablemeta"), used))
 const uint8 cy_meta_loadable[] = {
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
-    0x00u, 0x00u, 0x00u, 0x00u, 0x5Cu, 0xD1u, 0x41u, 0x04u,
+    0x00u, 0x00u, 0x00u, 0x00u, 0x5Cu, 0xD1u, 0x50u, 0x04u,
     0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,

+ 0 - 0
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/exported_symbols.txt


+ 3 - 3
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/project.h

@@ -1,9 +1,9 @@
 /*******************************************************************************
-* FILENAME: project.h
+* File Name: project.h
 * 
-* PSoC Creator  3.2
+* PSoC Creator  3.3
 *
-* DESCRIPTION:
+* Description:
 * It contains references to all generated header files and should not be modified.
 * This file is automatically generated by PSoC Creator.
 *

+ 0 - 0
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/renamed_symbols.txt


+ 140 - 140
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/SCSI2SD.cycdx

@@ -1,13 +1,13 @@
 <?xml version="1.0" encoding="utf-8"?>
 <blockRegMap version="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://cypress.com/xsd/cyblockregmap cyblockregmap.xsd" xmlns="http://cypress.com/xsd/cyblockregmap">
-  <block name="SCSI_RX_DMA_COMPLETE" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_RX_DMA" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SD_TX_DMA_COMPLETE" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="GlitchFilter_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_Filtered" BASE="0x0" SIZE="0x0" desc="" visible="true">
-    <register name="SCSI_Filtered_STATUS_REG" address="0x4000646B" bitWidth="8" desc="" />
-    <register name="SCSI_Filtered_MASK_REG" address="0x4000648B" bitWidth="8" desc="" />
-    <register name="SCSI_Filtered_STATUS_AUX_CTL_REG" address="0x4000649B" bitWidth="8" desc="">
+  <block name="SCSI_RX_DMA_COMPLETE" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_RX_DMA" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SD_TX_DMA_COMPLETE" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="GlitchFilter_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_Filtered" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false">
+    <register name="SCSI_Filtered_STATUS_REG" address="0x40006462" bitWidth="8" desc="" hidden="false" />
+    <register name="SCSI_Filtered_MASK_REG" address="0x40006482" bitWidth="8" desc="" hidden="false" />
+    <register name="SCSI_Filtered_STATUS_AUX_CTL_REG" address="0x40006492" bitWidth="8" desc="" hidden="false">
       <field name="FIFO0" from="5" to="5" access="RW" resetVal="" desc="FIFO0 clear">
         <value name="ENABLED" value="1" desc="Enable counter" />
         <value name="DISABLED" value="0" desc="Disable counter" />
@@ -34,10 +34,10 @@
       </field>
     </register>
   </block>
-  <block name="SCSI_Parity_Error" BASE="0x0" SIZE="0x0" desc="" visible="true">
-    <register name="SCSI_Parity_Error_STATUS_REG" address="0x4000646A" bitWidth="8" desc="" />
-    <register name="SCSI_Parity_Error_MASK_REG" address="0x4000648A" bitWidth="8" desc="" />
-    <register name="SCSI_Parity_Error_STATUS_AUX_CTL_REG" address="0x4000649A" bitWidth="8" desc="">
+  <block name="SCSI_Parity_Error" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false">
+    <register name="SCSI_Parity_Error_STATUS_REG" address="0x4000646B" bitWidth="8" desc="" hidden="false" />
+    <register name="SCSI_Parity_Error_MASK_REG" address="0x4000648B" bitWidth="8" desc="" hidden="false" />
+    <register name="SCSI_Parity_Error_STATUS_AUX_CTL_REG" address="0x4000649B" bitWidth="8" desc="" hidden="false">
       <field name="FIFO0" from="5" to="5" access="RW" resetVal="" desc="FIFO0 clear">
         <value name="ENABLED" value="1" desc="Enable counter" />
         <value name="DISABLED" value="0" desc="Disable counter" />
@@ -64,153 +64,153 @@
       </field>
     </register>
   </block>
-  <block name="SD_RX_DMA_COMPLETE" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_TX_DMA" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="Debug_Timer_Interrupt" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="ZeroTerminal_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SD_TX_DMA" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SD_RX_DMA" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_TX_DMA_COMPLETE" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_SEL_ISR" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="cydff_2" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="Clock_4" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="cy_boot" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_Glitch_Ctl" BASE="0x0" SIZE="0x0" desc="" visible="true">
-    <register name="SCSI_Glitch_Ctl_CONTROL_REG" address="0x40006476" bitWidth="8" desc="" />
+  <block name="SD_RX_DMA_COMPLETE" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_TX_DMA" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="Debug_Timer_Interrupt" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="ZeroTerminal_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SD_TX_DMA" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SD_RX_DMA" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_TX_DMA_COMPLETE" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_SEL_ISR" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="cydff_2" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="Clock_4" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="cy_boot" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_Glitch_Ctl" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false">
+    <register name="SCSI_Glitch_Ctl_CONTROL_REG" address="0x4000647D" bitWidth="8" desc="" hidden="false" />
   </block>
-  <block name="mux_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="not_2" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="cy_constant_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="Clock_2" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="Clock_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="EXTLED" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="Clock_3" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="cydff_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="timer_clock" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SD_CS" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="CFG_EEPROM" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_Out" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_CLK" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SD_MOSI" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SD_SCK" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_In" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SD_Data_Clk" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_Out_DBx" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_In_DBx" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="OddParityGen_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_CTL_PHASE" BASE="0x0" SIZE="0x0" desc="" visible="true">
-    <register name="SCSI_CTL_PHASE_CONTROL_REG" address="0x40006475" bitWidth="8" desc="" />
+  <block name="mux_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="not_2" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="cy_constant_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="Clock_2" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="Clock_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="EXTLED" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="Clock_3" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="cydff_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="timer_clock" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SD_CS" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="CFG_EEPROM" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_Out" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_CLK" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SD_MOSI" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SD_SCK" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_In" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SD_Data_Clk" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_Out_DBx" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_In_DBx" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="OddParityGen_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_CTL_PHASE" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false">
+    <register name="SCSI_CTL_PHASE_CONTROL_REG" address="0x4000647C" bitWidth="8" desc="" hidden="false" />
   </block>
-  <block name="SD_CD" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_Out_Mux" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="Bootloadable_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="USBFS" BASE="0x0" SIZE="0x0" desc="USBFS" visible="true">
-    <block name="ZeroTerminal_5" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_6" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_5" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ZeroTerminal_6" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ZeroTerminal_7" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_8" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_7" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ep_0" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_4" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ZeroTerminal_2" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ZeroTerminal_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ZeroTerminal_4" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_2" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="bus_reset" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="Dm" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="sof_int" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="dp_int" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="Dp" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ep_3" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ep_4" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="USB" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="arb_int" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ZeroTerminal_8" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ep_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ep_2" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ZeroTerminal_3" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_3" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="Clock_vbus" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <register name="USBFS_PM_USB_CR0" address="0x40004394" bitWidth="8" desc="USB Power Mode Control Register 0">
+  <block name="SD_CD" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_Out_Mux" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="Bootloadable_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="USBFS" BASE="0x0" SIZE="0x0" desc="USBFS" visible="true" hidden="false">
+    <block name="ZeroTerminal_5" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_6" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_5" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ZeroTerminal_6" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ZeroTerminal_7" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_8" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_7" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ep_0" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_4" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ZeroTerminal_2" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ZeroTerminal_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ZeroTerminal_4" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_2" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="bus_reset" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="Dm" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="sof_int" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="dp_int" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="Dp" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ep_3" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ep_4" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="USB" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="arb_int" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ZeroTerminal_8" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ep_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ep_2" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ZeroTerminal_3" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_3" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="Clock_vbus" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <register name="USBFS_PM_USB_CR0" address="0x40004394" bitWidth="8" desc="USB Power Mode Control Register 0" hidden="false">
       <field name="fsusbio_ref_en" from="0" to="0" access="RW" resetVal="" desc="" />
       <field name="fsusbio_pd_n" from="1" to="1" access="RW" resetVal="" desc="" />
       <field name="fsusbio_pd_pullup_n" from="2" to="2" access="RW" resetVal="" desc="" />
     </register>
-    <register name="USBFS_PM_ACT_CFG" address="0x400043A5" bitWidth="8" desc="Active Power Mode Configuration Register" />
-    <register name="USBFS_PM_STBY_CFG" address="0x400043B5" bitWidth="8" desc="Standby Power Mode Configuration Register" />
-    <register name="USBFS_PRT.PS" address="0x400051F1" bitWidth="8" desc="Port Pin State Register">
+    <register name="USBFS_PM_ACT_CFG" address="0x400043A5" bitWidth="8" desc="Active Power Mode Configuration Register" hidden="false" />
+    <register name="USBFS_PM_STBY_CFG" address="0x400043B5" bitWidth="8" desc="Standby Power Mode Configuration Register" hidden="false" />
+    <register name="USBFS_PRT.PS" address="0x400051F1" bitWidth="8" desc="Port Pin State Register" hidden="false">
       <field name="PinState_DP" from="6" to="6" access="R" resetVal="" desc="" />
       <field name="PinState_DM" from="7" to="7" access="R" resetVal="" desc="" />
     </register>
-    <register name="USBFS_PRT_DM0" address="0x400051F2" bitWidth="8" desc="Port Drive Mode Register">
+    <register name="USBFS_PRT_DM0" address="0x400051F2" bitWidth="8" desc="Port Drive Mode Register" hidden="false">
       <field name="DriveMode_DP" from="6" to="6" access="RW" resetVal="" desc="" />
       <field name="DriveMode_DM" from="7" to="7" access="RW" resetVal="" desc="" />
     </register>
-    <register name="USBFS_PRT_DM1" address="0x400051F3" bitWidth="8" desc="Port Drive Mode Register">
+    <register name="USBFS_PRT_DM1" address="0x400051F3" bitWidth="8" desc="Port Drive Mode Register" hidden="false">
       <field name="PullUp_en_DP" from="6" to="6" access="RW" resetVal="" desc="" />
       <field name="PullUp_en_DM" from="7" to="7" access="RW" resetVal="" desc="" />
     </register>
-    <register name="USBFS_PRT.INP_DIS" address="0x400051F8" bitWidth="8" desc="Input buffer disable override">
+    <register name="USBFS_PRT.INP_DIS" address="0x400051F8" bitWidth="8" desc="Input buffer disable override" hidden="false">
       <field name="seinput_dis_dp" from="6" to="6" access="RW" resetVal="" desc="" />
       <field name="seinput_dis_dm" from="7" to="7" access="RW" resetVal="" desc="" />
     </register>
-    <register name="USBFS_EP0_DR0" address="0x40006000" bitWidth="8" desc="bmRequestType" />
-    <register name="USBFS_EP0_DR1" address="0x40006001" bitWidth="8" desc="bRequest" />
-    <register name="USBFS_EP0_DR2" address="0x40006002" bitWidth="8" desc="wValueLo" />
-    <register name="USBFS_EP0_DR3" address="0x40006003" bitWidth="8" desc="wValueHi" />
-    <register name="USBFS_EP0_DR4" address="0x40006004" bitWidth="8" desc="wIndexLo" />
-    <register name="USBFS_EP0_DR5" address="0x40006005" bitWidth="8" desc="wIndexHi" />
-    <register name="USBFS_EP0_DR6" address="0x40006006" bitWidth="8" desc="lengthLo" />
-    <register name="USBFS_EP0_DR7" address="0x40006007" bitWidth="8" desc="lengthHi" />
-    <register name="USBFS_CR0" address="0x40006008" bitWidth="8" desc="USB Control Register 0">
+    <register name="USBFS_EP0_DR0" address="0x40006000" bitWidth="8" desc="bmRequestType" hidden="false" />
+    <register name="USBFS_EP0_DR1" address="0x40006001" bitWidth="8" desc="bRequest" hidden="false" />
+    <register name="USBFS_EP0_DR2" address="0x40006002" bitWidth="8" desc="wValueLo" hidden="false" />
+    <register name="USBFS_EP0_DR3" address="0x40006003" bitWidth="8" desc="wValueHi" hidden="false" />
+    <register name="USBFS_EP0_DR4" address="0x40006004" bitWidth="8" desc="wIndexLo" hidden="false" />
+    <register name="USBFS_EP0_DR5" address="0x40006005" bitWidth="8" desc="wIndexHi" hidden="false" />
+    <register name="USBFS_EP0_DR6" address="0x40006006" bitWidth="8" desc="lengthLo" hidden="false" />
+    <register name="USBFS_EP0_DR7" address="0x40006007" bitWidth="8" desc="lengthHi" hidden="false" />
+    <register name="USBFS_CR0" address="0x40006008" bitWidth="8" desc="USB Control Register 0" hidden="false">
       <field name="device_address" from="6" to="0" access="R" resetVal="" desc="" />
       <field name="usb_enable" from="7" to="7" access="RW" resetVal="" desc="" />
     </register>
-    <register name="USBFS_CR1" address="0x40006009" bitWidth="8" desc="USB Control Register 1">
+    <register name="USBFS_CR1" address="0x40006009" bitWidth="8" desc="USB Control Register 1" hidden="false">
       <field name="reg_enable" from="0" to="0" access="RW" resetVal="" desc="" />
       <field name="enable_lock" from="1" to="1" access="RW" resetVal="" desc="" />
       <field name="bus_activity" from="2" to="2" access="RW" resetVal="" desc="" />
       <field name="trim_offset_msb" from="3" to="3" access="RW" resetVal="" desc="" />
     </register>
-    <register name="USBFS_SIE_EP1_CR0" address="0x4000600E" bitWidth="8" desc="The Endpoint1 Control Register" />
-    <register name="USBFS_USBIO_CR0" address="0x40006010" bitWidth="8" desc="USBIO Control Register 0">
+    <register name="USBFS_SIE_EP1_CR0" address="0x4000600E" bitWidth="8" desc="The Endpoint1 Control Register" hidden="false" />
+    <register name="USBFS_USBIO_CR0" address="0x40006010" bitWidth="8" desc="USBIO Control Register 0" hidden="false">
       <field name="rd" from="0" to="0" access="R" resetVal="" desc="" />
       <field name="td" from="5" to="5" access="RW" resetVal="" desc="" />
       <field name="tse0" from="6" to="6" access="RW" resetVal="" desc="" />
       <field name="ten" from="7" to="7" access="RW" resetVal="" desc="" />
     </register>
-    <register name="USBFS_USBIO_CR1" address="0x40006012" bitWidth="8" desc="USBIO Control Register 1">
+    <register name="USBFS_USBIO_CR1" address="0x40006012" bitWidth="8" desc="USBIO Control Register 1" hidden="false">
       <field name="dmo" from="0" to="0" access="R" resetVal="" desc="" />
       <field name="dpo" from="1" to="1" access="R" resetVal="" desc="" />
       <field name="usbpuen" from="2" to="2" access="RW" resetVal="" desc="" />
       <field name="iomode" from="5" to="5" access="RW" resetVal="" desc="" />
     </register>
-    <register name="USBFS_SIE_EP2_CR0" address="0x4000601E" bitWidth="8" desc="The Endpoint2 Control Register" />
-    <register name="USBFS_SIE_EP3_CR0" address="0x4000602E" bitWidth="8" desc="The Endpoint3 Control Register" />
-    <register name="USBFS_SIE_EP4_CR0" address="0x4000603E" bitWidth="8" desc="The Endpoint4 Control Register" />
-    <register name="USBFS_SIE_EP5_CR0" address="0x4000604E" bitWidth="8" desc="The Endpoint5 Control Register" />
-    <register name="USBFS_SIE_EP6_CR0" address="0x4000605E" bitWidth="8" desc="The Endpoint6 Control Register" />
-    <register name="USBFS_SIE_EP7_CR0" address="0x4000606E" bitWidth="8" desc="The Endpoint7 Control Register" />
-    <register name="USBFS_SIE_EP8_CR0" address="0x4000607E" bitWidth="8" desc="The Endpoint8 Control Register" />
-    <register name="USBFS_BUF_SIZE" address="0x4000608C" bitWidth="8" desc="Dedicated Endpoint Buffer Size Register" />
-    <register name="USBFS_EP_ACTIVE" address="0x4000608E" bitWidth="8" desc="Endpoint Active Indication Register" />
-    <register name="USBFS_EP_TYPE" address="0x4000608F" bitWidth="8" desc="Endpoint Type (IN/OUT) Indication" />
-    <register name="USBFS_USB_CLK_EN" address="0x4000609D" bitWidth="8" desc="USB Block Clock Enable Register" />
+    <register name="USBFS_SIE_EP2_CR0" address="0x4000601E" bitWidth="8" desc="The Endpoint2 Control Register" hidden="false" />
+    <register name="USBFS_SIE_EP3_CR0" address="0x4000602E" bitWidth="8" desc="The Endpoint3 Control Register" hidden="false" />
+    <register name="USBFS_SIE_EP4_CR0" address="0x4000603E" bitWidth="8" desc="The Endpoint4 Control Register" hidden="false" />
+    <register name="USBFS_SIE_EP5_CR0" address="0x4000604E" bitWidth="8" desc="The Endpoint5 Control Register" hidden="false" />
+    <register name="USBFS_SIE_EP6_CR0" address="0x4000605E" bitWidth="8" desc="The Endpoint6 Control Register" hidden="false" />
+    <register name="USBFS_SIE_EP7_CR0" address="0x4000606E" bitWidth="8" desc="The Endpoint7 Control Register" hidden="false" />
+    <register name="USBFS_SIE_EP8_CR0" address="0x4000607E" bitWidth="8" desc="The Endpoint8 Control Register" hidden="false" />
+    <register name="USBFS_BUF_SIZE" address="0x4000608C" bitWidth="8" desc="Dedicated Endpoint Buffer Size Register" hidden="false" />
+    <register name="USBFS_EP_ACTIVE" address="0x4000608E" bitWidth="8" desc="Endpoint Active Indication Register" hidden="false" />
+    <register name="USBFS_EP_TYPE" address="0x4000608F" bitWidth="8" desc="Endpoint Type (IN/OUT) Indication" hidden="false" />
+    <register name="USBFS_USB_CLK_EN" address="0x4000609D" bitWidth="8" desc="USB Block Clock Enable Register" hidden="false" />
   </block>
-  <block name="Debug_Timer" BASE="0x0" SIZE="0x0" desc="" visible="true">
-    <block name="VirtualMux_2" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ZeroTerminal_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="TimerHW" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="OneTerminal_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_3" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <register name="Debug_Timer_GLOBAL_ENABLE" address="0x400043A3" bitWidth="8" desc="PM.ACT.CFG">
+  <block name="Debug_Timer" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false">
+    <block name="VirtualMux_2" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ZeroTerminal_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="TimerHW" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="OneTerminal_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_3" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <register name="Debug_Timer_GLOBAL_ENABLE" address="0x400043A3" bitWidth="8" desc="PM.ACT.CFG" hidden="false">
       <field name="en_timer" from="3" to="0" access="RW" resetVal="" desc="Enable timer/counters." />
     </register>
-    <register name="Debug_Timer_CONTROL" address="0x40004F00" bitWidth="8" desc="TMRx.CFG0">
+    <register name="Debug_Timer_CONTROL" address="0x40004F00" bitWidth="8" desc="TMRx.CFG0" hidden="false">
       <field name="EN" from="0" to="0" access="RW" resetVal="" desc="Enables timer/comparator." />
       <field name="MODE" from="1" to="1" access="RW" resetVal="" desc="Mode. (0 = Timer; 1 = Comparator)">
         <value name="Timer" value="0" desc="Timer mode. CNT/CMP register holds timer count value." />
@@ -225,7 +225,7 @@
       </field>
       <field name="DEADBAND_PERIOD" from="7" to="6" access="RW" resetVal="" desc="Deadband Period" />
     </register>
-    <register name="Debug_Timer_CONTROL2" address="0x40004F01" bitWidth="8" desc="TMRx.CFG1">
+    <register name="Debug_Timer_CONTROL2" address="0x40004F01" bitWidth="8" desc="TMRx.CFG1" hidden="false">
       <field name="IRQ_SEL" from="0" to="0" access="RW" resetVal="" desc="Irq selection. (0 = raw interrupts; 1 = status register interrupts)" />
       <field name="FTC" from="1" to="1" access="RW" resetVal="" desc="First Terminal Count (FTC). Setting this bit forces a single pulse on the TC pin when first enabled.">
         <value name="Disable FTC" value="0" desc="Disable the single cycle pulse, which signifies the timer is starting." />
@@ -236,7 +236,7 @@
       <field name="CLK_BUS_EN_SEL" from="6" to="4" access="RW" resetVal="" desc="Digital Global Clock selection." />
       <field name="BUS_CLK_SEL" from="7" to="7" access="RW" resetVal="" desc="Bus Clock selection." />
     </register>
-    <register name="Debug_Timer_CONTROL3_" address="0x40004F02" bitWidth="8" desc="TMRx.CFG2">
+    <register name="Debug_Timer_CONTROL3_" address="0x40004F02" bitWidth="8" desc="TMRx.CFG2" hidden="false">
       <field name="TMR_CFG" from="1" to="0" access="RW" resetVal="" desc="Timer configuration (MODE = 0): 000 = Continuous; 001 = Pulsewidth; 010 = Period; 011 = Stop on IRQ">
         <value name="Continuous" value="0" desc="Timer runs while EN bit of CFG0 register is set to '1'." />
         <value name="Pulsewidth" value="1" desc="Timer runs from positive to negative edge of TIMEREN." />
@@ -254,26 +254,26 @@
       </field>
       <field name="HW_EN" from="7" to="7" access="RW" resetVal="" desc="When set Timer Enable controls counting." />
     </register>
-    <register name="Debug_Timer_PERIOD" address="0x40004F04" bitWidth="16" desc="TMRx.PER0 - Assigned Period" />
-    <register name="Debug_Timer_COUNTER" address="0x40004F06" bitWidth="16" desc="TMRx.CNT_CMP0 - Current Down Counter Value" />
+    <register name="Debug_Timer_PERIOD" address="0x40004F04" bitWidth="16" desc="TMRx.PER0 - Assigned Period" hidden="false" />
+    <register name="Debug_Timer_COUNTER" address="0x40004F06" bitWidth="16" desc="TMRx.CNT_CMP0 - Current Down Counter Value" hidden="false" />
   </block>
-  <block name="SCSI_Out_Ctl" BASE="0x0" SIZE="0x0" desc="" visible="true">
-    <register name="SCSI_Out_Ctl_CONTROL_REG" address="0x40006574" bitWidth="8" desc="" />
+  <block name="SCSI_Out_Ctl" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false">
+    <register name="SCSI_Out_Ctl_CONTROL_REG" address="0x40006471" bitWidth="8" desc="" hidden="false" />
   </block>
-  <block name="SCSI_Out_Bits" BASE="0x0" SIZE="0x0" desc="" visible="true">
-    <register name="SCSI_Out_Bits_CONTROL_REG" address="0x40006577" bitWidth="8" desc="" />
+  <block name="SCSI_Out_Bits" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false">
+    <register name="SCSI_Out_Bits_CONTROL_REG" address="0x40006472" bitWidth="8" desc="" hidden="false" />
   </block>
-  <block name="SD_MISO" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_RST_ISR" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SCSI_Noise" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="not_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="SDCard" BASE="0x0" SIZE="0x0" desc="" visible="true">
-    <block name="VirtualMux_3" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="ZeroTerminal_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_2" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="VirtualMux_1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-    <block name="BSPIM" BASE="0x0" SIZE="0x0" desc="" visible="true" />
+  <block name="SD_MISO" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_RST_ISR" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SCSI_Noise" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="not_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="SDCard" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false">
+    <block name="VirtualMux_3" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="ZeroTerminal_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_2" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="VirtualMux_1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+    <block name="BSPIM" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
   </block>
-  <block name="LED1" BASE="0x0" SIZE="0x0" desc="" visible="true" />
-  <block name="scsiTarget" BASE="0x0" SIZE="0x0" desc="" visible="true" />
+  <block name="LED1" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
+  <block name="scsiTarget" BASE="0x0" SIZE="0x0" desc="" visible="true" hidden="false" />
 </blockRegMap>

二進制
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/SCSI2SD.cydwr


二進制
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/SCSI2SD.cyfit


+ 36 - 2
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/SCSI2SD.cyprj

@@ -2420,6 +2420,24 @@
 </CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
 <filters />
 </CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
+<CyGuid_405e30c3-81d4-4133-98d6-c3ecf21fec0d type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileGenerated" version="1">
+<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFile" version="3" xml_contents_version="1">
+<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItem" version="2" name="cycodeshareimport.ld" persistent=".\Generated_Source\PSoC5\cycodeshareimport.ld">
+<Hidden v="False" />
+</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
+<build_action v="NONE" />
+<PropertyDeltas />
+</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
+</CyGuid_405e30c3-81d4-4133-98d6-c3ecf21fec0d>
+<CyGuid_405e30c3-81d4-4133-98d6-c3ecf21fec0d type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileGenerated" version="1">
+<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFile" version="3" xml_contents_version="1">
+<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItem" version="2" name="cycodeshareimport.scat" persistent=".\Generated_Source\PSoC5\cycodeshareimport.scat">
+<Hidden v="False" />
+</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
+<build_action v="NONE" />
+<PropertyDeltas />
+</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
+</CyGuid_405e30c3-81d4-4133-98d6-c3ecf21fec0d>
 </dependencies>
 </CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
 </CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
@@ -2547,6 +2565,8 @@
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@C/C++@Optimization@Remove Unused Functions" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@C/C++@Optimization@Inline Functions" v="False" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@C/C++@Optimization@Optimization Level" v="None" />
+<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@C/C++@Optimization@Link Time Optimization" v="False" />
+<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@C/C++@Optimization@Fat LTO objects" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@C/C++@Command Line@Command Line" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@Library Generation@Command Line@Command Line" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM0@Linker@General@Additional Libraries" v="" />
@@ -2579,6 +2599,8 @@
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@C/C++@Optimization@Remove Unused Functions" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@C/C++@Optimization@Inline Functions" v="False" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@C/C++@Optimization@Optimization Level" v="Size" />
+<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@C/C++@Optimization@Link Time Optimization" v="False" />
+<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@C/C++@Optimization@Fat LTO objects" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@C/C++@Command Line@Command Line" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@Library Generation@Command Line@Command Line" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM0@Linker@General@Additional Libraries" v="" />
@@ -2611,6 +2633,8 @@
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@C/C++@Optimization@Remove Unused Functions" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@C/C++@Optimization@Inline Functions" v="False" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@C/C++@Optimization@Optimization Level" v="None" />
+<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@C/C++@Optimization@Link Time Optimization" v="False" />
+<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@C/C++@Optimization@Fat LTO objects" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@C/C++@Command Line@Command Line" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@Library Generation@Command Line@Command Line" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3@Linker@General@Additional Libraries" v="" />
@@ -2643,6 +2667,8 @@
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@C/C++@Optimization@Remove Unused Functions" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@C/C++@Optimization@Inline Functions" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@C/C++@Optimization@Optimization Level" v="Size" />
+<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@C/C++@Optimization@Link Time Optimization" v="False" />
+<name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@C/C++@Optimization@Fat LTO objects" v="True" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@C/C++@Command Line@Command Line" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@Library Generation@Command Line@Command Line" v="" />
 <name_val_pair name="c9323d49-d323-40b8-9b59-cc008d68a989@Release@CortexM3@Linker@General@Additional Libraries" v="" />
@@ -2679,6 +2705,8 @@
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@C/C++@Optimization@Remove Unused Functions" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@C/C++@Optimization@Inline Functions" v="False" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@C/C++@Optimization@Optimization Level" v="None" />
+<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@C/C++@Optimization@Link Time Optimization" v="False" />
+<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@C/C++@Optimization@Fat LTO objects" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@C/C++@Command Line@Command Line" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@Library Generation@Command Line@Command Line" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM0@Linker@General@Additional Libraries" v="" />
@@ -2711,6 +2739,8 @@
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@C/C++@Optimization@Remove Unused Functions" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@C/C++@Optimization@Inline Functions" v="False" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@C/C++@Optimization@Optimization Level" v="Size" />
+<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@C/C++@Optimization@Link Time Optimization" v="False" />
+<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@C/C++@Optimization@Fat LTO objects" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@C/C++@Command Line@Command Line" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@Library Generation@Command Line@Command Line" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM0@Linker@General@Additional Libraries" v="" />
@@ -2743,6 +2773,8 @@
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@C/C++@Optimization@Remove Unused Functions" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@C/C++@Optimization@Inline Functions" v="False" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@C/C++@Optimization@Optimization Level" v="None" />
+<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@C/C++@Optimization@Link Time Optimization" v="False" />
+<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@C/C++@Optimization@Fat LTO objects" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@C/C++@Command Line@Command Line" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@Library Generation@Command Line@Command Line" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Debug@CortexM3@Linker@General@Additional Libraries" v="" />
@@ -2775,6 +2807,8 @@
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@C/C++@Optimization@Remove Unused Functions" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@C/C++@Optimization@Inline Functions" v="False" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@C/C++@Optimization@Optimization Level" v="Size" />
+<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@C/C++@Optimization@Link Time Optimization" v="False" />
+<name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@C/C++@Optimization@Fat LTO objects" v="True" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@C/C++@Command Line@Command Line" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@Library Generation@Command Line@Command Line" v="" />
 <name_val_pair name="b98f980c-3bd1-4fc7-a887-c56a20a46fdd@Release@CortexM3@Linker@General@Additional Libraries" v="" />
@@ -2914,8 +2948,8 @@
 <project_current_platform v="c9323d49-d323-40b8-9b59-cc008d68a989" />
 <project_current_processor v="CortexM3" />
 <last_selected_tab v="Cypress" />
-<WriteAppVersionLastSavedWith v="3.2.0.6175" />
-<WriteAppMarketingVersionLastSavedWith v=" 3.2 SP1" />
+<WriteAppVersionLastSavedWith v="3.3.0.410" />
+<WriteAppMarketingVersionLastSavedWith v=" 3.3" />
 <project_id v="6e1f5cbb-a0ca-4f55-a1fa-7b20c5be3a3e" /><custom_data><CyGuid_7a7929f8-5e3b-4f86-a093-2d4ee6513111 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtProjectCustomData" version="1"><CyGuid_fdba8dfd-b15b-4469-9bbb-9e40c3e70997 type_name="CyDesigner.Common.Base.CyCustomData" version="2"><userData /></CyGuid_fdba8dfd-b15b-4469-9bbb-9e40c3e70997><properties /></CyGuid_7a7929f8-5e3b-4f86-a093-2d4ee6513111></custom_data></CyGuid_49cfd574-032a-4a64-b7be-d4eeeaf25e43>
 </CyGuid_60697ce6-dce2-4816-8680-4de0635742eb>
 <top_block v="TopDesign" />

Some files were not shown because too many files changed in this diff