Преглед на файлове

Fixed missing SCSI ID in scsi2sd-config

Added vendor-defined usage page to USB HID device descriptors for
more reliable operation on Mac.
Michael McMaster преди 11 години
родител
ревизия
e3fbe0fa00
променени са 29 файла, в които са добавени 449 реда и са изтрити 318 реда
  1. 8 0
      lib/SCSI2SD/CHANGELOG
  2. 1 1
      lib/SCSI2SD/software/SCSI2SD/src/config.c
  3. 3 1
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS.h
  4. 34 6
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_descr.c
  5. 2 1
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_pvt.h
  6. 1 1
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cymetadata.c
  7. BIN
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/SCSI2SD.cyfit
  8. BIN
      lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/TopDesign/TopDesign.cysch
  9. 18 18
      lib/SCSI2SD/software/SCSI2SD/v3/USB_Bootloader.cydsn/Generated_Source/PSoCCreatorExportIDE.xml
  10. BIN
      lib/SCSI2SD/software/SCSI2SD/v3/USB_Bootloader.cydsn/USB_Bootloader.cyfit
  11. 41 40
      lib/SCSI2SD/software/SCSI2SD/v3/USB_Bootloader.cydsn/USB_Bootloader.cyprj.Micha_000
  12. 44 44
      lib/SCSI2SD/software/SCSI2SD/v3/USB_Bootloader.cydsn/USB_Bootloader.rpt
  13. 1 1
      lib/SCSI2SD/software/SCSI2SD/v3/USB_Bootloader.cydsn/USB_Bootloader_timing.html
  14. 3 1
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS.h
  15. 34 6
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_descr.c
  16. 2 1
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_pvt.h
  17. 167 167
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cybootloader.c
  18. 1 1
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cymetadata.c
  19. 20 20
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoCCreatorExportIDE.xml
  20. BIN
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/SCSI2SD.cyfit
  21. BIN
      lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/TopDesign/TopDesign.cysch
  22. BIN
      lib/SCSI2SD/software/SCSI2SD/v4/USB_Bootloader.cydsn/USB_Bootloader.cyfit
  23. 13 3
      lib/SCSI2SD/software/bootloaderhost/SCSI2SD_HID.cc
  24. 1 0
      lib/SCSI2SD/software/bootloaderhost/build.sh
  25. 4 5
      lib/SCSI2SD/software/bootloaderhost/hidapi-mac/hid.c
  26. 44 0
      lib/SCSI2SD/software/build.sh
  27. 1 0
      lib/SCSI2SD/software/scsi2sd-config/build.sh
  28. 5 1
      lib/SCSI2SD/software/scsi2sd-config/scsi2sd-config.cc
  29. 1 0
      lib/SCSI2SD/software/scsi2sd-debug/build.sh

+ 8 - 0
lib/SCSI2SD/CHANGELOG

@@ -1,3 +1,11 @@
+20140718		3.5.2
+	- Fix blank SCSI ID in scsi2sd-config output.
+
+20140717		3.5.1
+	- Allow building utilities on older Linux distros
+	- Resolve missing DLL issues for the Windows utilities
+	- Fix scsi2sd-config crash on Mac.
+
 20140713		3.5
 	- Fixed several performance issues. Transfer rates up to 2.5MB/s are now
 	possible.

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

@@ -28,7 +28,7 @@
 
 // CYDEV_EEPROM_ROW_SIZE == 16.
 static const char magic[CYDEV_EEPROM_ROW_SIZE] = "codesrc_00000002";
-static const uint16_t FIRMWARE_VERSION = 0x0350;
+static const uint16_t FIRMWARE_VERSION = 0x0352;
 
 // Config shadow RAM (copy of EEPROM)
 static Config shadow =

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

@@ -83,8 +83,10 @@
 #define USBFS_DEVICE0_CONFIGURATION0_INTERFACE1_ALTERNATE0_HID_NUM_OUT_RPTS   (1u)
 #define USBFS_DEVICE0_CONFIGURATION0_INTERFACE1_ALTERNATE0_HID_COUNT   (1u)
 #define USBFS_ENABLE_HID_CLASS   
-#define USBFS_HID_RPT_1_SIZE_LSB   (0x24u)
+#define USBFS_HID_RPT_1_SIZE_LSB   (0x25u)
 #define USBFS_HID_RPT_1_SIZE_MSB   (0x00u)
+#define USBFS_HID_RPT_2_SIZE_LSB   (0x25u)
+#define USBFS_HID_RPT_2_SIZE_MSB   (0x00u)
 #define USBFS_MAX_REPORTID_NUMBER   (0u)
 
 #define USBFS_MON_VBUS                       (0u)

+ 34 - 6
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_descr.c

@@ -126,8 +126,8 @@ const uint8 CYCODE USBFS_DEVICE0_CONFIGURATION0_DESCR[73u] = {
 /*  bCountryCode                           */ 0x00u,
 /*  bNumDescriptors                        */ 0x01u,
 /*  bDescriptorType                        */ 0x22u,
-/*  wDescriptorLength (LSB)                */ USBFS_HID_RPT_1_SIZE_LSB,
-/*  wDescriptorLength (MSB)                */ USBFS_HID_RPT_1_SIZE_MSB,
+/*  wDescriptorLength (LSB)                */ USBFS_HID_RPT_2_SIZE_LSB,
+/*  wDescriptorLength (MSB)                */ USBFS_HID_RPT_2_SIZE_MSB,
 /*********************************************************************
 * Endpoint Descriptor
 *********************************************************************/
@@ -187,12 +187,12 @@ const uint8 CYCODE USBFS_SN_STRING_DESCRIPTOR[10] = {
 };
 
 /*********************************************************************
-* HID Report Descriptor: Generic HID
+* HID Report Descriptor: Generic HID - Vendor FF00
 *********************************************************************/
-const uint8 CYCODE USBFS_HIDREPORT_DESCRIPTOR1[40u] = {
+const uint8 CYCODE USBFS_HIDREPORT_DESCRIPTOR1[41u] = {
 /*  Descriptor Size (Not part of descriptor)*/ USBFS_HID_RPT_1_SIZE_LSB,
 USBFS_HID_RPT_1_SIZE_MSB,
-/* USAGE_PAGE                              */ 0x05u, 0x01u, 
+/* USAGE_PAGE                              */ 0x06u, 0x00u, 0xFFu, 
 /* USAGE                                   */ 0x09u, 0x00u, 
 /* COLLECTION                              */ 0xA1u, 0x00u, 
 /* USAGE                                   */ 0x09u, 0x00u, 
@@ -214,6 +214,34 @@ USBFS_HID_RPT_1_SIZE_MSB,
 /*********************************************************************/
 /* End of the HID Report Descriptor        */ 0x00u, 0x00u};
 /*********************************************************************/
+/*********************************************************************
+* HID Report Descriptor: Generic HID - Vendor FF01
+*********************************************************************/
+const uint8 CYCODE USBFS_HIDREPORT_DESCRIPTOR2[41u] = {
+/*  Descriptor Size (Not part of descriptor)*/ USBFS_HID_RPT_2_SIZE_LSB,
+USBFS_HID_RPT_2_SIZE_MSB,
+/* USAGE_PAGE                              */ 0x06u, 0x01u, 0xFFu, 
+/* USAGE                                   */ 0x09u, 0x01u, 
+/* COLLECTION                              */ 0xA1u, 0x00u, 
+/* USAGE                                   */ 0x09u, 0x00u, 
+/* COLLECTION                              */ 0xA1u, 0x00u, 
+/* USAGE                                   */ 0x09u, 0x00u, 
+/* LOGICAL_MINIMUM                         */ 0x15u, 0x00u, 
+/* LOGICAL_MAXIMUM                         */ 0x25u, 0xFFu, 
+/* REPORT_SIZE                             */ 0x75u, 0x08u, 
+/* REPORT_COUNT                            */ 0x95u, 0x40u, 
+/* OUTPUT                                  */ 0x91u, 0x02u, 
+/* USAGE                                   */ 0x09u, 0x00u, 
+/* LOGICAL_MINIMUM                         */ 0x15u, 0x00u, 
+/* LOGICAL_MAXIMUM                         */ 0x25u, 0xFFu, 
+/* REPORT_SIZE                             */ 0x75u, 0x08u, 
+/* REPORT_COUNT                            */ 0x95u, 0x40u, 
+/* INPUT                                   */ 0x81u, 0x02u, 
+/* END_COLLECTION                          */ 0xC0u, 
+/* END_COLLECTION                          */ 0xC0u, 
+/*********************************************************************/
+/* End of the HID Report Descriptor        */ 0x00u, 0x00u};
+/*********************************************************************/
 
 #if !defined(USER_DEFINE_USBFS_DEVICE0_CONFIGURATION0_INTERFACE0_ALTERNATE0_HID_HID_RPT_STORAGE)
 /*********************************************************************
@@ -305,7 +333,7 @@ const T_USBFS_LUT CYCODE USBFS_DEVICE0_CONFIGURATION0_INTERFACE1_ALTERNATE0_HID_
     {0x00u,     &USBFS_DEVICE0_CONFIGURATION0_INTERFACE1_ALTERNATE0_HID_IN_RPT_TABLE},
     {0x00u,     &USBFS_DEVICE0_CONFIGURATION0_INTERFACE1_ALTERNATE0_HID_OUT_RPT_TABLE},
     {0x00u,    NULL},
-    {0x01u,     (const void *)&USBFS_HIDREPORT_DESCRIPTOR1[0]},
+    {0x01u,     (const void *)&USBFS_HIDREPORT_DESCRIPTOR2[0]},
     {0x01u,     (const void *)&USBFS_DEVICE0_CONFIGURATION0_DESCR[50]}
 };
 #endif /* USER_DEFINE_USBFS_DEVICE0_CONFIGURATION0_INTERFACE1_ALTERNATE0_HID_HID_RPT_STORAGE */

+ 2 - 1
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_pvt.h

@@ -48,7 +48,8 @@ extern uint8 USBFS_DEVICE0_CONFIGURATION0_INTERFACE1_ALTERNATE0_HID_IN_BUF[
 extern T_USBFS_XFER_STATUS_BLOCK USBFS_DEVICE0_CONFIGURATION0_INTERFACE1_ALTERNATE0_HID_OUT_RPT_SCB;
 extern uint8 USBFS_DEVICE0_CONFIGURATION0_INTERFACE1_ALTERNATE0_HID_OUT_BUF[
             USBFS_DEVICE0_CONFIGURATION0_INTERFACE1_ALTERNATE0_HID_OUT_BUF_SIZE];
-extern const uint8 CYCODE USBFS_HIDREPORT_DESCRIPTOR1[40u];
+extern const uint8 CYCODE USBFS_HIDREPORT_DESCRIPTOR1[41u];
+extern const uint8 CYCODE USBFS_HIDREPORT_DESCRIPTOR2[41u];
 extern const T_USBFS_TD CYCODE USBFS_DEVICE0_CONFIGURATION0_INTERFACE0_ALTERNATE0_HID_IN_RPT_TABLE[1u];
 extern const T_USBFS_TD CYCODE USBFS_DEVICE0_CONFIGURATION0_INTERFACE0_ALTERNATE0_HID_OUT_RPT_TABLE[1u];
 extern const T_USBFS_LUT CYCODE USBFS_DEVICE0_CONFIGURATION0_INTERFACE0_ALTERNATE0_HID_TABLE[5u];

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

@@ -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, 0x50u, 0x03u,
+    0x00u, 0x00u, 0x00u, 0x00u, 0x5Cu, 0xD1u, 0x52u, 0x03u,
     0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,

BIN
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/SCSI2SD.cyfit


BIN
lib/SCSI2SD/software/SCSI2SD/v3/SCSI2SD.cydsn/TopDesign/TopDesign.cysch


+ 18 - 18
lib/SCSI2SD/software/SCSI2SD/v3/USB_Bootloader.cydsn/Generated_Source/PSoCCreatorExportIDE.xml

@@ -18,7 +18,7 @@
       <Tool Name="postbuild" Command="" Options="" />
     </Toolchain>
   </Toolchains>
-  <Project Name="USB_Bootloader" Path="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn" Version="4.0" Type="Bootloader">
+  <Project Name="USB_Bootloader" Path="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn" Version="4.0" Type="Bootloader">
     <CMSIS_SVD_File>USB_Bootloader.svd</CMSIS_SVD_File>
     <Datasheet />
     <LinkerFiles>
@@ -27,13 +27,13 @@
       <LinkerFile Toolchain="IAR EWARM">.\Generated_Source\PSoC5\Cm3Iar.icf</LinkerFile>
     </LinkerFiles>
     <Folders>
-      <Folder BuildType="BUILD" Path="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn">
+      <Folder BuildType="BUILD" Path="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn">
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn">
           <File BuildType="BUILD" Toolchain="">.\main.c</File>
         </Files>
       </Folder>
-      <Folder BuildType="STRICT" Path="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\Generated_Source\PSoC5">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn">
+      <Folder BuildType="STRICT" Path="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\Generated_Source\PSoC5">
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn">
           <File BuildType="BUILD" Toolchain="">.\Generated_Source\PSoC5\cyfitter_cfg.h</File>
           <File BuildType="BUILD" Toolchain="">.\Generated_Source\PSoC5\cyfitter_cfg.c</File>
           <File BuildType="BUILD" Toolchain="">.\Generated_Source\PSoC5\cymetadata.c</File>
@@ -111,41 +111,41 @@
           <File BuildType="BUILD" Toolchain="">.\Generated_Source\PSoC5\libelf.dll</File>
         </Files>
       </Folder>
-      <Folder BuildType="STRICT" Path="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\Generated_Source\PSoC5\ARM_GCC">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn">
+      <Folder BuildType="STRICT" Path="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\Generated_Source\PSoC5\ARM_GCC">
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn">
           <File BuildType="BUILD" Toolchain="ARM GCC">.\Generated_Source\PSoC5\ARM_GCC\CyComponentLibrary.a</File>
         </Files>
       </Folder>
-      <Folder BuildType="STRICT" Path="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\Generated_Source\PSoC5\ARM_Keil_MDK">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn">
+      <Folder BuildType="STRICT" Path="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\Generated_Source\PSoC5\ARM_Keil_MDK">
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn">
           <File BuildType="BUILD" Toolchain="ARM Keil MDK">.\Generated_Source\PSoC5\ARM_Keil_MDK\CyComponentLibrary.a</File>
         </Files>
       </Folder>
-      <Folder BuildType="STRICT" Path="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\Generated_Source\PSoC5\IAR">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn">
+      <Folder BuildType="STRICT" Path="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\Generated_Source\PSoC5\IAR">
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn">
           <File BuildType="BUILD" Toolchain="IAR">.\Generated_Source\PSoC5\IAR\CyComponentLibrary.a</File>
         </Files>
       </Folder>
       <Folder BuildType="EXCLUDE" Path=".\codegentemp">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn" />
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn" />
       </Folder>
       <Folder BuildType="EXCLUDE" Path=".\ARM_GCC_441">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn" />
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn" />
       </Folder>
       <Folder BuildType="EXCLUDE" Path=".\ARM_GCC_473">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn" />
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn" />
       </Folder>
       <Folder BuildType="EXCLUDE" Path=".\DP8051_Keil_951">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn" />
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn" />
       </Folder>
       <Folder BuildType="EXCLUDE" Path=".\DP8051">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn" />
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn" />
       </Folder>
       <Folder BuildType="EXCLUDE" Path=".\CortexM0">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn" />
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn" />
       </Folder>
       <Folder BuildType="EXCLUDE" Path=".\CortexM3">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn" />
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn" />
       </Folder>
     </Folders>
   </Project>

BIN
lib/SCSI2SD/software/SCSI2SD/v3/USB_Bootloader.cydsn/USB_Bootloader.cyfit


+ 41 - 40
lib/SCSI2SD/software/SCSI2SD/v3/USB_Bootloader.cydsn/USB_Bootloader.cyprj.Micha_000

@@ -119,43 +119,6 @@
 <dep name=".\Generated_Source\PSoC5\BL.c" />
 </file>
 <file name=".\Generated_Source\PSoC5\BL.c" />
-<file name=".\CortexM3\ARM_GCC_473\Release\USBFS_pm.o">
-<dep name=".\Generated_Source\PSoC5\BL.h" />
-<dep name=".\Generated_Source\PSoC5\BL_PVT.h" />
-<dep name=".\Generated_Source\PSoC5\CyDmac.h" />
-<dep name=".\Generated_Source\PSoC5\CyFlash.h" />
-<dep name=".\Generated_Source\PSoC5\CyLib.h" />
-<dep name=".\Generated_Source\PSoC5\CySpc.h" />
-<dep name=".\Generated_Source\PSoC5\SCSI_Out_DBx_aliases.h" />
-<dep name=".\Generated_Source\PSoC5\SCSI_Out_aliases.h" />
-<dep name=".\Generated_Source\PSoC5\SD_PULLUP.h" />
-<dep name=".\Generated_Source\PSoC5\SD_PULLUP_aliases.h" />
-<dep name=".\Generated_Source\PSoC5\USBFS.h" />
-<dep name=".\Generated_Source\PSoC5\USBFS_Dm.h" />
-<dep name=".\Generated_Source\PSoC5\USBFS_Dm_aliases.h" />
-<dep name=".\Generated_Source\PSoC5\USBFS_Dp.h" />
-<dep name=".\Generated_Source\PSoC5\USBFS_Dp_aliases.h" />
-<dep name=".\Generated_Source\PSoC5\USBFS_audio.h" />
-<dep name=".\Generated_Source\PSoC5\USBFS_cdc.h" />
-<dep name=".\Generated_Source\PSoC5\USBFS_hid.h" />
-<dep name=".\Generated_Source\PSoC5\USBFS_midi.h" />
-<dep name=".\Generated_Source\PSoC5\USBFS_pvt.h" />
-<dep name=".\Generated_Source\PSoC5\core_cm3.h" />
-<dep name=".\Generated_Source\PSoC5\core_cm3_psoc5.h" />
-<dep name=".\Generated_Source\PSoC5\core_cmFunc.h" />
-<dep name=".\Generated_Source\PSoC5\core_cmInstr.h" />
-<dep name=".\Generated_Source\PSoC5\cyPm.h" />
-<dep name=".\Generated_Source\PSoC5\cydevice.h" />
-<dep name=".\Generated_Source\PSoC5\cydevice_trm.h" />
-<dep name=".\Generated_Source\PSoC5\cydisabledsheets.h" />
-<dep name=".\Generated_Source\PSoC5\cyfitter.h" />
-<dep name=".\Generated_Source\PSoC5\cyfitter_cfg.h" />
-<dep name=".\Generated_Source\PSoC5\cypins.h" />
-<dep name=".\Generated_Source\PSoC5\cytypes.h" />
-<dep name=".\Generated_Source\PSoC5\project.h" />
-<dep name=".\Generated_Source\PSoC5\USBFS_pm.c" />
-</file>
-<file name=".\Generated_Source\PSoC5\USBFS_pm.c" />
 <file name=".\CortexM3\ARM_GCC_473\Release\Cm3Start.o">
 <dep name=".\Generated_Source\PSoC5\CyDmac.h" />
 <dep name=".\Generated_Source\PSoC5\CyFlash.h" />
@@ -402,6 +365,43 @@
 <dep name=".\Generated_Source\PSoC5\USBFS_midi.c" />
 </file>
 <file name=".\Generated_Source\PSoC5\USBFS_midi.c" />
+<file name=".\CortexM3\ARM_GCC_473\Release\USBFS_pm.o">
+<dep name=".\Generated_Source\PSoC5\BL.h" />
+<dep name=".\Generated_Source\PSoC5\BL_PVT.h" />
+<dep name=".\Generated_Source\PSoC5\CyDmac.h" />
+<dep name=".\Generated_Source\PSoC5\CyFlash.h" />
+<dep name=".\Generated_Source\PSoC5\CyLib.h" />
+<dep name=".\Generated_Source\PSoC5\CySpc.h" />
+<dep name=".\Generated_Source\PSoC5\SCSI_Out_DBx_aliases.h" />
+<dep name=".\Generated_Source\PSoC5\SCSI_Out_aliases.h" />
+<dep name=".\Generated_Source\PSoC5\SD_PULLUP.h" />
+<dep name=".\Generated_Source\PSoC5\SD_PULLUP_aliases.h" />
+<dep name=".\Generated_Source\PSoC5\USBFS.h" />
+<dep name=".\Generated_Source\PSoC5\USBFS_Dm.h" />
+<dep name=".\Generated_Source\PSoC5\USBFS_Dm_aliases.h" />
+<dep name=".\Generated_Source\PSoC5\USBFS_Dp.h" />
+<dep name=".\Generated_Source\PSoC5\USBFS_Dp_aliases.h" />
+<dep name=".\Generated_Source\PSoC5\USBFS_audio.h" />
+<dep name=".\Generated_Source\PSoC5\USBFS_cdc.h" />
+<dep name=".\Generated_Source\PSoC5\USBFS_hid.h" />
+<dep name=".\Generated_Source\PSoC5\USBFS_midi.h" />
+<dep name=".\Generated_Source\PSoC5\USBFS_pvt.h" />
+<dep name=".\Generated_Source\PSoC5\core_cm3.h" />
+<dep name=".\Generated_Source\PSoC5\core_cm3_psoc5.h" />
+<dep name=".\Generated_Source\PSoC5\core_cmFunc.h" />
+<dep name=".\Generated_Source\PSoC5\core_cmInstr.h" />
+<dep name=".\Generated_Source\PSoC5\cyPm.h" />
+<dep name=".\Generated_Source\PSoC5\cydevice.h" />
+<dep name=".\Generated_Source\PSoC5\cydevice_trm.h" />
+<dep name=".\Generated_Source\PSoC5\cydisabledsheets.h" />
+<dep name=".\Generated_Source\PSoC5\cyfitter.h" />
+<dep name=".\Generated_Source\PSoC5\cyfitter_cfg.h" />
+<dep name=".\Generated_Source\PSoC5\cypins.h" />
+<dep name=".\Generated_Source\PSoC5\cytypes.h" />
+<dep name=".\Generated_Source\PSoC5\project.h" />
+<dep name=".\Generated_Source\PSoC5\USBFS_pm.c" />
+</file>
+<file name=".\Generated_Source\PSoC5\USBFS_pm.c" />
 <file name=".\CortexM3\ARM_GCC_473\Release\USBFS_std.o">
 <dep name=".\Generated_Source\PSoC5\CyDmac.h" />
 <dep name=".\Generated_Source\PSoC5\CyFlash.h" />
@@ -1080,6 +1080,7 @@
 <name_val_pair name="Z:\projects\SCSI2SD\git-3.4_debug\SCSI2SD\software\SCSI2SD\USB_Bootloader.cydsn\CortexM3\ARM_GCC_473\Release\USB_Bootloader.hex" v="&quot;-mthumb &quot;&quot;-march=armv7-m &quot;&quot;-mfix-cortex-m3-ldrd &quot;&quot;-T &quot;&quot;.\Generated_Source\PSoC5\cm3gcc.ld &quot;&quot;-g &quot;&quot;-Wl,-Map,${OutputDir}\${ProjectShortName}.map &quot;&quot;-specs=nano.specs &quot;&quot;-Wl,--gc-sections &quot;" />
 <name_val_pair name="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\USB_Bootloader.cydsn\CortexM3\ARM_GCC_473\Release\USB_Bootloader.hex" v="&quot;-mthumb &quot;&quot;-march=armv7-m &quot;&quot;-mfix-cortex-m3-ldrd &quot;&quot;-T &quot;&quot;.\Generated_Source\PSoC5\cm3gcc.ld &quot;&quot;-g &quot;&quot;-Wl,-Map,${OutputDir}\${ProjectShortName}.map &quot;&quot;-specs=nano.specs &quot;&quot;-Wl,--gc-sections &quot;" />
 <name_val_pair name="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\CortexM3\ARM_GCC_473\Release\USB_Bootloader.hex" v="&quot;-mthumb &quot;&quot;-march=armv7-m &quot;&quot;-mfix-cortex-m3-ldrd &quot;&quot;-T &quot;&quot;.\Generated_Source\PSoC5\cm3gcc.ld &quot;&quot;-g &quot;&quot;-Wl,-Map,${OutputDir}\${ProjectShortName}.map &quot;&quot;-specs=nano.specs &quot;&quot;-Wl,--gc-sections &quot;" />
+<name_val_pair name="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\CortexM3\ARM_GCC_473\Release\USB_Bootloader.hex" v="&quot;-mthumb &quot;&quot;-march=armv7-m &quot;&quot;-mfix-cortex-m3-ldrd &quot;&quot;-T &quot;&quot;.\Generated_Source\PSoC5\cm3gcc.ld &quot;&quot;-g &quot;&quot;-Wl,-Map,${OutputDir}\${ProjectShortName}.map &quot;&quot;-specs=nano.specs &quot;&quot;-Wl,--gc-sections &quot;" />
 </name>
 <name v="c9323d49-d323-40b8-9b59-cc008d68a989@Debug@CortexM3">
 <name_val_pair name=".\main.c" v="&quot;-I. &quot;&quot;-I./Generated_Source/PSoC5 &quot;&quot;-Wno-main &quot;&quot;-mcpu=cortex-m3 &quot;&quot;-mthumb &quot;&quot;-Wall &quot;&quot;-g &quot;&quot;-D &quot;&quot;DEBUG &quot;&quot;-Wa,-alh=${OutputDir}\${CompileFile}.lst &quot;&quot;-ffunction-sections &quot;" />
@@ -1113,7 +1114,7 @@
 <name_val_pair name="W:\SCSI2SD\software\SCSI2SD\USB_Bootloader.cydsn\CortexM3\ARM_GCC_473\Debug\USB_Bootloader.hex" v="&quot;-mthumb &quot;&quot;-march=armv7-m &quot;&quot;-mfix-cortex-m3-ldrd &quot;&quot;-T &quot;&quot;.\Generated_Source\PSoC5\cm3gcc.ld &quot;&quot;-g &quot;&quot;-Wl,-Map,${OutputDir}\${ProjectShortName}.map &quot;&quot;-specs=nano.specs &quot;&quot;-Wl,--gc-sections &quot;" />
 </name>
 </genericCmdLineData>
-<codeGenCmdLineTag v="&quot;-.appdatapath&quot; &quot;C:\Users\Micha_000\AppData\Local\Cypress Semiconductor\PSoC Creator\3.0&quot; &quot;-.fdsnotice&quot; &quot;-.fdswarpdepfile=warp_dependencies.txt&quot; &quot;-.fdselabdepfile=elab_dependencies.txt&quot; &quot;-.fdsbldfile=generated_files.txt&quot; &quot;-p&quot; &quot;Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\USB_Bootloader.cyprj&quot; &quot;-d&quot; &quot;CY8C5267AXI-LP051&quot; &quot;-s&quot; &quot;Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\Generated_Source\PSoC5&quot; &quot;--&quot; &quot;-yv2&quot; &quot;-v3&quot; &quot;-ygs&quot; &quot;-q10&quot; &quot;-o2&quot; &quot;-.fftcfgtype=LE&quot; " />
+<codeGenCmdLineTag v="&quot;-.appdatapath&quot; &quot;C:\Users\Micha_000\AppData\Local\Cypress Semiconductor\PSoC Creator\3.0&quot; &quot;-.fdsnotice&quot; &quot;-.fdswarpdepfile=warp_dependencies.txt&quot; &quot;-.fdselabdepfile=elab_dependencies.txt&quot; &quot;-.fdsbldfile=generated_files.txt&quot; &quot;-p&quot; &quot;Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\USB_Bootloader.cyprj&quot; &quot;-d&quot; &quot;CY8C5267AXI-LP051&quot; &quot;-s&quot; &quot;Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\Generated_Source\PSoC5&quot; &quot;--&quot; &quot;-yv2&quot; &quot;-v3&quot; &quot;-ygs&quot; &quot;-q10&quot; &quot;-o2&quot; &quot;-.fftcfgtype=LE&quot; " />
 </CyGuid_b0374e30-ce3a-47f2-ad85-821643292c68>
 </dataGuid>
 <dataGuid v="597c5b74-0c46-4204-8b7f-96f3570671dc">
@@ -1666,14 +1667,14 @@
 <v>C:\Program Files (x86)\Cypress\PSoC Creator\3.0\PSoC Creator\warp\lib\common\stdlogic\mod_genv.vif</v>
 <v>C:\Program Files (x86)\Cypress\PSoC Creator\3.0\PSoC Creator\warp\lib\common\stdlogic\rtlpkg.vif</v>
 </warp_dep>
-<deps_time v="130495593784227004" />
+<deps_time v="130503061473414440" />
 <top_block v="TopDesign" />
 <last_generation v="0" />
 </CyGuid_925cc1e1-309e-4e08-b0a1-09a83c35b157>
 </dataGuid>
 <dataGuid v="769d31ea-68b1-4f0c-b90a-7c10a43ee563">
 <CyGuid_769d31ea-68b1-4f0c-b90a-7c10a43ee563 type_name="CyDesigner.Common.ProjMgmt.Model.CyLinkCustomData" version="1">
-<deps_time v="130495594117493903" />
+<deps_time v="130503062519177686" />
 </CyGuid_769d31ea-68b1-4f0c-b90a-7c10a43ee563>
 </dataGuid>
 <dataGuid v="bf610382-39c6-441f-80b8-b04622ea7845">

+ 44 - 44
lib/SCSI2SD/software/SCSI2SD/v3/USB_Bootloader.cydsn/USB_Bootloader.rpt

@@ -1,13 +1,13 @@
-Loading plugins phase: Elapsed time ==> 0s.663ms
-Initializing data phase: Elapsed time ==> 5s.693ms
+Loading plugins phase: Elapsed time ==> 0s.484ms
+Initializing data phase: Elapsed time ==> 4s.047ms
 <CYPRESSTAG name="CyDsfit arguments...">
-cydsfit arguments: -.fdsnotice -.fdswarpdepfile=warp_dependencies.txt -.fdselabdepfile=elab_dependencies.txt -.fdsbldfile=generated_files.txt -p Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\USB_Bootloader.cyprj -d CY8C5267AXI-LP051 -s Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\Generated_Source\PSoC5 -- -yv2 -v3 -ygs -q10 -o2 -.fftcfgtype=LE</CYPRESSTAG>
+cydsfit arguments: -.fdsnotice -.fdswarpdepfile=warp_dependencies.txt -.fdselabdepfile=elab_dependencies.txt -.fdsbldfile=generated_files.txt -p Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\USB_Bootloader.cyprj -d CY8C5267AXI-LP051 -s Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\Generated_Source\PSoC5 -- -yv2 -v3 -ygs -q10 -o2 -.fftcfgtype=LE</CYPRESSTAG>
 <CYPRESSTAG name="Design elaboration results...">
 </CYPRESSTAG>
-Elaboration phase: Elapsed time ==> 9s.252ms
+Elaboration phase: Elapsed time ==> 7s.623ms
 <CYPRESSTAG name="HDL generation results...">
 </CYPRESSTAG>
-HDL generation phase: Elapsed time ==> 0s.756ms
+HDL generation phase: Elapsed time ==> 0s.655ms
 <CYPRESSTAG name="Synthesis results...">
 
      | | | | | | |
@@ -25,23 +25,23 @@ HDL generation phase: Elapsed time ==> 0s.756ms
 ======================================================================
 Compiling:  USB_Bootloader.v
 Program  :   C:\Program Files (x86)\Cypress\PSoC Creator\3.0\PSoC Creator\warp\bin/warp.exe
-Options  :    -yv2 -v3 -ygs -q10 -o2 -.fftcfgtype=LE -ya -.fftprj=Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\USB_Bootloader.cyprj -dcpsoc3 USB_Bootloader.v -verilog
+Options  :    -yv2 -v3 -ygs -q10 -o2 -.fftcfgtype=LE -ya -.fftprj=Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\USB_Bootloader.cyprj -dcpsoc3 USB_Bootloader.v -verilog
 ======================================================================
 
 ======================================================================
 Compiling:  USB_Bootloader.v
 Program  :   C:\Program Files (x86)\Cypress\PSoC Creator\3.0\PSoC Creator\warp\bin/warp.exe
-Options  :    -yv2 -v3 -ygs -q10 -o2 -.fftcfgtype=LE -ya -.fftprj=Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\USB_Bootloader.cyprj -dcpsoc3 USB_Bootloader.v -verilog
+Options  :    -yv2 -v3 -ygs -q10 -o2 -.fftcfgtype=LE -ya -.fftprj=Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\USB_Bootloader.cyprj -dcpsoc3 USB_Bootloader.v -verilog
 ======================================================================
 
 ======================================================================
 Compiling:  USB_Bootloader.v
 Program  :   vlogfe
-Options  :    -yv2 -v3 -ygs -q10 -o2 -.fftcfgtype=LE -ya -.fftprj=Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\USB_Bootloader.cyprj -dcpsoc3 -verilog USB_Bootloader.v
+Options  :    -yv2 -v3 -ygs -q10 -o2 -.fftcfgtype=LE -ya -.fftprj=Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\USB_Bootloader.cyprj -dcpsoc3 -verilog USB_Bootloader.v
 ======================================================================
 
 vlogfe V6.3 IR 41:  Verilog parser
-Fri Jul 11 23:34:40 2014
+Sun Jul 20 15:00:50 2014
 
 
 ======================================================================
@@ -51,7 +51,7 @@ Options  :    -yv2 -q10 USB_Bootloader.v
 ======================================================================
 
 vpp V6.3 IR 41:  Verilog Pre-Processor
-Fri Jul 11 23:34:40 2014
+Sun Jul 20 15:00:50 2014
 
 
 vpp:  No errors.
@@ -76,11 +76,11 @@ vlogfe:  No errors.
 ======================================================================
 Compiling:  USB_Bootloader.v
 Program  :   tovif
-Options  :    -yv2 -v3 -ygs -q10 -o2 -.fftcfgtype=LE -ya -.fftprj=Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\USB_Bootloader.cyprj -dcpsoc3 -verilog USB_Bootloader.v
+Options  :    -yv2 -v3 -ygs -q10 -o2 -.fftcfgtype=LE -ya -.fftprj=Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\USB_Bootloader.cyprj -dcpsoc3 -verilog USB_Bootloader.v
 ======================================================================
 
 tovif V6.3 IR 41:  High-level synthesis
-Fri Jul 11 23:34:41 2014
+Sun Jul 20 15:00:51 2014
 
 Linking 'C:\Program Files (x86)\Cypress\PSoC Creator\3.0\PSoC Creator\warp\lib\common\std.vhd'.
 Linking 'C:\Program Files (x86)\Cypress\PSoC Creator\3.0\PSoC Creator\warp\lib\common\cypress.vhd'.
@@ -91,8 +91,8 @@ Linking 'C:\Program Files (x86)\Cypress\PSoC Creator\3.0\PSoC Creator\warp\lib\c
 Linking 'C:\Program Files (x86)\Cypress\PSoC Creator\3.0\PSoC Creator\warp\lib\common\stdlogic\mod_cnst.vif'.
 Linking 'C:\Program Files (x86)\Cypress\PSoC Creator\3.0\PSoC Creator\warp\lib\common\stdlogic\mod_mthv.vif'.
 Linking 'C:\Program Files (x86)\Cypress\PSoC Creator\3.0\PSoC Creator\warp\lib\common\stdlogic\mod_genv.vif'.
-Linking 'Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\codegentemp\USB_Bootloader.ctl'.
-Linking 'Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\codegentemp\USB_Bootloader.v'.
+Linking 'Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\codegentemp\USB_Bootloader.ctl'.
+Linking 'Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\codegentemp\USB_Bootloader.v'.
 
 tovif:  No errors.
 
@@ -100,11 +100,11 @@ tovif:  No errors.
 ======================================================================
 Compiling:  USB_Bootloader.v
 Program  :   topld
-Options  :    -yv2 -v3 -ygs -q10 -o2 -.fftcfgtype=LE -ya -.fftprj=Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\USB_Bootloader.cyprj -dcpsoc3 -verilog USB_Bootloader.v
+Options  :    -yv2 -v3 -ygs -q10 -o2 -.fftcfgtype=LE -ya -.fftprj=Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\USB_Bootloader.cyprj -dcpsoc3 -verilog USB_Bootloader.v
 ======================================================================
 
 topld V6.3 IR 41:  Synthesis and optimization
-Fri Jul 11 23:34:43 2014
+Sun Jul 20 15:00:52 2014
 
 Linking 'C:\Program Files (x86)\Cypress\PSoC Creator\3.0\PSoC Creator\warp\lib\common\std.vhd'.
 Linking 'C:\Program Files (x86)\Cypress\PSoC Creator\3.0\PSoC Creator\warp\lib\common\cypress.vhd'.
@@ -115,8 +115,8 @@ Linking 'C:\Program Files (x86)\Cypress\PSoC Creator\3.0\PSoC Creator\warp\lib\c
 Linking 'C:\Program Files (x86)\Cypress\PSoC Creator\3.0\PSoC Creator\warp\lib\common\stdlogic\mod_cnst.vif'.
 Linking 'C:\Program Files (x86)\Cypress\PSoC Creator\3.0\PSoC Creator\warp\lib\common\stdlogic\mod_mthv.vif'.
 Linking 'C:\Program Files (x86)\Cypress\PSoC Creator\3.0\PSoC Creator\warp\lib\common\stdlogic\mod_genv.vif'.
-Linking 'Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\codegentemp\USB_Bootloader.ctl'.
-Linking 'Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\codegentemp\USB_Bootloader.v'.
+Linking 'Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\codegentemp\USB_Bootloader.ctl'.
+Linking 'Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\codegentemp\USB_Bootloader.v'.
 Linking 'C:\Program Files (x86)\Cypress\PSoC Creator\3.0\PSoC Creator\warp\lib\lcpsoc3\stdlogic\cpsoc3.vif'.
 
 ----------------------------------------------------------
@@ -202,16 +202,16 @@ topld:  No errors.
 
 CYPRESS_DIR    : C:\Program Files (x86)\Cypress\PSoC Creator\3.0\PSoC Creator\warp
 Warp Program   : C:\Program Files (x86)\Cypress\PSoC Creator\3.0\PSoC Creator\warp\bin/warp.exe
-Warp Arguments : -yv2 -v3 -ygs -q10 -o2 -.fftcfgtype=LE -ya -.fftprj=Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\USB_Bootloader.cyprj -dcpsoc3 USB_Bootloader.v -verilog
+Warp Arguments : -yv2 -v3 -ygs -q10 -o2 -.fftcfgtype=LE -ya -.fftprj=Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\USB_Bootloader.cyprj -dcpsoc3 USB_Bootloader.v -verilog
 </CYPRESSTAG>
-Warp synthesis phase: Elapsed time ==> 9s.922ms
+Warp synthesis phase: Elapsed time ==> 8s.781ms
 <CYPRESSTAG name="Fitter results...">
 <CYPRESSTAG name="Fitter startup details...">
-cyp3fit: V3.0.0.1539, Family: PSoC3, Started at: Friday, 11 July 2014 23:34:49
-Options: -yv2 -v3 -ygs -q10 -o2 -.fftcfgtype=LE -ya -.fftprj=Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\USB_Bootloader.cyprj -d CY8C5267AXI-LP051 USB_Bootloader.v -verilog
+cyp3fit: V3.0.0.1539, Family: PSoC3, Started at: Sunday, 20 July 2014 15:00:57
+Options: -yv2 -v3 -ygs -q10 -o2 -.fftcfgtype=LE -ya -.fftprj=Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v3\USB_Bootloader.cydsn\USB_Bootloader.cyprj -d CY8C5267AXI-LP051 USB_Bootloader.v -verilog
 </CYPRESSTAG>
 <CYPRESSTAG name="Design parsing">
-Design parsing phase: Elapsed time ==> 0s.152ms
+Design parsing phase: Elapsed time ==> 0s.031ms
 </CYPRESSTAG>
 <CYPRESSTAG name="Tech mapping">
 <CYPRESSTAG name="Initial Mapping" icon="FILE_RPT_TECHM">
@@ -1314,8 +1314,8 @@ EMIF Fixed Blocks             :    0 :    1 :    1 :   0.00%
 LPF Fixed Blocks              :    0 :    2 :    2 :   0.00%
 SAR Fixed Blocks              :    0 :    1 :    1 :   0.00%
 </CYPRESSTAG>
-Technology Mapping: Elapsed time ==> 0s.414ms
-Tech mapping phase: Elapsed time ==> 0s.690ms
+Technology Mapping: Elapsed time ==> 0s.406ms
+Tech mapping phase: Elapsed time ==> 0s.687ms
 </CYPRESSTAG>
 <CYPRESSTAG name="Analog Placement">
 Initial Analog Placement Results:
@@ -1345,10 +1345,10 @@ IO_5@[IOP=(3)][IoId=(5)] : SD_PULLUP(4) (fixed)
 IO_7@[IOP=(15)][IoId=(7)] : \USBFS:Dm(0)\ (fixed)
 IO_6@[IOP=(15)][IoId=(6)] : \USBFS:Dp(0)\ (fixed)
 USB[0]@[FFB(USB,0)] : \USBFS:USB\
-Analog Placement phase: Elapsed time ==> 0s.169ms
+Analog Placement phase: Elapsed time ==> 0s.094ms
 </CYPRESSTAG>
 <CYPRESSTAG name="Analog Routing">
-Analog Routing phase: Elapsed time ==> 0s.001ms
+Analog Routing phase: Elapsed time ==> 0s.000ms
 </CYPRESSTAG>
 <CYPRESSTAG name="Analog Code Generation">
 ============ Analog Final Answer Routes ============
@@ -1363,29 +1363,29 @@ Dump of CyP35AnalogRoutingResultsDB
 IsVddaHalfUsedForComp = False
 IsVddaHalfUsedForSar0 = False
 IsVddaHalfUsedForSar1 = False
-Analog Code Generation phase: Elapsed time ==> 1s.579ms
+Analog Code Generation phase: Elapsed time ==> 1s.405ms
 </CYPRESSTAG>
 <CYPRESSTAG name="Digital Placement">
 <CYPRESSTAG name="Detailed placement messages">
 I2659: No Constrained paths were found. The placer will run in non-timing driven mode.
-I2076: Total run-time: 5.4 sec.
+I2076: Total run-time: 5.3 sec.
 
 </CYPRESSTAG>
 <CYPRESSTAG name="PLD Packing">
 <CYPRESSTAG name="PLD Packing Summary">
 No PLDs were packed.
 </CYPRESSTAG>
-PLD Packing: Elapsed time ==> 0s.005ms
+PLD Packing: Elapsed time ==> 0s.000ms
 </CYPRESSTAG>
 <CYPRESSTAG name="Partitioning">
 <CYPRESSTAG name="Initial Partitioning Summary">
 Initial Partitioning Summary not displayed at this verbose level.</CYPRESSTAG>
 <CYPRESSTAG name="Final Partitioning Summary">
 Final Partitioning Summary not displayed at this verbose level.</CYPRESSTAG>
-Partitioning: Elapsed time ==> 0s.088ms
+Partitioning: Elapsed time ==> 0s.079ms
 </CYPRESSTAG>
 <CYPRESSTAG name="Simulated Annealing">
-Annealing: Elapsed time ==> 0s.003ms
+Annealing: Elapsed time ==> 0s.000ms
 <CYPRESSTAG name="Simulated Annealing Results">
 The seed used for moves was 114161200.
 Inital cost was 120, final cost is 120 (0.00% improvement).</CYPRESSTAG>
@@ -2664,32 +2664,32 @@ Port | Pin | Fixed |      Type |       Drive Mode |            Name | Connection
 </CYPRESSTAG>
 </CYPRESSTAG>
 </CYPRESSTAG>
-Digital component placer commit/Report: Elapsed time ==> 0s.381ms
-Digital Placement phase: Elapsed time ==> 9s.177ms
+Digital component placer commit/Report: Elapsed time ==> 0s.373ms
+Digital Placement phase: Elapsed time ==> 9s.093ms
 </CYPRESSTAG>
 <CYPRESSTAG name="Digital Routing">
 Routing successful.
-Digital Routing phase: Elapsed time ==> 11s.165ms
+Digital Routing phase: Elapsed time ==> 8s.703ms
 </CYPRESSTAG>
 <CYPRESSTAG name="Bitstream and API generation">
-Bitstream and API generation phase: Elapsed time ==> 25s.258ms
+Bitstream and API generation phase: Elapsed time ==> 25s.515ms
 </CYPRESSTAG>
 <CYPRESSTAG name="Bitstream verification">
-Bitstream verification phase: Elapsed time ==> 0s.188ms
+Bitstream verification phase: Elapsed time ==> 0s.125ms
 </CYPRESSTAG>
 <CYPRESSTAG name="Static timing analysis">
 Timing report is in USB_Bootloader_timing.html.
-Static timing analysis phase: Elapsed time ==> 3s.834ms
+Static timing analysis phase: Elapsed time ==> 3s.999ms
 </CYPRESSTAG>
 <CYPRESSTAG name="Data reporting">
 Data reporting phase: Elapsed time ==> 0s.000ms
 </CYPRESSTAG>
 <CYPRESSTAG name="Database update...">
-Design database save phase: Elapsed time ==> 0s.664ms
+Design database save phase: Elapsed time ==> 0s.734ms
 </CYPRESSTAG>
-cydsfit: Elapsed time ==> 53s.302ms
+cydsfit: Elapsed time ==> 50s.735ms
 </CYPRESSTAG>
-Fitter phase: Elapsed time ==> 53s.394ms
-API generation phase: Elapsed time ==> 23s.082ms
-Dependency generation phase: Elapsed time ==> 1s.067ms
-Cleanup phase: Elapsed time ==> 0s.811ms
+Fitter phase: Elapsed time ==> 50s.829ms
+API generation phase: Elapsed time ==> 23s.686ms
+Dependency generation phase: Elapsed time ==> 0s.859ms
+Cleanup phase: Elapsed time ==> 0s.609ms

+ 1 - 1
lib/SCSI2SD/software/SCSI2SD/v3/USB_Bootloader.cydsn/USB_Bootloader_timing.html

@@ -539,7 +539,7 @@ function getElementsByClass(rootNode, elemName, className)
 <tr> <td class="prop"> Project :</td>
 <td class="proptext"> USB_Bootloader</td></tr>
 <tr> <td class="prop"> Build Time :</td>
-<td class="proptext"> 07/11/14 23:35:41</td></tr>
+<td class="proptext"> 07/20/14 15:01:46</td></tr>
 <tr> <td class="prop"> Device :</td>
 <td class="proptext"> CY8C5267AXI-LP051</td></tr>
 <tr> <td class="prop"> Temperature :</td>

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

@@ -83,8 +83,10 @@
 #define USBFS_DEVICE0_CONFIGURATION0_INTERFACE1_ALTERNATE0_HID_NUM_OUT_RPTS   (1u)
 #define USBFS_DEVICE0_CONFIGURATION0_INTERFACE1_ALTERNATE0_HID_COUNT   (1u)
 #define USBFS_ENABLE_HID_CLASS   
-#define USBFS_HID_RPT_1_SIZE_LSB   (0x24u)
+#define USBFS_HID_RPT_1_SIZE_LSB   (0x25u)
 #define USBFS_HID_RPT_1_SIZE_MSB   (0x00u)
+#define USBFS_HID_RPT_2_SIZE_LSB   (0x25u)
+#define USBFS_HID_RPT_2_SIZE_MSB   (0x00u)
 #define USBFS_MAX_REPORTID_NUMBER   (0u)
 
 #define USBFS_MON_VBUS                       (0u)

+ 34 - 6
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_descr.c

@@ -126,8 +126,8 @@ const uint8 CYCODE USBFS_DEVICE0_CONFIGURATION0_DESCR[73u] = {
 /*  bCountryCode                           */ 0x00u,
 /*  bNumDescriptors                        */ 0x01u,
 /*  bDescriptorType                        */ 0x22u,
-/*  wDescriptorLength (LSB)                */ USBFS_HID_RPT_1_SIZE_LSB,
-/*  wDescriptorLength (MSB)                */ USBFS_HID_RPT_1_SIZE_MSB,
+/*  wDescriptorLength (LSB)                */ USBFS_HID_RPT_2_SIZE_LSB,
+/*  wDescriptorLength (MSB)                */ USBFS_HID_RPT_2_SIZE_MSB,
 /*********************************************************************
 * Endpoint Descriptor
 *********************************************************************/
@@ -187,12 +187,12 @@ const uint8 CYCODE USBFS_SN_STRING_DESCRIPTOR[10] = {
 };
 
 /*********************************************************************
-* HID Report Descriptor: Generic HID
+* HID Report Descriptor: Generic HID - Vendor FF00
 *********************************************************************/
-const uint8 CYCODE USBFS_HIDREPORT_DESCRIPTOR1[40u] = {
+const uint8 CYCODE USBFS_HIDREPORT_DESCRIPTOR1[41u] = {
 /*  Descriptor Size (Not part of descriptor)*/ USBFS_HID_RPT_1_SIZE_LSB,
 USBFS_HID_RPT_1_SIZE_MSB,
-/* USAGE_PAGE                              */ 0x05u, 0x01u, 
+/* USAGE_PAGE                              */ 0x06u, 0x00u, 0xFFu, 
 /* USAGE                                   */ 0x09u, 0x00u, 
 /* COLLECTION                              */ 0xA1u, 0x00u, 
 /* USAGE                                   */ 0x09u, 0x00u, 
@@ -214,6 +214,34 @@ USBFS_HID_RPT_1_SIZE_MSB,
 /*********************************************************************/
 /* End of the HID Report Descriptor        */ 0x00u, 0x00u};
 /*********************************************************************/
+/*********************************************************************
+* HID Report Descriptor: Generic HID - Vendor FF01
+*********************************************************************/
+const uint8 CYCODE USBFS_HIDREPORT_DESCRIPTOR2[41u] = {
+/*  Descriptor Size (Not part of descriptor)*/ USBFS_HID_RPT_2_SIZE_LSB,
+USBFS_HID_RPT_2_SIZE_MSB,
+/* USAGE_PAGE                              */ 0x06u, 0x01u, 0xFFu, 
+/* USAGE                                   */ 0x09u, 0x01u, 
+/* COLLECTION                              */ 0xA1u, 0x00u, 
+/* USAGE                                   */ 0x09u, 0x00u, 
+/* COLLECTION                              */ 0xA1u, 0x00u, 
+/* USAGE                                   */ 0x09u, 0x00u, 
+/* LOGICAL_MINIMUM                         */ 0x15u, 0x00u, 
+/* LOGICAL_MAXIMUM                         */ 0x25u, 0xFFu, 
+/* REPORT_SIZE                             */ 0x75u, 0x08u, 
+/* REPORT_COUNT                            */ 0x95u, 0x40u, 
+/* OUTPUT                                  */ 0x91u, 0x02u, 
+/* USAGE                                   */ 0x09u, 0x00u, 
+/* LOGICAL_MINIMUM                         */ 0x15u, 0x00u, 
+/* LOGICAL_MAXIMUM                         */ 0x25u, 0xFFu, 
+/* REPORT_SIZE                             */ 0x75u, 0x08u, 
+/* REPORT_COUNT                            */ 0x95u, 0x40u, 
+/* INPUT                                   */ 0x81u, 0x02u, 
+/* END_COLLECTION                          */ 0xC0u, 
+/* END_COLLECTION                          */ 0xC0u, 
+/*********************************************************************/
+/* End of the HID Report Descriptor        */ 0x00u, 0x00u};
+/*********************************************************************/
 
 #if !defined(USER_DEFINE_USBFS_DEVICE0_CONFIGURATION0_INTERFACE0_ALTERNATE0_HID_HID_RPT_STORAGE)
 /*********************************************************************
@@ -305,7 +333,7 @@ const T_USBFS_LUT CYCODE USBFS_DEVICE0_CONFIGURATION0_INTERFACE1_ALTERNATE0_HID_
     {0x00u,     &USBFS_DEVICE0_CONFIGURATION0_INTERFACE1_ALTERNATE0_HID_IN_RPT_TABLE},
     {0x00u,     &USBFS_DEVICE0_CONFIGURATION0_INTERFACE1_ALTERNATE0_HID_OUT_RPT_TABLE},
     {0x00u,    NULL},
-    {0x01u,     (const void *)&USBFS_HIDREPORT_DESCRIPTOR1[0]},
+    {0x01u,     (const void *)&USBFS_HIDREPORT_DESCRIPTOR2[0]},
     {0x01u,     (const void *)&USBFS_DEVICE0_CONFIGURATION0_DESCR[50]}
 };
 #endif /* USER_DEFINE_USBFS_DEVICE0_CONFIGURATION0_INTERFACE1_ALTERNATE0_HID_HID_RPT_STORAGE */

+ 2 - 1
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_pvt.h

@@ -48,7 +48,8 @@ extern uint8 USBFS_DEVICE0_CONFIGURATION0_INTERFACE1_ALTERNATE0_HID_IN_BUF[
 extern T_USBFS_XFER_STATUS_BLOCK USBFS_DEVICE0_CONFIGURATION0_INTERFACE1_ALTERNATE0_HID_OUT_RPT_SCB;
 extern uint8 USBFS_DEVICE0_CONFIGURATION0_INTERFACE1_ALTERNATE0_HID_OUT_BUF[
             USBFS_DEVICE0_CONFIGURATION0_INTERFACE1_ALTERNATE0_HID_OUT_BUF_SIZE];
-extern const uint8 CYCODE USBFS_HIDREPORT_DESCRIPTOR1[40u];
+extern const uint8 CYCODE USBFS_HIDREPORT_DESCRIPTOR1[41u];
+extern const uint8 CYCODE USBFS_HIDREPORT_DESCRIPTOR2[41u];
 extern const T_USBFS_TD CYCODE USBFS_DEVICE0_CONFIGURATION0_INTERFACE0_ALTERNATE0_HID_IN_RPT_TABLE[1u];
 extern const T_USBFS_TD CYCODE USBFS_DEVICE0_CONFIGURATION0_INTERFACE0_ALTERNATE0_HID_OUT_RPT_TABLE[1u];
 extern const T_USBFS_LUT CYCODE USBFS_DEVICE0_CONFIGURATION0_INTERFACE0_ALTERNATE0_HID_TABLE[5u];

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

@@ -31,18 +31,18 @@ const uint8 cy_bootloader[] = {
     0x00u, 0x40u, 0x00u, 0x20u, 0x11u, 0x00u, 0x00u, 0x00u,
     0x59u, 0x01u, 0x00u, 0x00u, 0x59u, 0x01u, 0x00u, 0x00u,
     0x08u, 0xB5u, 0x04u, 0x4Bu, 0x04u, 0x48u, 0x1Au, 0x68u,
-    0x02u, 0x60u, 0x00u, 0xF0u, 0x53u, 0xFCu, 0x00u, 0xF0u,
+    0x02u, 0x60u, 0x00u, 0xF0u, 0x87u, 0xFCu, 0x00u, 0xF0u,
     0x9Du, 0xF8u, 0x00u, 0xBFu, 0xFAu, 0x46u, 0x00u, 0x40u,
     0xBCu, 0x76u, 0x00u, 0x40u, 0x10u, 0xB5u, 0x05u, 0x4Cu,
     0x23u, 0x78u, 0x33u, 0xB9u, 0x04u, 0x48u, 0x10u, 0xB1u,
     0x04u, 0x48u, 0xAFu, 0xF3u, 0x00u, 0x80u, 0x01u, 0x21u,
     0x21u, 0x70u, 0x10u, 0xBDu, 0x28u, 0xC1u, 0xFFu, 0x1Fu,
-    0x00u, 0x00u, 0x00u, 0x00u, 0xBCu, 0x1Fu, 0x00u, 0x00u,
+    0x00u, 0x00u, 0x00u, 0x00u, 0x24u, 0x20u, 0x00u, 0x00u,
     0x08u, 0xB5u, 0x06u, 0x4Bu, 0x1Bu, 0xB1u, 0x06u, 0x48u,
     0x06u, 0x49u, 0xAFu, 0xF3u, 0x00u, 0x80u, 0x06u, 0x48u,
     0x01u, 0x68u, 0x11u, 0xB1u, 0x05u, 0x4Au, 0x02u, 0xB1u,
     0x90u, 0x47u, 0x08u, 0xBDu, 0x00u, 0x00u, 0x00u, 0x00u,
-    0xBCu, 0x1Fu, 0x00u, 0x00u, 0x2Cu, 0xC1u, 0xFFu, 0x1Fu,
+    0x24u, 0x20u, 0x00u, 0x00u, 0x2Cu, 0xC1u, 0xFFu, 0x1Fu,
     0x08u, 0xC1u, 0xFFu, 0x1Fu, 0x00u, 0x00u, 0x00u, 0x00u,
     0x08u, 0xB5u, 0x34u, 0x4Bu, 0x1Au, 0x78u, 0x02u, 0xF0u,
     0xFEu, 0x00u, 0x18u, 0x70u, 0x93u, 0xF8u, 0x7Au, 0x10u,
@@ -70,7 +70,7 @@ const uint8 cy_bootloader[] = {
     0x16u, 0x1Cu, 0x01u, 0xF0u, 0xFEu, 0x02u, 0x03u, 0xF8u,
     0x16u, 0x2Cu, 0x93u, 0xF8u, 0x55u, 0x00u, 0x00u, 0xF0u,
     0xFEu, 0x01u, 0x83u, 0xF8u, 0x55u, 0x10u, 0x00u, 0xF0u,
-    0xEBu, 0xF9u, 0xFEu, 0xE7u, 0x02u, 0x50u, 0x00u, 0x40u,
+    0xADu, 0xFBu, 0xFEu, 0xE7u, 0x02u, 0x50u, 0x00u, 0x40u,
     0xFEu, 0xE7u, 0x00u, 0x00u, 0x08u, 0xB5u, 0x12u, 0x49u,
     0x12u, 0x4Bu, 0x4Au, 0x1Cu, 0x1Au, 0xD0u, 0x53u, 0xF8u,
     0x10u, 0x6Cu, 0x53u, 0xF8u, 0x0Cu, 0x0Cu, 0x53u, 0xF8u,
@@ -79,9 +79,9 @@ const uint8 cy_bootloader[] = {
     0x04u, 0x32u, 0xF7u, 0xE7u, 0x53u, 0xF8u, 0x04u, 0x0Cu,
     0x00u, 0x22u, 0x82u, 0x42u, 0x03u, 0xD0u, 0x00u, 0x25u,
     0xA5u, 0x50u, 0x04u, 0x32u, 0xF9u, 0xE7u, 0x01u, 0x39u,
-    0x10u, 0x33u, 0xE2u, 0xE7u, 0x01u, 0xF0u, 0xD2u, 0xFEu,
+    0x10u, 0x33u, 0xE2u, 0xE7u, 0x01u, 0xF0u, 0x06u, 0xFFu,
     0xFFu, 0xF7u, 0x6Eu, 0xFFu, 0xFEu, 0xE7u, 0x00u, 0xBFu,
-    0x00u, 0x00u, 0x00u, 0x00u, 0x18u, 0x22u, 0x00u, 0x00u,
+    0x00u, 0x00u, 0x00u, 0x00u, 0x80u, 0x22u, 0x00u, 0x00u,
     0x08u, 0xB5u, 0x10u, 0x4Au, 0x10u, 0x4Bu, 0x1Au, 0x60u,
     0x98u, 0x68u, 0x40u, 0xF4u, 0x00u, 0x72u, 0x9Au, 0x60u,
     0x00u, 0x23u, 0x03u, 0x2Bu, 0x96u, 0xBFu, 0x0Du, 0x4Au,
@@ -104,7 +104,7 @@ const uint8 cy_bootloader[] = {
     0x00u, 0x24u, 0x23u, 0xF8u, 0x02u, 0x1Cu, 0x5Fu, 0x4Eu,
     0x4Fu, 0xF4u, 0xF0u, 0x70u, 0x37u, 0x78u, 0x07u, 0xF0u,
     0x01u, 0x02u, 0x42u, 0xEAu, 0x44u, 0x04u, 0x00u, 0xF0u,
-    0x4Bu, 0xFBu, 0x01u, 0x3Du, 0x04u, 0xF0u, 0x03u, 0x04u,
+    0x7Fu, 0xFBu, 0x01u, 0x3Du, 0x04u, 0xF0u, 0x03u, 0x04u,
     0x17u, 0xD0u, 0x03u, 0x2Cu, 0xEFu, 0xD1u, 0x58u, 0x48u,
     0x58u, 0x4Fu, 0x00u, 0x26u, 0x4Fu, 0xF4u, 0x80u, 0x73u,
     0x57u, 0x4Du, 0x07u, 0x21u, 0x48u, 0x22u, 0x02u, 0x24u,
@@ -113,7 +113,7 @@ const uint8 cy_bootloader[] = {
     0x28u, 0x78u, 0x40u, 0xF0u, 0x04u, 0x03u, 0x2Bu, 0x70u,
     0x00u, 0xE0u, 0xFEu, 0xE7u, 0x4Fu, 0x4Fu, 0x06u, 0x21u,
     0x01u, 0xFBu, 0x06u, 0x72u, 0x00u, 0x21u, 0x10u, 0x68u,
-    0x01u, 0x36u, 0x92u, 0x88u, 0x01u, 0xF0u, 0x79u, 0xFEu,
+    0x01u, 0x36u, 0x92u, 0x88u, 0x01u, 0xF0u, 0xADu, 0xFEu,
     0x07u, 0x2Eu, 0xF3u, 0xD1u, 0x00u, 0x23u, 0x19u, 0x46u,
     0x49u, 0x4Cu, 0x00u, 0x22u, 0x18u, 0x59u, 0x30u, 0x34u,
     0xC6u, 0xB2u, 0x20u, 0xF0u, 0xFFu, 0x07u, 0x04u, 0xEBu,
@@ -151,10 +151,10 @@ const uint8 cy_bootloader[] = {
     0x0Fu, 0x01u, 0x00u, 0x49u, 0x22u, 0x42u, 0x00u, 0x40u,
     0xA1u, 0x46u, 0x00u, 0x40u, 0x25u, 0x42u, 0x00u, 0x40u,
     0x04u, 0x40u, 0x00u, 0x40u, 0x06u, 0x40u, 0x00u, 0x40u,
-    0xE8u, 0x46u, 0x00u, 0x40u, 0xC0u, 0x1Fu, 0x00u, 0x00u,
-    0xECu, 0x1Fu, 0x00u, 0x00u, 0x03u, 0x50u, 0x01u, 0x40u,
+    0xE8u, 0x46u, 0x00u, 0x40u, 0x28u, 0x20u, 0x00u, 0x00u,
+    0x54u, 0x20u, 0x00u, 0x00u, 0x03u, 0x50u, 0x01u, 0x40u,
     0xC2u, 0x43u, 0x00u, 0x40u, 0xA0u, 0x43u, 0x00u, 0x40u,
-    0x00u, 0x51u, 0x00u, 0x40u, 0x4Au, 0x20u, 0x00u, 0x00u,
+    0x00u, 0x51u, 0x00u, 0x40u, 0xB2u, 0x20u, 0x00u, 0x00u,
     0xF0u, 0x51u, 0x00u, 0x40u, 0x62u, 0x51u, 0x00u, 0x40u,
     0x22u, 0x43u, 0x00u, 0x40u, 0xCFu, 0x01u, 0x00u, 0x49u,
     0x6Eu, 0x58u, 0x00u, 0x40u, 0x76u, 0x58u, 0x00u, 0x40u,
@@ -193,127 +193,140 @@ const uint8 cy_bootloader[] = {
     0x02u, 0x78u, 0xE4u, 0xB2u, 0x94u, 0x42u, 0x01u, 0xD0u,
     0x06u, 0x20u, 0x70u, 0xBDu, 0x00u, 0x2Du, 0xFBu, 0xD0u,
     0x00u, 0x20u, 0x70u, 0xBDu, 0xC0u, 0xFFu, 0x01u, 0x00u,
-    0x2Du, 0xE9u, 0xF0u, 0x43u, 0xADu, 0xF2u, 0xA4u, 0x4Du,
-    0x00u, 0xF0u, 0x20u, 0xFAu, 0x10u, 0xB1u, 0x00u, 0x20u,
-    0x00u, 0xF0u, 0xA2u, 0xFAu, 0x02u, 0xA8u, 0x00u, 0xF0u,
-    0x2Du, 0xFAu, 0x10u, 0xB1u, 0x00u, 0x20u, 0x00u, 0xF0u,
-    0x9Bu, 0xFAu, 0xB5u, 0x48u, 0x03u, 0x68u, 0x19u, 0x68u,
+    0x2Du, 0xE9u, 0xF0u, 0x4Fu, 0xADu, 0xF5u, 0x61u, 0x7Du,
+    0x80u, 0x46u, 0x00u, 0xF0u, 0xE5u, 0xFBu, 0x62u, 0xB6u,
+    0x00u, 0x26u, 0xB2u, 0x46u, 0x4Fu, 0xF0u, 0x0Au, 0x09u,
+    0x37u, 0x46u, 0xB8u, 0xF1u, 0x00u, 0x0Fu, 0x01u, 0xD1u,
+    0xFFu, 0x23u, 0x00u, 0xE0u, 0x43u, 0x46u, 0x4Au, 0xA8u,
+    0x4Fu, 0xF4u, 0x96u, 0x71u, 0x01u, 0xAAu, 0x00u, 0xF0u,
+    0x0Du, 0xFCu, 0xB8u, 0xF1u, 0x00u, 0x0Fu, 0x03u, 0xD0u,
+    0x09u, 0xF1u, 0xFFu, 0x39u, 0x5Fu, 0xFAu, 0x89u, 0xF9u,
+    0xB9u, 0xF1u, 0x00u, 0x0Fu, 0x02u, 0xD0u, 0x00u, 0x28u,
+    0xE7u, 0xD1u, 0x01u, 0xE0u, 0x00u, 0x28u, 0x71u, 0xD1u,
+    0xBDu, 0xF8u, 0x04u, 0x20u, 0x06u, 0x2Au, 0x40u, 0xF2u,
+    0x7Bu, 0x81u, 0x9Du, 0xF8u, 0x28u, 0x31u, 0x01u, 0x2Bu,
+    0x40u, 0xF0u, 0x76u, 0x81u, 0x9Du, 0xF8u, 0x2Au, 0x01u,
+    0x9Du, 0xF8u, 0x2Bu, 0x51u, 0x4Au, 0xA9u, 0x40u, 0xEAu,
+    0x05u, 0x25u, 0xECu, 0x1Du, 0x4Bu, 0x19u, 0x94u, 0x42u,
+    0x58u, 0x79u, 0x19u, 0x79u, 0x00u, 0xF2u, 0x66u, 0x81u,
+    0x9Au, 0x79u, 0x17u, 0x2Au, 0x40u, 0xF0u, 0x64u, 0x81u,
+    0x2Bu, 0x1Du, 0x9Bu, 0xB2u, 0x00u, 0x22u, 0x3Bu, 0xB1u,
+    0x0Du, 0xF2u, 0x27u, 0x14u, 0xE4u, 0x5Cu, 0x01u, 0x3Bu,
+    0x12u, 0x19u, 0x92u, 0xB2u, 0x9Bu, 0xB2u, 0xF6u, 0xE7u,
+    0x52u, 0x42u, 0x41u, 0xEAu, 0x00u, 0x20u, 0x91u, 0xB2u,
+    0x88u, 0x42u, 0x40u, 0xF0u, 0x53u, 0x81u, 0x4Au, 0xE0u,
+    0x00u, 0x2Eu, 0x00u, 0xF0u, 0x4Du, 0x81u, 0x01u, 0x2Du,
+    0x4Fu, 0xF0u, 0x00u, 0x04u, 0x40u, 0xF0u, 0x3Cu, 0x81u,
+    0xBBu, 0xF1u, 0x01u, 0x0Fu, 0x00u, 0xF2u, 0x38u, 0x81u,
+    0xFFu, 0x23u, 0x8Du, 0xF8u, 0x2Cu, 0x41u, 0x8Du, 0xF8u,
+    0x2Du, 0x41u, 0x25u, 0x46u, 0x8Du, 0xF8u, 0x2Eu, 0x31u,
+    0x8Du, 0xF8u, 0x2Fu, 0x61u, 0x04u, 0x24u, 0x01u, 0x20u,
+    0x00u, 0x22u, 0x21u, 0x1Du, 0xADu, 0xF8u, 0x06u, 0x40u,
+    0x8Du, 0xF8u, 0x28u, 0x01u, 0x8Du, 0xF8u, 0x29u, 0x51u,
+    0x8Du, 0xF8u, 0x2Au, 0x41u, 0x8Du, 0xF8u, 0x2Bu, 0x21u,
+    0x8Bu, 0xB2u, 0x0Du, 0xF2u, 0x27u, 0x10u, 0xC1u, 0x5Cu,
+    0x01u, 0x3Bu, 0x52u, 0x18u, 0x9Bu, 0xB2u, 0x92u, 0xB2u,
+    0x00u, 0x2Bu, 0xF6u, 0xD1u, 0x50u, 0x42u, 0x81u, 0xB2u,
+    0x08u, 0x0Au, 0x4Bu, 0xAAu, 0x0Du, 0xF2u, 0x2Du, 0x13u,
+    0x11u, 0x55u, 0x18u, 0x55u, 0x17u, 0x21u, 0x0Du, 0xF5u,
+    0x97u, 0x72u, 0xE3u, 0x1Du, 0x11u, 0x55u, 0x4Au, 0xA8u,
+    0x99u, 0xB2u, 0x0Du, 0xF1u, 0x06u, 0x02u, 0x96u, 0x23u,
+    0x00u, 0xF0u, 0x62u, 0xFBu, 0xB8u, 0xF1u, 0x00u, 0x0Fu,
+    0x3Fu, 0xF4u, 0x72u, 0xAFu, 0x00u, 0x2Eu, 0x00u, 0xF0u,
+    0x12u, 0x81u, 0x01u, 0x26u, 0x69u, 0xE7u, 0x9Du, 0xF8u,
+    0x29u, 0x21u, 0x9Du, 0xF8u, 0x2Cu, 0xB1u, 0xA2u, 0xF1u,
+    0x31u, 0x03u, 0x0Au, 0x2Bu, 0x00u, 0xF2u, 0xF7u, 0x80u,
+    0x01u, 0xA1u, 0x51u, 0xF8u, 0x23u, 0xF0u, 0x00u, 0xBFu,
+    0xB5u, 0x06u, 0x00u, 0x00u, 0xD9u, 0x05u, 0x00u, 0x00u,
+    0x6Fu, 0x08u, 0x00u, 0x00u, 0xD3u, 0x06u, 0x00u, 0x00u,
+    0x85u, 0x07u, 0x00u, 0x00u, 0x6Fu, 0x08u, 0x00u, 0x00u,
+    0x8Bu, 0x07u, 0x00u, 0x00u, 0xA9u, 0x07u, 0x00u, 0x00u,
+    0xD3u, 0x06u, 0x00u, 0x00u, 0xC3u, 0x07u, 0x00u, 0x00u,
+    0x4Fu, 0x08u, 0x00u, 0x00u, 0x00u, 0x2Eu, 0x00u, 0xF0u,
+    0xDFu, 0x80u, 0x00u, 0x2Du, 0x40u, 0xF0u, 0xDCu, 0x80u,
+    0xFFu, 0xF7u, 0xF0u, 0xFEu, 0xD0u, 0xF1u, 0x01u, 0x02u,
+    0x38u, 0xBFu, 0x00u, 0x22u, 0x8Du, 0xF8u, 0x2Cu, 0x21u,
+    0xBBu, 0xE0u, 0x34u, 0x2Au, 0x12u, 0xD1u, 0x00u, 0x2Eu,
+    0x00u, 0xF0u, 0xCEu, 0x80u, 0x03u, 0x2Du, 0x40u, 0xF0u,
+    0xCBu, 0x80u, 0xABu, 0xF1u, 0x40u, 0x07u, 0x3Fu, 0x2Fu,
+    0x8Cu, 0xBFu, 0x4Fu, 0xF4u, 0x90u, 0x77u, 0x10u, 0x27u,
+    0x95u, 0xA8u, 0x00u, 0x21u, 0x3Au, 0x46u, 0x01u, 0xF0u,
+    0x88u, 0xFCu, 0x05u, 0xE0u, 0x00u, 0x2Eu, 0x00u, 0xF0u,
+    0xBBu, 0x80u, 0x02u, 0x2Du, 0x40u, 0xF2u, 0xB8u, 0x80u,
+    0x03u, 0x3Du, 0x95u, 0xABu, 0x2Au, 0x46u, 0xD8u, 0x19u,
+    0x0Du, 0xF2u, 0x2Fu, 0x11u, 0x01u, 0xF0u, 0x70u, 0xFCu,
+    0xABu, 0xF1u, 0x40u, 0x00u, 0x7Au, 0x19u, 0x3Fu, 0x28u,
+    0x96u, 0xB2u, 0x03u, 0xD8u, 0x00u, 0xF0u, 0xD4u, 0xF9u,
+    0x10u, 0x24u, 0x01u, 0xE0u, 0x4Fu, 0xF4u, 0x90u, 0x74u,
+    0xA6u, 0x42u, 0x40u, 0xF0u, 0x97u, 0x80u, 0x9Du, 0xF8u,
+    0x2Eu, 0x11u, 0x9Du, 0xF8u, 0x2Du, 0x71u, 0xBBu, 0xF1u,
+    0x3Fu, 0x0Fu, 0x47u, 0xEAu, 0x01u, 0x25u, 0x11u, 0xD8u,
+    0xBAu, 0xF1u, 0x00u, 0x0Fu, 0x0Eu, 0xD1u, 0x51u, 0x46u,
+    0x4Fu, 0xF4u, 0x90u, 0x72u, 0x02u, 0xA8u, 0x01u, 0xF0u,
+    0x58u, 0xFCu, 0x01u, 0x20u, 0xFFu, 0x21u, 0x02u, 0xAAu,
+    0x4Fu, 0xF4u, 0x90u, 0x73u, 0x00u, 0xF0u, 0x64u, 0xF9u,
+    0x4Fu, 0xF0u, 0x01u, 0x0Au, 0x33u, 0x46u, 0x58u, 0x46u,
+    0x29u, 0x46u, 0x95u, 0xAAu, 0x00u, 0xF0u, 0x5Cu, 0xF9u,
+    0x01u, 0x26u, 0x00u, 0x28u, 0x75u, 0xD0u, 0x00u, 0x27u,
+    0x0Au, 0x25u, 0x75u, 0xE0u, 0x00u, 0x2Eu, 0x77u, 0xD0u,
+    0x7Au, 0xE0u, 0x00u, 0x2Eu, 0x74u, 0xD0u, 0x7Cu, 0x19u,
+    0xB4u, 0xF5u, 0x96u, 0x7Fu, 0x6Eu, 0xD8u, 0x95u, 0xA9u,
+    0xC8u, 0x19u, 0x2Au, 0x46u, 0x4Bu, 0xA9u, 0x01u, 0xF0u,
+    0x2Bu, 0xFCu, 0xA7u, 0xB2u, 0x00u, 0x25u, 0x63u, 0xE0u,
+    0x00u, 0x2Du, 0x65u, 0xD1u, 0x3Au, 0x48u, 0x02u, 0xAEu,
+    0x4Bu, 0xACu, 0x03u, 0xC8u, 0x86u, 0xE8u, 0x03u, 0x00u,
+    0x84u, 0xE8u, 0x03u, 0x00u, 0x01u, 0x26u, 0x08u, 0x24u,
+    0x21u, 0xE7u, 0x00u, 0x2Eu, 0x58u, 0xD0u, 0x03u, 0x2Du,
+    0x56u, 0xD1u, 0x9Du, 0xF8u, 0x2Eu, 0x01u, 0x9Du, 0xF8u,
+    0x2Du, 0x11u, 0xABu, 0xF1u, 0x40u, 0x02u, 0x3Fu, 0x2Au,
+    0x41u, 0xEAu, 0x00u, 0x25u, 0x0Au, 0xD8u, 0x2Du, 0x01u,
+    0x00u, 0x23u, 0x10u, 0x22u, 0x2Du, 0x48u, 0x11u, 0x18u,
+    0x4Cu, 0x5Du, 0x01u, 0x3Au, 0x23u, 0x44u, 0xDBu, 0xB2u,
+    0xF8u, 0xD1u, 0x26u, 0xE0u, 0x05u, 0xEBu, 0x0Bu, 0x23u,
+    0x1Cu, 0x02u, 0x4Fu, 0xF4u, 0x80u, 0x72u, 0x00u, 0x23u,
+    0x01u, 0x3Au, 0x10u, 0x5Du, 0x19u, 0x18u, 0xCBu, 0xB2u,
+    0x00u, 0x2Au, 0xF9u, 0xD1u, 0xBBu, 0xF1u, 0x3Fu, 0x0Fu,
+    0x17u, 0xD8u, 0x0Bu, 0xF5u, 0x10u, 0x34u, 0x05u, 0xEBu,
+    0x04u, 0x20u, 0x41u, 0x01u, 0x54u, 0x5Cu, 0x01u, 0x32u,
+    0x1Bu, 0x19u, 0x20u, 0x2Au, 0xDBu, 0xB2u, 0xF9u, 0xD1u,
+    0xBBu, 0xF1u, 0x01u, 0x0Fu, 0x09u, 0xD1u, 0xFFu, 0x2Du,
+    0x07u, 0xD1u, 0x1Bu, 0x4Du, 0x1Bu, 0x4Cu, 0x28u, 0x78u,
+    0x19u, 0x1Au, 0x23u, 0x78u, 0xCAu, 0x1Au, 0x02u, 0xF0u,
+    0xFFu, 0x03u, 0x5Du, 0x42u, 0x8Du, 0xF8u, 0x2Cu, 0x51u,
+    0x00u, 0x25u, 0x01u, 0x24u, 0xDBu, 0xE6u, 0xFFu, 0xF7u,
+    0x29u, 0xFEu, 0x10u, 0xB9u, 0x14u, 0x4Du, 0x80u, 0x24u,
+    0x2Cu, 0x70u, 0x00u, 0xF0u, 0x47u, 0xF9u, 0x0Bu, 0xE0u,
+    0x04u, 0x25u, 0xD0u, 0xE6u, 0x01u, 0x26u, 0x00u, 0x27u,
+    0x04u, 0xE0u, 0x07u, 0x46u, 0x9Au, 0xE7u, 0x05u, 0x25u,
+    0x00u, 0x24u, 0xC8u, 0xE6u, 0x03u, 0x25u, 0xFBu, 0xE7u,
+    0x04u, 0x25u, 0xF9u, 0xE7u, 0x08u, 0x25u, 0xF7u, 0xE7u,
+    0xB8u, 0xF1u, 0x00u, 0x0Fu, 0x01u, 0xD1u, 0x47u, 0x46u,
+    0x5Eu, 0xE6u, 0x00u, 0x27u, 0xEDu, 0xE6u, 0x0Du, 0xF5u,
+    0x61u, 0x7Du, 0xBDu, 0xE8u, 0xF0u, 0x8Fu, 0x00u, 0xBFu,
+    0xF0u, 0x20u, 0x00u, 0x00u, 0xFFu, 0x7Fu, 0x00u, 0x40u,
+    0xD0u, 0xFFu, 0x01u, 0x00u, 0xD1u, 0xFFu, 0x01u, 0x00u,
+    0xFAu, 0x46u, 0x00u, 0x40u, 0x10u, 0xB5u, 0xC8u, 0xB0u,
+    0x00u, 0xF0u, 0x94u, 0xF8u, 0x10u, 0xB1u, 0x00u, 0x20u,
+    0x00u, 0xF0u, 0x16u, 0xF9u, 0x68u, 0x46u, 0x00u, 0xF0u,
+    0xA1u, 0xF8u, 0x10u, 0xB1u, 0x00u, 0x20u, 0x00u, 0xF0u,
+    0x0Fu, 0xF9u, 0x16u, 0x48u, 0x03u, 0x68u, 0x19u, 0x68u,
     0x00u, 0x23u, 0x0Au, 0x46u, 0x22u, 0xB1u, 0x12u, 0xF8u,
     0x01u, 0x4Du, 0xE3u, 0x18u, 0xDBu, 0xB2u, 0xF9u, 0xE7u,
-    0x42u, 0x68u, 0x10u, 0x78u, 0xC3u, 0x1Au, 0x03u, 0xF0u,
-    0xFFu, 0x02u, 0x82u, 0x42u, 0x00u, 0xD1u, 0x11u, 0xB9u,
-    0x00u, 0x20u, 0x00u, 0xF0u, 0x85u, 0xFAu, 0xFFu, 0xF7u,
-    0x95u, 0xFFu, 0xAAu, 0x49u, 0x0Bu, 0x78u, 0x03u, 0xF0u,
-    0xC0u, 0x02u, 0x40u, 0x2Au, 0x0Bu, 0x46u, 0x01u, 0xD0u,
-    0x00u, 0x28u, 0x3Eu, 0xD0u, 0x00u, 0x26u, 0x1Eu, 0x70u,
-    0x00u, 0xF0u, 0x82u, 0xFBu, 0x62u, 0xB6u, 0xB1u, 0x46u,
-    0x00u, 0x27u, 0x92u, 0xA8u, 0x4Fu, 0xF4u, 0x96u, 0x71u,
-    0x01u, 0xAAu, 0xFFu, 0x23u, 0x00u, 0xF0u, 0xB2u, 0xFBu,
-    0x00u, 0x28u, 0xF6u, 0xD1u, 0xBDu, 0xF8u, 0x04u, 0x20u,
-    0x06u, 0x2Au, 0x40u, 0xF2u, 0x81u, 0x81u, 0x9Du, 0xF8u,
-    0x48u, 0x42u, 0x01u, 0x2Cu, 0x40u, 0xF0u, 0x7Cu, 0x81u,
-    0x9Du, 0xF8u, 0x4Au, 0x12u, 0x9Du, 0xF8u, 0x4Bu, 0x52u,
-    0x92u, 0xABu, 0x41u, 0xEAu, 0x05u, 0x25u, 0x05u, 0xF1u,
-    0x07u, 0x0Eu, 0x5Bu, 0x19u, 0x96u, 0x45u, 0x5Cu, 0x79u,
-    0x19u, 0x79u, 0x00u, 0xF2u, 0x6Bu, 0x81u, 0x9Au, 0x79u,
-    0x17u, 0x2Au, 0x40u, 0xF0u, 0x69u, 0x81u, 0x2Bu, 0x1Du,
-    0x9Bu, 0xB2u, 0x33u, 0xB1u, 0x0Du, 0xF2u, 0x47u, 0x22u,
-    0xD2u, 0x5Cu, 0x01u, 0x3Bu, 0x80u, 0x18u, 0x80u, 0xB2u,
-    0xF6u, 0xE7u, 0x40u, 0x42u, 0x41u, 0xEAu, 0x04u, 0x24u,
-    0x81u, 0xB2u, 0x8Cu, 0x42u, 0x40u, 0xF0u, 0x5Au, 0x81u,
-    0x08u, 0xE0u, 0x80u, 0x20u, 0x08u, 0x70u, 0x00u, 0xF0u,
-    0x39u, 0xFAu, 0x29u, 0xB0u, 0x0Du, 0xF5u, 0x80u, 0x6Du,
-    0xBDu, 0xE8u, 0xF0u, 0x83u, 0x9Du, 0xF8u, 0x49u, 0x22u,
-    0x9Du, 0xF8u, 0x4Cu, 0x82u, 0xA2u, 0xF1u, 0x31u, 0x03u,
-    0x0Au, 0x2Bu, 0x00u, 0xF2u, 0x15u, 0x81u, 0xDFu, 0xE8u,
-    0x13u, 0xF0u, 0x0Bu, 0x00u, 0x1Au, 0x00u, 0x13u, 0x01u,
-    0x32u, 0x00u, 0x8Cu, 0x00u, 0x13u, 0x01u, 0x90u, 0x00u,
-    0xA1u, 0x00u, 0x32u, 0x00u, 0xAFu, 0x00u, 0x03u, 0x01u,
-    0x00u, 0x2Eu, 0x00u, 0xF0u, 0x35u, 0x81u, 0x00u, 0x2Du,
-    0x40u, 0xF0u, 0x32u, 0x81u, 0xFFu, 0xF7u, 0x26u, 0xFFu,
-    0xD0u, 0xF1u, 0x01u, 0x02u, 0x38u, 0xBFu, 0x00u, 0x22u,
-    0x8Du, 0xF8u, 0x4Cu, 0x22u, 0xDAu, 0xE0u, 0x00u, 0x2Eu,
-    0x00u, 0xF0u, 0x26u, 0x81u, 0x01u, 0x2Du, 0x4Fu, 0xF0u,
-    0x00u, 0x04u, 0x40u, 0xF0u, 0xEAu, 0x80u, 0xB8u, 0xF1u,
-    0x01u, 0x0Fu, 0x00u, 0xF2u, 0xE6u, 0x80u, 0xFFu, 0x23u,
-    0x8Du, 0xF8u, 0x4Cu, 0x42u, 0x8Du, 0xF8u, 0x4Du, 0x42u,
-    0x25u, 0x46u, 0x8Du, 0xF8u, 0x4Eu, 0x32u, 0x8Du, 0xF8u,
-    0x4Fu, 0x62u, 0x04u, 0x24u, 0xE2u, 0xE0u, 0x34u, 0x2Au,
-    0x12u, 0xD1u, 0x00u, 0x2Eu, 0x00u, 0xF0u, 0x0Cu, 0x81u,
-    0x03u, 0x2Du, 0x40u, 0xF0u, 0x09u, 0x81u, 0xA8u, 0xF1u,
-    0x40u, 0x07u, 0x3Fu, 0x2Fu, 0x8Cu, 0xBFu, 0x4Fu, 0xF4u,
-    0x90u, 0x77u, 0x10u, 0x27u, 0xDDu, 0xA8u, 0x00u, 0x21u,
-    0x3Au, 0x46u, 0x01u, 0xF0u, 0x72u, 0xFCu, 0x05u, 0xE0u,
-    0x00u, 0x2Eu, 0x00u, 0xF0u, 0xF9u, 0x80u, 0x02u, 0x2Du,
-    0x40u, 0xF2u, 0xF6u, 0x80u, 0x03u, 0x3Du, 0xDDu, 0xABu,
-    0x2Au, 0x46u, 0xD8u, 0x19u, 0x0Du, 0xF2u, 0x4Fu, 0x21u,
-    0x01u, 0xF0u, 0x5Au, 0xFCu, 0xA8u, 0xF1u, 0x40u, 0x00u,
-    0x7Au, 0x19u, 0x3Fu, 0x28u, 0x96u, 0xB2u, 0x03u, 0xD8u,
-    0x00u, 0xF0u, 0xBEu, 0xF9u, 0x10u, 0x24u, 0x01u, 0xE0u,
-    0x4Fu, 0xF4u, 0x90u, 0x74u, 0xA6u, 0x42u, 0x40u, 0xF0u,
-    0xAAu, 0x80u, 0x9Du, 0xF8u, 0x4Eu, 0x12u, 0x9Du, 0xF8u,
-    0x4Du, 0x72u, 0xB8u, 0xF1u, 0x3Fu, 0x0Fu, 0x47u, 0xEAu,
-    0x01u, 0x25u, 0x11u, 0xD8u, 0xB9u, 0xF1u, 0x00u, 0x0Fu,
-    0x0Eu, 0xD1u, 0x49u, 0x46u, 0x4Fu, 0xF4u, 0x90u, 0x72u,
-    0x4Au, 0xA8u, 0x01u, 0xF0u, 0x42u, 0xFCu, 0x01u, 0x20u,
-    0xFFu, 0x21u, 0x4Au, 0xAAu, 0x4Fu, 0xF4u, 0x90u, 0x73u,
-    0x00u, 0xF0u, 0x4Eu, 0xF9u, 0x4Fu, 0xF0u, 0x01u, 0x09u,
-    0x33u, 0x46u, 0x40u, 0x46u, 0x29u, 0x46u, 0xDDu, 0xAAu,
-    0x00u, 0xF0u, 0x46u, 0xF9u, 0x01u, 0x26u, 0x00u, 0x28u,
-    0x00u, 0xF0u, 0x88u, 0x80u, 0x00u, 0x27u, 0x0Au, 0x25u,
-    0x87u, 0xE0u, 0x00u, 0x2Eu, 0x00u, 0xF0u, 0xB4u, 0x80u,
-    0x22u, 0xE7u, 0x00u, 0x2Eu, 0x00u, 0xF0u, 0xB0u, 0x80u,
-    0x7Cu, 0x19u, 0xB4u, 0xF5u, 0x96u, 0x7Fu, 0x00u, 0xF2u,
-    0xA9u, 0x80u, 0xDDu, 0xA9u, 0xC8u, 0x19u, 0x2Au, 0x46u,
-    0x93u, 0xA9u, 0x01u, 0xF0u, 0x11u, 0xFCu, 0xA7u, 0xB2u,
-    0x00u, 0x25u, 0x72u, 0xE0u, 0x00u, 0x2Du, 0x40u, 0xF0u,
-    0x9Fu, 0x80u, 0x2Bu, 0x48u, 0x4Au, 0xAEu, 0x93u, 0xACu,
-    0x03u, 0xC8u, 0x86u, 0xE8u, 0x03u, 0x00u, 0x84u, 0xE8u,
-    0x03u, 0x00u, 0x01u, 0x26u, 0x08u, 0x24u, 0x65u, 0xE0u,
-    0x00u, 0x2Eu, 0x00u, 0xF0u, 0x91u, 0x80u, 0x03u, 0x2Du,
-    0x40u, 0xF0u, 0x8Eu, 0x80u, 0x9Du, 0xF8u, 0x4Eu, 0x42u,
-    0x9Du, 0xF8u, 0x4Du, 0x12u, 0xA8u, 0xF1u, 0x40u, 0x02u,
-    0x3Fu, 0x2Au, 0x41u, 0xEAu, 0x04u, 0x25u, 0x0Au, 0xD8u,
-    0x2Du, 0x01u, 0x00u, 0x23u, 0x10u, 0x22u, 0x1Du, 0x48u,
-    0x11u, 0x18u, 0x4Cu, 0x5Du, 0x01u, 0x3Au, 0x23u, 0x44u,
-    0xDBu, 0xB2u, 0xF8u, 0xD1u, 0x26u, 0xE0u, 0x05u, 0xEBu,
-    0x08u, 0x23u, 0x1Cu, 0x02u, 0x4Fu, 0xF4u, 0x80u, 0x72u,
-    0x00u, 0x23u, 0x01u, 0x3Au, 0x10u, 0x5Du, 0x19u, 0x18u,
-    0xCBu, 0xB2u, 0x00u, 0x2Au, 0xF9u, 0xD1u, 0xB8u, 0xF1u,
-    0x3Fu, 0x0Fu, 0x17u, 0xD8u, 0x08u, 0xF5u, 0x10u, 0x34u,
-    0x05u, 0xEBu, 0x04u, 0x20u, 0x41u, 0x01u, 0x54u, 0x5Cu,
-    0x01u, 0x32u, 0x1Bu, 0x19u, 0x20u, 0x2Au, 0xDBu, 0xB2u,
-    0xF9u, 0xD1u, 0xB8u, 0xF1u, 0x01u, 0x0Fu, 0x09u, 0xD1u,
-    0xFFu, 0x2Du, 0x07u, 0xD1u, 0x0Au, 0x4Du, 0x0Bu, 0x4Cu,
-    0x28u, 0x78u, 0x19u, 0x1Au, 0x23u, 0x78u, 0xCAu, 0x1Au,
-    0x02u, 0xF0u, 0xFFu, 0x03u, 0x5Du, 0x42u, 0x8Du, 0xF8u,
-    0x4Cu, 0x52u, 0x00u, 0x25u, 0x01u, 0x24u, 0x1Du, 0xE0u,
-    0x0Cu, 0xC1u, 0xFFu, 0x1Fu, 0xFAu, 0x46u, 0x00u, 0x40u,
-    0x88u, 0x20u, 0x00u, 0x00u, 0xFFu, 0x7Fu, 0x00u, 0x40u,
-    0xD0u, 0xFFu, 0x01u, 0x00u, 0xD1u, 0xFFu, 0x01u, 0x00u,
-    0xFFu, 0xF7u, 0x34u, 0xFEu, 0x10u, 0xB9u, 0x20u, 0x48u,
-    0x80u, 0x25u, 0x05u, 0x70u, 0x00u, 0xF0u, 0x1Eu, 0xF9u,
-    0x36u, 0xE0u, 0x04u, 0x25u, 0x06u, 0xE0u, 0x01u, 0x26u,
-    0x00u, 0x27u, 0x2Fu, 0xE0u, 0x07u, 0x46u, 0x8Bu, 0xE7u,
-    0x05u, 0x25u, 0x00u, 0x24u, 0x01u, 0x21u, 0x8Du, 0xF8u,
-    0x49u, 0x52u, 0x00u, 0x22u, 0x25u, 0x1Du, 0xADu, 0xF8u,
-    0x06u, 0x40u, 0x8Du, 0xF8u, 0x48u, 0x12u, 0x8Du, 0xF8u,
-    0x4Au, 0x42u, 0x8Du, 0xF8u, 0x4Bu, 0x22u, 0xADu, 0xB2u,
-    0x0Du, 0xF2u, 0x47u, 0x20u, 0x41u, 0x5Du, 0x6Bu, 0x1Eu,
-    0x52u, 0x18u, 0x9Du, 0xB2u, 0x92u, 0xB2u, 0x00u, 0x2Du,
-    0xF6u, 0xD1u, 0x50u, 0x42u, 0x81u, 0xB2u, 0x93u, 0xAAu,
-    0x11u, 0x55u, 0x0Du, 0x0Au, 0x0Du, 0xF2u, 0x4Du, 0x23u,
-    0x17u, 0x20u, 0x0Du, 0xF2u, 0x4Eu, 0x21u, 0x1Du, 0x55u,
-    0x08u, 0x55u, 0x07u, 0x34u, 0x92u, 0xA8u, 0xA1u, 0xB2u,
-    0x0Du, 0xF1u, 0x06u, 0x02u, 0x96u, 0x23u, 0x00u, 0xF0u,
-    0x03u, 0xFAu, 0x72u, 0xE6u, 0x03u, 0x25u, 0xD0u, 0xE7u,
-    0x04u, 0x25u, 0xCEu, 0xE7u, 0x08u, 0x25u, 0xCCu, 0xE7u,
+    0x42u, 0x68u, 0x10u, 0x78u, 0xC4u, 0x1Au, 0x04u, 0xF0u,
+    0xFFu, 0x03u, 0x83u, 0x42u, 0x00u, 0xD1u, 0x11u, 0xB9u,
+    0x00u, 0x20u, 0x00u, 0xF0u, 0xF9u, 0xF8u, 0x0Cu, 0x4Cu,
+    0xFFu, 0xF7u, 0xD4u, 0xFDu, 0x21u, 0x78u, 0x01u, 0xF0u,
+    0xC0u, 0x02u, 0x40u, 0x2Au, 0x00u, 0xD0u, 0x18u, 0xB1u,
+    0x00u, 0x20u, 0x20u, 0x70u, 0xFFu, 0xF7u, 0x0Cu, 0xFEu,
+    0x14u, 0x20u, 0xFFu, 0xF7u, 0x09u, 0xFEu, 0x80u, 0x20u,
+    0x20u, 0x70u, 0x00u, 0xF0u, 0xE7u, 0xF8u, 0x48u, 0xB0u,
+    0x10u, 0xBDu, 0x00u, 0xBFu, 0x0Cu, 0xC1u, 0xFFu, 0x1Fu,
     0xFAu, 0x46u, 0x00u, 0x40u, 0x08u, 0xB5u, 0x0Au, 0x4Bu,
     0x1Au, 0x78u, 0x02u, 0xF0u, 0xC0u, 0x00u, 0x80u, 0x28u,
     0x0Cu, 0xD1u, 0x00u, 0x21u, 0x19u, 0x70u, 0x01u, 0x20u,
-    0xFFu, 0xF7u, 0x9Eu, 0xFDu, 0x30u, 0xB1u, 0x01u, 0x20u,
-    0xFFu, 0xF7u, 0x9Au, 0xFDu, 0xBDu, 0xE8u, 0x08u, 0x40u,
-    0xFFu, 0xF7u, 0x94u, 0xBDu, 0x08u, 0xBDu, 0x00u, 0xBFu,
+    0xFFu, 0xF7u, 0x6Au, 0xFDu, 0x30u, 0xB1u, 0x01u, 0x20u,
+    0xFFu, 0xF7u, 0x66u, 0xFDu, 0xBDu, 0xE8u, 0x08u, 0x40u,
+    0xFFu, 0xF7u, 0x60u, 0xBDu, 0x08u, 0xBDu, 0x00u, 0xBFu,
     0xFAu, 0x46u, 0x00u, 0x40u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x02u, 0x30u, 0x80u, 0x08u, 0x00u, 0xF0u, 0x05u, 0x80u,
     0x00u, 0xBFu, 0x01u, 0x38u, 0x00u, 0x46u, 0x7Fu, 0xF4u,
@@ -499,9 +512,9 @@ const uint8 cy_bootloader[] = {
     0x23u, 0xBEu, 0x00u, 0xBFu, 0xA5u, 0x43u, 0x00u, 0x40u,
     0x9Du, 0x60u, 0x00u, 0x40u, 0x94u, 0x43u, 0x00u, 0x40u,
     0x12u, 0x60u, 0x00u, 0x40u, 0xF8u, 0x51u, 0x00u, 0x40u,
-    0x84u, 0x60u, 0x00u, 0x40u, 0xBBu, 0x15u, 0x00u, 0x00u,
-    0xB9u, 0x15u, 0x00u, 0x00u, 0xF9u, 0x13u, 0x00u, 0x00u,
-    0x51u, 0x15u, 0x00u, 0x00u, 0x85u, 0x15u, 0x00u, 0x00u,
+    0x84u, 0x60u, 0x00u, 0x40u, 0x23u, 0x16u, 0x00u, 0x00u,
+    0x21u, 0x16u, 0x00u, 0x00u, 0x61u, 0x14u, 0x00u, 0x00u,
+    0xB9u, 0x15u, 0x00u, 0x00u, 0xEDu, 0x15u, 0x00u, 0x00u,
     0x18u, 0x4Bu, 0x01u, 0x22u, 0x10u, 0xB5u, 0x1Au, 0x70u,
     0x17u, 0x4Bu, 0x4Fu, 0xF4u, 0x00u, 0x04u, 0x1Cu, 0x60u,
     0x4Fu, 0xF0u, 0x80u, 0x74u, 0x1Cu, 0x60u, 0x1Au, 0x60u,
@@ -815,7 +828,7 @@ const uint8 cy_bootloader[] = {
     0x04u, 0x4Bu, 0x05u, 0x49u, 0x1Au, 0x78u, 0x01u, 0xEBu,
     0xC2u, 0x03u, 0x5Au, 0x68u, 0x02u, 0xEBu, 0xC0u, 0x00u,
     0xC0u, 0x68u, 0x70u, 0x47u, 0x6Cu, 0xC1u, 0xFFu, 0x1Fu,
-    0x90u, 0x20u, 0x00u, 0x00u, 0xF8u, 0xB5u, 0x3Du, 0x4Bu,
+    0xF8u, 0x20u, 0x00u, 0x00u, 0xF8u, 0xB5u, 0x3Du, 0x4Bu,
     0x1Au, 0x78u, 0x00u, 0x2Au, 0x74u, 0xD0u, 0x18u, 0x78u,
     0x41u, 0x1Eu, 0xC8u, 0xB2u, 0xFFu, 0xF7u, 0xE8u, 0xFFu,
     0xC3u, 0x68u, 0x05u, 0x7Au, 0x08u, 0x33u, 0x00u, 0x20u,
@@ -1002,9 +1015,9 @@ const uint8 cy_bootloader[] = {
     0x08u, 0x70u, 0x32u, 0xE0u, 0x60u, 0xC1u, 0xFFu, 0x1Fu,
     0x00u, 0x60u, 0x00u, 0x40u, 0x01u, 0x60u, 0x00u, 0x40u,
     0x03u, 0x60u, 0x00u, 0x40u, 0x6Cu, 0xC1u, 0xFFu, 0x1Fu,
-    0x90u, 0x20u, 0x00u, 0x00u, 0x02u, 0x60u, 0x00u, 0x40u,
-    0x56u, 0x21u, 0x00u, 0x00u, 0xD2u, 0x21u, 0x00u, 0x00u,
-    0x4Cu, 0x21u, 0x00u, 0x00u, 0x04u, 0x60u, 0x00u, 0x40u,
+    0xF8u, 0x20u, 0x00u, 0x00u, 0x02u, 0x60u, 0x00u, 0x40u,
+    0xBEu, 0x21u, 0x00u, 0x00u, 0x3Au, 0x22u, 0x00u, 0x00u,
+    0xB4u, 0x21u, 0x00u, 0x00u, 0x04u, 0x60u, 0x00u, 0x40u,
     0x78u, 0xC1u, 0xFFu, 0x1Fu, 0x55u, 0xC1u, 0xFFu, 0x1Fu,
     0x6Fu, 0xC1u, 0xFFu, 0x1Fu, 0x71u, 0xC1u, 0xFFu, 0x1Fu,
     0x5Eu, 0xC1u, 0xFFu, 0x1Fu, 0x5Cu, 0xC1u, 0xFFu, 0x1Fu,
@@ -1036,14 +1049,14 @@ const uint8 cy_bootloader[] = {
     0x54u, 0x1Au, 0xA5u, 0x10u, 0x00u, 0x24u, 0xACu, 0x42u,
     0x05u, 0xD0u, 0x05u, 0x4Bu, 0x53u, 0xF8u, 0x24u, 0x00u,
     0x80u, 0x47u, 0x01u, 0x34u, 0xF7u, 0xE7u, 0x38u, 0xBDu,
-    0xF0u, 0x21u, 0x00u, 0x00u, 0xF0u, 0x21u, 0x00u, 0x00u,
-    0xF0u, 0x21u, 0x00u, 0x00u, 0xF8u, 0x21u, 0x00u, 0x00u,
+    0x58u, 0x22u, 0x00u, 0x00u, 0x58u, 0x22u, 0x00u, 0x00u,
+    0x58u, 0x22u, 0x00u, 0x00u, 0x60u, 0x22u, 0x00u, 0x00u,
     0x10u, 0xB5u, 0x00u, 0x23u, 0x93u, 0x42u, 0x03u, 0xD0u,
     0xCCu, 0x5Cu, 0xC4u, 0x54u, 0x01u, 0x33u, 0xF9u, 0xE7u,
     0x10u, 0xBDu, 0x82u, 0x18u, 0x03u, 0x46u, 0x93u, 0x42u,
     0x02u, 0xD0u, 0x03u, 0xF8u, 0x01u, 0x1Bu, 0xFAu, 0xE7u,
-    0x70u, 0x47u, 0x00u, 0x00u, 0x38u, 0x22u, 0x00u, 0x00u,
-    0x8Eu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
+    0x70u, 0x47u, 0x00u, 0x00u, 0xA0u, 0x22u, 0x00u, 0x00u,
+    0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x10u, 0x51u, 0x00u, 0x40u, 0x10u, 0x00u, 0xC0u, 0x51u,
     0x00u, 0x40u, 0x10u, 0x00u, 0x00u, 0x00u, 0x01u, 0x40u,
     0x00u, 0x10u, 0x00u, 0x14u, 0x01u, 0x40u, 0x00u, 0x08u,
@@ -1070,22 +1083,22 @@ const uint8 cy_bootloader[] = {
     0x03u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x33u,
     0x33u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x69u, 0x30u, 0x13u, 0x2Eu, 0x00u, 0x14u, 0x01u, 0x01u,
-    0x01u, 0x00u, 0x00u, 0x00u, 0x98u, 0x20u, 0x00u, 0x00u,
-    0x01u, 0x00u, 0x00u, 0x00u, 0xD2u, 0x21u, 0x00u, 0x00u,
-    0x01u, 0x00u, 0x00u, 0x00u, 0xA8u, 0x20u, 0x00u, 0x00u,
-    0x01u, 0x00u, 0x00u, 0x00u, 0xA9u, 0x21u, 0x00u, 0x00u,
-    0x02u, 0x00u, 0x00u, 0x00u, 0xCAu, 0x20u, 0x00u, 0x00u,
-    0x01u, 0x00u, 0x00u, 0x00u, 0xDCu, 0x20u, 0x00u, 0x00u,
-    0x00u, 0x00u, 0x00u, 0x00u, 0xC8u, 0x20u, 0x00u, 0x00u,
+    0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x21u, 0x00u, 0x00u,
+    0x01u, 0x00u, 0x00u, 0x00u, 0x3Au, 0x22u, 0x00u, 0x00u,
+    0x01u, 0x00u, 0x00u, 0x00u, 0x10u, 0x21u, 0x00u, 0x00u,
+    0x01u, 0x00u, 0x00u, 0x00u, 0x11u, 0x22u, 0x00u, 0x00u,
+    0x02u, 0x00u, 0x00u, 0x00u, 0x32u, 0x21u, 0x00u, 0x00u,
+    0x01u, 0x00u, 0x00u, 0x00u, 0x44u, 0x21u, 0x00u, 0x00u,
+    0x00u, 0x00u, 0x00u, 0x00u, 0x30u, 0x21u, 0x00u, 0x00u,
     0x03u, 0x00u, 0x00u, 0x00u, 0x01u, 0x03u, 0x40u, 0x00u,
     0x03u, 0x00u, 0x00u, 0x00u, 0x82u, 0x03u, 0x40u, 0x00u,
     0x03u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u,
-    0xE4u, 0x20u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
-    0x18u, 0x21u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
-    0x0Cu, 0x21u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
+    0x4Cu, 0x21u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
+    0x80u, 0x21u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
+    0x74u, 0x21u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x00u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u,
-    0x24u, 0x21u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u,
-    0xBBu, 0x21u, 0x00u, 0x00u, 0x41u, 0x00u, 0x00u, 0x00u,
+    0x8Cu, 0x21u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u,
+    0x23u, 0x22u, 0x00u, 0x00u, 0x41u, 0x00u, 0x00u, 0x00u,
     0x33u, 0xC2u, 0xFFu, 0x1Fu, 0x74u, 0xC2u, 0xFFu, 0x1Fu,
     0x41u, 0x00u, 0x00u, 0x00u, 0xF2u, 0xC1u, 0xFFu, 0x1Fu,
     0xEEu, 0xC1u, 0xFFu, 0x1Fu, 0x24u, 0x00u, 0x05u, 0x01u,
@@ -1117,10 +1130,10 @@ const uint8 cy_bootloader[] = {
     0x51u, 0x00u, 0x00u, 0x00u, 0xB1u, 0x01u, 0x00u, 0x00u,
     0xF8u, 0xB5u, 0x00u, 0xBFu, 0xF8u, 0xBCu, 0x08u, 0xBCu,
     0x9Eu, 0x46u, 0x70u, 0x47u, 0x2Du, 0x00u, 0x00u, 0x00u,
-    0x18u, 0x22u, 0x00u, 0x00u, 0x08u, 0xC1u, 0xFFu, 0x1Fu,
+    0x80u, 0x22u, 0x00u, 0x00u, 0x08u, 0xC1u, 0xFFu, 0x1Fu,
     0x20u, 0x00u, 0x00u, 0x00u, 0x50u, 0x01u, 0x00u, 0x00u,
-    0x00u, 0x00u, 0x00u, 0x00u, 0xB4u, 0x1Fu, 0x00u, 0x00u,
-    0xB8u, 0x1Fu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x7Du,
+    0x00u, 0x00u, 0x00u, 0x00u, 0x1Cu, 0x20u, 0x00u, 0x00u,
+    0x20u, 0x20u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x7Du,
     0x00u, 0xFAu, 0x00u, 0x00u, 0x40u, 0x00u, 0x00u, 0x00u,
     0x00u, 0x90u, 0xD0u, 0x03u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
@@ -1134,19 +1147,6 @@ const uint8 cy_bootloader[] = {
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
-    0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
-    0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
-    0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
-    0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
-    0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
-    0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
-    0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
-    0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
-    0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
-    0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
-    0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
-    0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
-    0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u};
 
 #if defined(__GNUC__) || defined(__ARMCC_VERSION)
@@ -1158,7 +1158,7 @@ __attribute__ ((__section__(".cymeta"), used))
 #endif
 const uint8 cy_metadata[] = {
     0x00u, 0x01u, 0x2Eu, 0x13u, 0x30u, 0x69u, 0x00u, 0x01u,
-    0x2Eu, 0x1Fu, 0x7Au, 0x6Bu};
+    0x2Eu, 0x1Fu, 0x9Au, 0x39u};
 
 #if defined(__GNUC__) || defined(__ARMCC_VERSION)
 __attribute__ ((__section__(".cycustnvl"), used))

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

@@ -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, 0x50u, 0x03u,
+    0x00u, 0x00u, 0x00u, 0x00u, 0x5Cu, 0xD1u, 0x52u, 0x03u,
     0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
     0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,

+ 20 - 20
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoCCreatorExportIDE.xml

@@ -18,7 +18,7 @@
       <Tool Name="postbuild" Command="" Options="" />
     </Toolchain>
   </Toolchains>
-  <Project Name="SCSI2SD" Path="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn" Version="4.0" Type="Bootloadable">
+  <Project Name="SCSI2SD" Path="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn" Version="4.0" Type="Bootloadable">
     <CMSIS_SVD_File>SCSI2SD.svd</CMSIS_SVD_File>
     <Datasheet />
     <LinkerFiles>
@@ -27,8 +27,8 @@
       <LinkerFile Toolchain="IAR EWARM">.\Generated_Source\PSoC5\Cm3Iar.icf</LinkerFile>
     </LinkerFiles>
     <Folders>
-      <Folder BuildType="BUILD" Path="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\src">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn">
+      <Folder BuildType="BUILD" Path="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\src">
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn">
           <File BuildType="BUILD" Toolchain="">..\..\src\main.c</File>
           <File BuildType="BUILD" Toolchain="">..\..\src\diagnostic.c</File>
           <File BuildType="BUILD" Toolchain="">..\..\src\disk.c</File>
@@ -55,13 +55,13 @@
           <File BuildType="BUILD" Toolchain="">..\..\src\config.h</File>
         </Files>
       </Folder>
-      <Folder BuildType="BUILD" Path="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn">
+      <Folder BuildType="BUILD" Path="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn">
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn">
           <File BuildType="BUILD" Toolchain="">.\device.h</File>
         </Files>
       </Folder>
-      <Folder BuildType="STRICT" Path="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn\Generated_Source\PSoC5">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn">
+      <Folder BuildType="STRICT" Path="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn\Generated_Source\PSoC5">
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn">
           <File BuildType="BUILD" Toolchain="">.\Generated_Source\PSoC5\cyfitter_cfg.h</File>
           <File BuildType="BUILD" Toolchain="">.\Generated_Source\PSoC5\cyfitter_cfg.c</File>
           <File BuildType="BUILD" Toolchain="">.\Generated_Source\PSoC5\cybootloader.c</File>
@@ -205,41 +205,41 @@
           <File BuildType="BUILD" Toolchain="">.\Generated_Source\PSoC5\libelf.dll</File>
         </Files>
       </Folder>
-      <Folder BuildType="STRICT" Path="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn\Generated_Source\PSoC5\ARM_GCC">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn">
+      <Folder BuildType="STRICT" Path="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn\Generated_Source\PSoC5\ARM_GCC">
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn">
           <File BuildType="BUILD" Toolchain="ARM GCC">.\Generated_Source\PSoC5\ARM_GCC\CyComponentLibrary.a</File>
         </Files>
       </Folder>
-      <Folder BuildType="STRICT" Path="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn\Generated_Source\PSoC5\ARM_Keil_MDK">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn">
+      <Folder BuildType="STRICT" Path="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn\Generated_Source\PSoC5\ARM_Keil_MDK">
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn">
           <File BuildType="BUILD" Toolchain="ARM Keil MDK">.\Generated_Source\PSoC5\ARM_Keil_MDK\CyComponentLibrary.a</File>
         </Files>
       </Folder>
-      <Folder BuildType="STRICT" Path="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn\Generated_Source\PSoC5\IAR">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn">
+      <Folder BuildType="STRICT" Path="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn\Generated_Source\PSoC5\IAR">
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn">
           <File BuildType="BUILD" Toolchain="IAR">.\Generated_Source\PSoC5\IAR\CyComponentLibrary.a</File>
         </Files>
       </Folder>
       <Folder BuildType="EXCLUDE" Path=".\codegentemp">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn" />
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn" />
       </Folder>
       <Folder BuildType="EXCLUDE" Path=".\ARM_GCC_441">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn" />
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn" />
       </Folder>
       <Folder BuildType="EXCLUDE" Path=".\ARM_GCC_473">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn" />
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn" />
       </Folder>
       <Folder BuildType="EXCLUDE" Path=".\DP8051_Keil_951">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn" />
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn" />
       </Folder>
       <Folder BuildType="EXCLUDE" Path=".\DP8051">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn" />
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn" />
       </Folder>
       <Folder BuildType="EXCLUDE" Path=".\CortexM0">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn" />
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn" />
       </Folder>
       <Folder BuildType="EXCLUDE" Path=".\CortexM3">
-        <Files Root="Z:\projects\SCSI2SD\git-3.5\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn" />
+        <Files Root="Z:\projects\SCSI2SD\git\SCSI2SD\software\SCSI2SD\v4\SCSI2SD.cydsn" />
       </Folder>
     </Folders>
   </Project>

BIN
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/SCSI2SD.cyfit


BIN
lib/SCSI2SD/software/SCSI2SD/v4/SCSI2SD.cydsn/TopDesign/TopDesign.cysch


BIN
lib/SCSI2SD/software/SCSI2SD/v4/USB_Bootloader.cydsn/USB_Bootloader.cyfit


+ 13 - 3
lib/SCSI2SD/software/bootloaderhost/SCSI2SD_HID.cc

@@ -38,12 +38,14 @@ HID::HID(hid_device_info* hidInfo) :
 	// read to differentiate the interfaces.
 	while (hidInfo && !(myConfigHandle && myDebugHandle))
 	{
-		if (hidInfo->interface_number == CONFIG_INTERFACE)
+		if ((hidInfo->interface_number == CONFIG_INTERFACE) ||
+			(hidInfo->usage_page == 0xFF00))
 		{
 			myConfigHandle = hid_open_path(hidInfo->path);
 			hidInfo = hidInfo->next;
 		}
-		else if (hidInfo->interface_number == DEBUG_INTERFACE)
+		else if ((hidInfo->interface_number == DEBUG_INTERFACE) ||
+			(hidInfo->usage_page == 0xFF01))
 		{
 			myDebugHandle = hid_open_path(hidInfo->path);
 			readDebugData();
@@ -55,6 +57,8 @@ HID::HID(hid_device_info* hidInfo) :
 			// interfaces are enumerated in a random order. :-(
 			// We rely on the watchdog value of the debug interface
 			// changing on each read to differentiate the interfaces.
+			// Not necessary since firmware 3.5.2 as the usage_page can
+			// be used instead.
 			hid_device* dev = hid_open_path(hidInfo->path);
 			if (!dev)
 			{
@@ -226,7 +230,13 @@ HID::getFirmwareVersionStr() const
 		std::stringstream ver;
 		ver << std::hex <<
 			(myFirmwareVersion >> 8) <<
-			'.' << (myFirmwareVersion & 0xFF);
+			'.' << ((myFirmwareVersion & 0xF0) >> 4);
+
+		int rev = myFirmwareVersion & 0xF;
+		if (rev)
+		{
+			ver << "." << rev;
+		}
 		return ver.str();
 	}
 }

+ 1 - 0
lib/SCSI2SD/software/bootloaderhost/build.sh

@@ -1,5 +1,6 @@
 #!/bin/sh
 
+rm -rf build/
 make && \
 	make TARGET=Win32 &&
 	make TARGET=Win64

+ 4 - 5
lib/SCSI2SD/software/bootloaderhost/hidapi-mac/hid.c

@@ -334,7 +334,7 @@ static wchar_t *dup_wcs(const wchar_t *s)
 static int make_path(IOHIDDeviceRef device, char *buf, size_t len)
 {
 	int res;
-	unsigned short vid, pid;
+	unsigned short vid, pid, usage_page;
 	char transport[32];
 	int32_t location;
 
@@ -350,11 +350,10 @@ static int make_path(IOHIDDeviceRef device, char *buf, size_t len)
 	location = get_location_id(device);
 	vid = get_vendor_id(device);
 	pid = get_product_id(device);
+	usage_page = get_int_property(device, CFSTR(kIOHIDPrimaryUsagePageKey));
 
-	int interval = get_int_property(device, CFSTR(kIOHIDReportIntervalKey));
-
-	res = snprintf(buf, len, "%s_%04hx_%04hx_%x_%d",
-                       transport, vid, pid, location, interval);
+	res = snprintf(buf, len, "%s_%04hx_%04hx_%x_%04hx",
+                       transport, vid, pid, location, usage_page);
 
 
 	buf[len-1] = '\0';

+ 44 - 0
lib/SCSI2SD/software/build.sh

@@ -0,0 +1,44 @@
+#!/bin/sh
+
+case `uname -s` in
+Linux)
+	# Builds all of the utilities (not firmware) under Linux.
+	# Requires mingw installed to cross-compile Windows targets.
+
+	(cd bootloaderhost && ./build.sh) &&
+	(cd scsi2sd-config && ./build.sh) &&
+	(cd scsi2sd-debug && ./build.sh)
+
+	if [ $? -eq 0 ]; then
+		mkdir -p build/linux
+		mkdir -p build/windows/64bit
+		mkdir -p build/windows/32bit
+
+		cp bootloaderhost/build/linux/bootloaderhost build/linux
+		cp scsi2sd-config/build/linux/scsi2sd-config build/linux
+		cp scsi2sd-debug/build/linux/scsi2sd-debug build/linux
+
+		cp bootloaderhost/build/windows/32bit/bootloaderhost.exe build/windows/32bit
+		cp scsi2sd-config/build/windows/32bit/scsi2sd-config.exe build/windows/32bit
+		cp scsi2sd-debug/build/windows/32bit/scsi2sd-debug.exe build/windows/32bit
+
+		cp bootloaderhost/build/windows/64bit/bootloaderhost.exe build/windows/64bit
+		cp scsi2sd-config/build/windows/64bit/scsi2sd-config.exe build/windows/64bit
+		cp scsi2sd-debug/build/windows/64bit/scsi2sd-debug.exe build/windows/64bit
+	fi
+;;
+
+Darwin)
+	make -C bootloaderhost &&
+	make -C scsi2sd-config &&
+	make -C scsi2sd-debug
+
+	if [ $? -eq 0 ]; then
+		mkdir -p build/mac
+
+		cp bootloaderhost/build/mac/bootloaderhost build/mac
+		cp scsi2sd-config/build/mac/scsi2sd-config build/mac
+		cp scsi2sd-debug/build/mac/scsi2sd-debug build/mac
+	fi
+
+esac

+ 1 - 0
lib/SCSI2SD/software/scsi2sd-config/build.sh

@@ -1,5 +1,6 @@
 #!/bin/sh
 
+rm -rf build/
 make && \
 	make TARGET=Win32 &&
 	make TARGET=Win64

+ 5 - 1
lib/SCSI2SD/software/scsi2sd-config/scsi2sd-config.cc

@@ -114,7 +114,7 @@ struct __attribute__((packed)) ConfigPacket
 static void printConfig(ConfigPacket* packet)
 {
 	std::cout <<
-		"SCSI ID:\t\t\t" << packet->scsiId << "\n" <<
+		"SCSI ID:\t\t\t" << static_cast<int>(packet->scsiId) << "\n" <<
 		"Vendor:\t\t\t\t\"" << std::string(packet->vendor, 8) << "\"\n" <<
 		"Product ID:\t\t\t\"" << std::string(packet->prodId, 16) << "\"\n" <<
 		"Revision:\t\t\t\"" << std::string(packet->revision, 4) << "\"\n" <<
@@ -390,7 +390,11 @@ int main(int argc, char* argv[])
 		}
 		printf(" Done.\n");
 
+#ifdef _WIN32
+		Sleep(1000); //ms
+#else
 		sleep(1); // Wait for the data to be saved to eeprom
+#endif
 
 		// Clear outstanding stale data
 		scsi2sdHID->readConfig(

+ 1 - 0
lib/SCSI2SD/software/scsi2sd-debug/build.sh

@@ -1,5 +1,6 @@
 #!/bin/sh
 
+rm -rf build/
 make && \
 	make TARGET=Win32 &&
 	make TARGET=Win64