Bug fixes galore! Added lots more settings, and moved them into another config tab
authorMichael McMaster <michael@codesrc.com>
Fri, 30 Oct 2015 03:43:44 +0000 (13:43 +1000)
committerMichael McMaster <michael@codesrc.com>
Fri, 30 Oct 2015 03:43:44 +0000 (13:43 +1000)
- wxWidgets upgrade to 3.02
- PSoC Creator upgrade to 3.3

754 files changed:
CHANGELOG
software/SCSI2SD/src/config.c
software/SCSI2SD/src/config.h
software/SCSI2SD/src/disk.c
software/SCSI2SD/src/disk.h
software/SCSI2SD/src/main.c
software/SCSI2SD/src/scsi.c
software/SCSI2SD/src/scsi.h
software/SCSI2SD/src/scsiPhy.c
software/SCSI2SD/src/sd.c
software/SCSI2SD/src/sd.h
software/SCSI2SD/src/trace.c [changed mode: 0644->0755]
software/SCSI2SD/src/trace.h
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/Debug_Timer_Interrupt.c
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RST_ISR.c
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RX_DMA_COMPLETE.c
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_SEL_ISR.c
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_TX_DMA_COMPLETE.c
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_RX_DMA_COMPLETE.c
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_TX_DMA_COMPLETE.c
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_audio.c [changed mode: 0644->0755]
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_cdc.c [changed mode: 0644->0755]
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_cls.c [changed mode: 0644->0755]
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_drv.c [changed mode: 0644->0755]
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_episr.c [changed mode: 0644->0755]
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_hid.c [changed mode: 0644->0755]
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_midi.c [changed mode: 0644->0755]
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_pm.c [changed mode: 0644->0755]
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_vnd.c [changed mode: 0644->0755]
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cybootloader.c [changed mode: 0644->0755]
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cycodeshareexport.ld [new file with mode: 0755]
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cycodeshareimport.ld [new file with mode: 0755]
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cycodeshareimport.scat [new file with mode: 0755]
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice.h
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice_trm.h
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu.inc
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu_trm.inc
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar.inc
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar_trm.inc
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv.inc
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv_trm.inc
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter.h
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter_cfg.c
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter_cfg.h
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfittergnu.inc
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitteriar.inc
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitterrv.inc
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/cymetadata.c
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/exported_symbols.txt [new file with mode: 0755]
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/project.h
software/SCSI2SD/v3/SCSI2SD.cydsn/Generated_Source/PSoC5/renamed_symbols.txt [new file with mode: 0755]
software/SCSI2SD/v3/SCSI2SD.cydsn/SCSI2SD.cycdx
software/SCSI2SD/v3/SCSI2SD.cydsn/SCSI2SD.cyfit
software/SCSI2SD/v3/SCSI2SD.cydsn/SCSI2SD.cyprj
software/SCSI2SD/v3/SCSI2SD.cydsn/SCSI2SD.svd
software/SCSI2SD/v3/SCSI2SD.cydsn/TopDesign/TopDesign.cysch
software/SCSI2SD/v3/SCSI2SD.cydsn/scsiTarget/scsiTarget.v
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/Debug_Timer_Interrupt.c
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RST_ISR.c
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RX_DMA_COMPLETE.c
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_SEL_ISR.c
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_TX_DMA_COMPLETE.c
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/SDCard_INT.c
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_RX_DMA_COMPLETE.c
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_TX_DMA_COMPLETE.c
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_audio.c [changed mode: 0644->0755]
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_cdc.c [changed mode: 0644->0755]
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_cls.c [changed mode: 0644->0755]
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_drv.c [changed mode: 0644->0755]
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_episr.c [changed mode: 0644->0755]
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_hid.c [changed mode: 0644->0755]
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_midi.c [changed mode: 0644->0755]
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_pm.c [changed mode: 0644->0755]
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/USBFS_vnd.c [changed mode: 0644->0755]
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cybootloader.c
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cycodeshareexport.ld [new file with mode: 0755]
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cycodeshareimport.ld [new file with mode: 0755]
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cycodeshareimport.scat [new file with mode: 0755]
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice.h
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice_trm.h
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu.inc
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu_trm.inc
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar.inc
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar_trm.inc
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv.inc
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv_trm.inc
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter.h
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter_cfg.c
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter_cfg.h
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfittergnu.inc
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitteriar.inc
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitterrv.inc
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/cymetadata.c
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/exported_symbols.txt [new file with mode: 0755]
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/project.h
software/SCSI2SD/v4/SCSI2SD.cydsn/Generated_Source/PSoC5/renamed_symbols.txt [new file with mode: 0755]
software/SCSI2SD/v4/SCSI2SD.cydsn/SCSI2SD.cycdx
software/SCSI2SD/v4/SCSI2SD.cydsn/SCSI2SD.cydwr
software/SCSI2SD/v4/SCSI2SD.cydsn/SCSI2SD.cyfit
software/SCSI2SD/v4/SCSI2SD.cydsn/SCSI2SD.cyprj
software/SCSI2SD/v4/SCSI2SD.cydsn/SCSI2SD.svd
software/SCSI2SD/v4/SCSI2SD.cydsn/TopDesign/TopDesign.cysch
software/include/scsi2sd.h
software/scsi2sd-util/BoardPanel.cc [new file with mode: 0644]
software/scsi2sd-util/BoardPanel.hh [new file with mode: 0644]
software/scsi2sd-util/ConfigUtil.cc
software/scsi2sd-util/ConfigUtil.hh
software/scsi2sd-util/Makefile
software/scsi2sd-util/TargetPanel.cc
software/scsi2sd-util/TargetPanel.hh
software/scsi2sd-util/scsi2sd-util.cc
software/scsi2sd-util/wxWidgets/Makefile.in
software/scsi2sd-util/wxWidgets/build/bakefiles/Bakefiles.bkgen
software/scsi2sd-util/wxWidgets/build/bakefiles/common.bkl
software/scsi2sd-util/wxWidgets/build/bakefiles/config.bkl
software/scsi2sd-util/wxWidgets/build/bakefiles/files.bkl
software/scsi2sd-util/wxWidgets/build/bakefiles/version.bkl
software/scsi2sd-util/wxWidgets/build/msw/makefile.bcc
software/scsi2sd-util/wxWidgets/build/msw/makefile.gcc
software/scsi2sd-util/wxWidgets/build/msw/makefile.vc
software/scsi2sd-util/wxWidgets/build/msw/makefile.wat
software/scsi2sd-util/wxWidgets/build/msw/wx_core.dsp
software/scsi2sd-util/wxWidgets/build/msw/wx_vc10_xrc.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc10_xrc.vcxproj.filters
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11.sln
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_adv.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_aui.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_base.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_core.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_custom_build.vcxproj [new file with mode: 0644]
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_custom_build.vcxproj.filters [new file with mode: 0644]
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_gl.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_html.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_media.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_net.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_propgrid.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_qa.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_ribbon.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_richtext.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_stc.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_webview.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_wxexpat.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_wxjpeg.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_wxpng.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_wxregex.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_wxscintilla.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_wxtiff.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_wxzlib.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_xml.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_xrc.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc11_xrc.vcxproj.filters
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12.sln
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_adv.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_aui.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_base.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_core.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_custom_build.vcxproj [new file with mode: 0644]
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_custom_build.vcxproj.filters [new file with mode: 0644]
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_gl.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_html.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_media.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_net.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_propgrid.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_qa.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_ribbon.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_richtext.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_stc.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_webview.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_wxexpat.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_wxjpeg.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_wxpng.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_wxregex.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_wxscintilla.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_wxtiff.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_wxzlib.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_xml.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_xrc.vcxproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc12_xrc.vcxproj.filters
software/scsi2sd-util/wxWidgets/build/msw/wx_vc7_core.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc7_xrc.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8.sln
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_adv.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_aui.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_base.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_core.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_gl.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_html.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_media.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_net.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_propgrid.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_qa.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_ribbon.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_richtext.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_stc.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_webview.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_wxexpat.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_wxjpeg.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_wxpng.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_wxregex.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_wxscintilla.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_wxtiff.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_wxzlib.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_xml.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc8_xrc.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9.sln
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_adv.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_aui.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_base.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_core.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_gl.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_html.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_media.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_net.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_propgrid.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_qa.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_ribbon.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_richtext.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_stc.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_webview.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_wxexpat.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_wxjpeg.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_wxpng.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_wxregex.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_wxscintilla.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_wxtiff.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_wxzlib.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_xml.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_vc9_xrc.vcproj
software/scsi2sd-util/wxWidgets/build/msw/wx_xrc.dsp
software/scsi2sd-util/wxWidgets/build/osx/makeprojects.applescript
software/scsi2sd-util/wxWidgets/build/osx/wx.xcconfig
software/scsi2sd-util/wxWidgets/build/osx/wxcarbon.xcodeproj/project.pbxproj
software/scsi2sd-util/wxWidgets/build/osx/wxcarbon_in.xcodeproj/project.pbxproj
software/scsi2sd-util/wxWidgets/build/osx/wxcocoa.xcodeproj/project.pbxproj
software/scsi2sd-util/wxWidgets/build/osx/wxcocoa_in.xcodeproj/project.pbxproj
software/scsi2sd-util/wxWidgets/build/osx/wxiphone.xcodeproj/project.pbxproj
software/scsi2sd-util/wxWidgets/build/osx/wxvers.xcconfig
software/scsi2sd-util/wxWidgets/build/tools/bld_chm_exe.bat
software/scsi2sd-util/wxWidgets/configure
software/scsi2sd-util/wxWidgets/configure.in
software/scsi2sd-util/wxWidgets/demos/bombs/Makefile.in
software/scsi2sd-util/wxWidgets/demos/bombs/bombs_vc8.vcproj
software/scsi2sd-util/wxWidgets/demos/bombs/bombs_vc9.vcproj
software/scsi2sd-util/wxWidgets/demos/forty/Makefile.in
software/scsi2sd-util/wxWidgets/demos/forty/forty_vc8.vcproj
software/scsi2sd-util/wxWidgets/demos/forty/forty_vc9.vcproj
software/scsi2sd-util/wxWidgets/demos/fractal/Makefile.in
software/scsi2sd-util/wxWidgets/demos/fractal/fractal_vc8.vcproj
software/scsi2sd-util/wxWidgets/demos/fractal/fractal_vc9.vcproj
software/scsi2sd-util/wxWidgets/demos/life/Makefile.in
software/scsi2sd-util/wxWidgets/demos/life/life_vc8.vcproj
software/scsi2sd-util/wxWidgets/demos/life/life_vc9.vcproj
software/scsi2sd-util/wxWidgets/demos/poem/Makefile.in
software/scsi2sd-util/wxWidgets/demos/poem/poem_vc8.vcproj
software/scsi2sd-util/wxWidgets/demos/poem/poem_vc9.vcproj
software/scsi2sd-util/wxWidgets/docs/changes.txt
software/scsi2sd-util/wxWidgets/docs/doxygen/Doxyfile
software/scsi2sd-util/wxWidgets/docs/doxygen/latexdocstart.inc
software/scsi2sd-util/wxWidgets/docs/doxygen/mainpages/manual.h
software/scsi2sd-util/wxWidgets/docs/doxygen/overviews/xrc_format.h
software/scsi2sd-util/wxWidgets/docs/msw/install.txt
software/scsi2sd-util/wxWidgets/docs/publicity/announce.txt
software/scsi2sd-util/wxWidgets/docs/readme.txt
software/scsi2sd-util/wxWidgets/docs/release_binaries.mdwn
software/scsi2sd-util/wxWidgets/docs/release_files.mdwn
software/scsi2sd-util/wxWidgets/include/wx/app.h
software/scsi2sd-util/wxWidgets/include/wx/arrstr.h
software/scsi2sd-util/wxWidgets/include/wx/bmpcbox.h
software/scsi2sd-util/wxWidgets/include/wx/build.h
software/scsi2sd-util/wxWidgets/include/wx/compiler.h
software/scsi2sd-util/wxWidgets/include/wx/defs.h
software/scsi2sd-util/wxWidgets/include/wx/filefn.h
software/scsi2sd-util/wxWidgets/include/wx/generic/listctrl.h
software/scsi2sd-util/wxWidgets/include/wx/generic/private/listctrl.h
software/scsi2sd-util/wxWidgets/include/wx/generic/richmsgdlgg.h
software/scsi2sd-util/wxWidgets/include/wx/generic/srchctlg.h
software/scsi2sd-util/wxWidgets/include/wx/language.h
software/scsi2sd-util/wxWidgets/include/wx/msw/bitmap.h
software/scsi2sd-util/wxWidgets/include/wx/msw/gccpriv.h
software/scsi2sd-util/wxWidgets/include/wx/msw/menu.h
software/scsi2sd-util/wxWidgets/include/wx/msw/menuitem.h
software/scsi2sd-util/wxWidgets/include/wx/msw/ole/oleutils.h
software/scsi2sd-util/wxWidgets/include/wx/msw/richmsgdlg.h
software/scsi2sd-util/wxWidgets/include/wx/msw/textctrl.h
software/scsi2sd-util/wxWidgets/include/wx/msw/window.h
software/scsi2sd-util/wxWidgets/include/wx/osx/config_xcode.h
software/scsi2sd-util/wxWidgets/include/wx/private/pipestream.h
software/scsi2sd-util/wxWidgets/include/wx/richmsgdlg.h
software/scsi2sd-util/wxWidgets/include/wx/simplebook.h
software/scsi2sd-util/wxWidgets/include/wx/version.h
software/scsi2sd-util/wxWidgets/include/wx/xrc/xh_all.h
software/scsi2sd-util/wxWidgets/include/wx/xrc/xh_simplebook.h [new file with mode: 0644]
software/scsi2sd-util/wxWidgets/interface/wx/datetime.h
software/scsi2sd-util/wxWidgets/interface/wx/dialog.h
software/scsi2sd-util/wxWidgets/interface/wx/graphics.h
software/scsi2sd-util/wxWidgets/interface/wx/language.h
software/scsi2sd-util/wxWidgets/interface/wx/listctrl.h
software/scsi2sd-util/wxWidgets/interface/wx/mimetype.h
software/scsi2sd-util/wxWidgets/interface/wx/simplebook.h
software/scsi2sd-util/wxWidgets/interface/wx/slider.h
software/scsi2sd-util/wxWidgets/interface/wx/stdpaths.h
software/scsi2sd-util/wxWidgets/interface/wx/treectrl.h
software/scsi2sd-util/wxWidgets/misc/languages/langtabl.txt
software/scsi2sd-util/wxWidgets/misc/schema/xrc_schema.rnc
software/scsi2sd-util/wxWidgets/samples/Info.plist
software/scsi2sd-util/wxWidgets/samples/access/Makefile.in
software/scsi2sd-util/wxWidgets/samples/access/access_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/access/access_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/animate/Makefile.in
software/scsi2sd-util/wxWidgets/samples/animate/anitest_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/animate/anitest_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/artprov/Makefile.in
software/scsi2sd-util/wxWidgets/samples/artprov/artprov_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/artprov/artprov_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/aui/Makefile.in
software/scsi2sd-util/wxWidgets/samples/aui/auidemo_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/aui/auidemo_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/calendar/Makefile.in
software/scsi2sd-util/wxWidgets/samples/calendar/calendar_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/calendar/calendar_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/caret/Makefile.in
software/scsi2sd-util/wxWidgets/samples/caret/caret_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/caret/caret_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/clipboard/Makefile.in
software/scsi2sd-util/wxWidgets/samples/clipboard/clipboard_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/clipboard/clipboard_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/collpane/Makefile.in
software/scsi2sd-util/wxWidgets/samples/collpane/collpane_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/collpane/collpane_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/combo/Makefile.in
software/scsi2sd-util/wxWidgets/samples/combo/combo_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/combo/combo_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/config/Makefile.in
software/scsi2sd-util/wxWidgets/samples/config/config_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/config/config_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/console/console_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/console/console_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/controls/Makefile.in
software/scsi2sd-util/wxWidgets/samples/controls/controls_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/controls/controls_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/dataview/Makefile.in
software/scsi2sd-util/wxWidgets/samples/dataview/dataview_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/dataview/dataview_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/debugrpt/Makefile.in
software/scsi2sd-util/wxWidgets/samples/debugrpt/debugrpt_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/debugrpt/debugrpt_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/dialogs/Makefile.in
software/scsi2sd-util/wxWidgets/samples/dialogs/dialogs_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/dialogs/dialogs_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/dialup/Makefile.in
software/scsi2sd-util/wxWidgets/samples/dialup/dialup_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/dialup/dialup_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/display/Makefile.in
software/scsi2sd-util/wxWidgets/samples/display/display_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/display/display_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/dll/Makefile.in
software/scsi2sd-util/wxWidgets/samples/dll/dll_vc8_my_dll.vcproj
software/scsi2sd-util/wxWidgets/samples/dll/dll_vc8_sdk_exe.vcproj
software/scsi2sd-util/wxWidgets/samples/dll/dll_vc8_wx_exe.vcproj
software/scsi2sd-util/wxWidgets/samples/dll/dll_vc9_my_dll.vcproj
software/scsi2sd-util/wxWidgets/samples/dll/dll_vc9_sdk_exe.vcproj
software/scsi2sd-util/wxWidgets/samples/dll/dll_vc9_wx_exe.vcproj
software/scsi2sd-util/wxWidgets/samples/dnd/Makefile.in
software/scsi2sd-util/wxWidgets/samples/dnd/dnd_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/dnd/dnd_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/docview/Info.plist
software/scsi2sd-util/wxWidgets/samples/docview/Makefile.in
software/scsi2sd-util/wxWidgets/samples/docview/docview_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/docview/docview_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/dragimag/Makefile.in
software/scsi2sd-util/wxWidgets/samples/dragimag/dragimag_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/dragimag/dragimag_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/drawing/Makefile.in
software/scsi2sd-util/wxWidgets/samples/drawing/drawing_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/drawing/drawing_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/erase/Makefile.in
software/scsi2sd-util/wxWidgets/samples/erase/erase_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/erase/erase_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/event/Makefile.in
software/scsi2sd-util/wxWidgets/samples/event/event_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/event/event_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/except/Makefile.in
software/scsi2sd-util/wxWidgets/samples/except/except_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/except/except_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/exec/Makefile.in
software/scsi2sd-util/wxWidgets/samples/exec/exec_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/exec/exec_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/flash/flash_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/flash/flash_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/font/Makefile.in
software/scsi2sd-util/wxWidgets/samples/font/font.cpp
software/scsi2sd-util/wxWidgets/samples/font/font_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/font/font_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/fswatcher/Makefile.in
software/scsi2sd-util/wxWidgets/samples/fswatcher/fswatcher_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/fswatcher/fswatcher_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/grid/Makefile.in
software/scsi2sd-util/wxWidgets/samples/grid/grid_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/grid/grid_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/help/Makefile.in
software/scsi2sd-util/wxWidgets/samples/help/help_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/help/help_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/htlbox/Makefile.in
software/scsi2sd-util/wxWidgets/samples/htlbox/htlbox_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/htlbox/htlbox_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/html/about/Makefile.in
software/scsi2sd-util/wxWidgets/samples/html/about/about_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/html/about/about_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/html/help/Makefile.in
software/scsi2sd-util/wxWidgets/samples/html/help/help_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/html/help/help_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/html/helpview/Makefile.in
software/scsi2sd-util/wxWidgets/samples/html/helpview/helpview_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/html/helpview/helpview_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/html/htmlctrl/Makefile.in
software/scsi2sd-util/wxWidgets/samples/html/printing/Makefile.in
software/scsi2sd-util/wxWidgets/samples/html/printing/printing_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/html/printing/printing_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/html/test/Makefile.in
software/scsi2sd-util/wxWidgets/samples/html/test/test_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/html/test/test_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/html/virtual/Makefile.in
software/scsi2sd-util/wxWidgets/samples/html/virtual/virtual_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/html/virtual/virtual_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/html/widget/Makefile.in
software/scsi2sd-util/wxWidgets/samples/html/widget/widget_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/html/widget/widget_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/html/zip/Makefile.in
software/scsi2sd-util/wxWidgets/samples/html/zip/zip_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/html/zip/zip_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/image/Makefile.in
software/scsi2sd-util/wxWidgets/samples/image/image_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/image/image_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/internat/Makefile.in
software/scsi2sd-util/wxWidgets/samples/internat/internat_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/internat/internat_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/ipc/Makefile.in
software/scsi2sd-util/wxWidgets/samples/ipc/ipc_vc8_baseipcclient.vcproj
software/scsi2sd-util/wxWidgets/samples/ipc/ipc_vc8_baseipcserver.vcproj
software/scsi2sd-util/wxWidgets/samples/ipc/ipc_vc8_ipcclient.vcproj
software/scsi2sd-util/wxWidgets/samples/ipc/ipc_vc8_ipcserver.vcproj
software/scsi2sd-util/wxWidgets/samples/ipc/ipc_vc9_baseipcclient.vcproj
software/scsi2sd-util/wxWidgets/samples/ipc/ipc_vc9_baseipcserver.vcproj
software/scsi2sd-util/wxWidgets/samples/ipc/ipc_vc9_ipcclient.vcproj
software/scsi2sd-util/wxWidgets/samples/ipc/ipc_vc9_ipcserver.vcproj
software/scsi2sd-util/wxWidgets/samples/joytest/Makefile.in
software/scsi2sd-util/wxWidgets/samples/joytest/joytest_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/joytest/joytest_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/keyboard/Makefile.in
software/scsi2sd-util/wxWidgets/samples/keyboard/keyboard_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/keyboard/keyboard_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/layout/Makefile.in
software/scsi2sd-util/wxWidgets/samples/layout/layout_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/layout/layout_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/listctrl/Makefile.in
software/scsi2sd-util/wxWidgets/samples/listctrl/listctrl_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/listctrl/listctrl_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/mdi/Makefile.in
software/scsi2sd-util/wxWidgets/samples/mdi/mdi_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/mdi/mdi_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/mediaplayer/Makefile.in
software/scsi2sd-util/wxWidgets/samples/mediaplayer/mediaplayer_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/mediaplayer/mediaplayer_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/memcheck/Makefile.in
software/scsi2sd-util/wxWidgets/samples/memcheck/memcheck_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/memcheck/memcheck_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/menu/Makefile.in
software/scsi2sd-util/wxWidgets/samples/menu/menu_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/menu/menu_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/mfc/mfc_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/mfc/mfc_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/minimal/Info_carbon.plist
software/scsi2sd-util/wxWidgets/samples/minimal/Info_cocoa.plist
software/scsi2sd-util/wxWidgets/samples/minimal/Makefile.in
software/scsi2sd-util/wxWidgets/samples/minimal/minimal_carbon.xcodeproj/project.pbxproj
software/scsi2sd-util/wxWidgets/samples/minimal/minimal_cocoa.xcodeproj/project.pbxproj
software/scsi2sd-util/wxWidgets/samples/minimal/minimal_iphone.xcodeproj/project.pbxproj
software/scsi2sd-util/wxWidgets/samples/minimal/minimal_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/minimal/minimal_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/nativdlg/Makefile.in
software/scsi2sd-util/wxWidgets/samples/nativdlg/nativdlg_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/nativdlg/nativdlg_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/notebook/Makefile.in
software/scsi2sd-util/wxWidgets/samples/notebook/notebook_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/notebook/notebook_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/oleauto/Makefile.in
software/scsi2sd-util/wxWidgets/samples/oleauto/oleauto_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/oleauto/oleauto_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/opengl/cube/Makefile.in
software/scsi2sd-util/wxWidgets/samples/opengl/cube/cube_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/opengl/cube/cube_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/opengl/isosurf/Makefile.in
software/scsi2sd-util/wxWidgets/samples/opengl/isosurf/isosurf_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/opengl/isosurf/isosurf_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/opengl/penguin/Makefile.in
software/scsi2sd-util/wxWidgets/samples/opengl/penguin/penguin_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/opengl/penguin/penguin_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/ownerdrw/Makefile.in
software/scsi2sd-util/wxWidgets/samples/ownerdrw/ownerdrw_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/ownerdrw/ownerdrw_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/popup/Makefile.in
software/scsi2sd-util/wxWidgets/samples/popup/popup_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/popup/popup_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/power/Makefile.in
software/scsi2sd-util/wxWidgets/samples/power/power_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/power/power_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/preferences/Makefile.in
software/scsi2sd-util/wxWidgets/samples/preferences/preferences_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/preferences/preferences_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/printing/Makefile.in
software/scsi2sd-util/wxWidgets/samples/printing/printing_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/printing/printing_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/propgrid/Makefile.in
software/scsi2sd-util/wxWidgets/samples/propgrid/propgrid_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/propgrid/propgrid_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/regtest/Makefile.in
software/scsi2sd-util/wxWidgets/samples/regtest/regtest_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/regtest/regtest_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/render/Makefile.in
software/scsi2sd-util/wxWidgets/samples/render/render_vc8_renddll.vcproj
software/scsi2sd-util/wxWidgets/samples/render/render_vc8_render.vcproj
software/scsi2sd-util/wxWidgets/samples/render/render_vc9_renddll.vcproj
software/scsi2sd-util/wxWidgets/samples/render/render_vc9_render.vcproj
software/scsi2sd-util/wxWidgets/samples/ribbon/Makefile.in
software/scsi2sd-util/wxWidgets/samples/ribbon/ribbon_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/ribbon/ribbon_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/richtext/Makefile.in
software/scsi2sd-util/wxWidgets/samples/richtext/richtext.cpp
software/scsi2sd-util/wxWidgets/samples/richtext/richtext_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/richtext/richtext_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/sashtest/Makefile.in
software/scsi2sd-util/wxWidgets/samples/sashtest/sashtest_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/sashtest/sashtest_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/scroll/Makefile.in
software/scsi2sd-util/wxWidgets/samples/scroll/scroll_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/scroll/scroll_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/shaped/Makefile.in
software/scsi2sd-util/wxWidgets/samples/shaped/shaped_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/shaped/shaped_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/sockets/Makefile.in
software/scsi2sd-util/wxWidgets/samples/sockets/sockets_vc8_baseclient.vcproj
software/scsi2sd-util/wxWidgets/samples/sockets/sockets_vc8_baseserver.vcproj
software/scsi2sd-util/wxWidgets/samples/sockets/sockets_vc8_client.vcproj
software/scsi2sd-util/wxWidgets/samples/sockets/sockets_vc8_server.vcproj
software/scsi2sd-util/wxWidgets/samples/sockets/sockets_vc9_baseclient.vcproj
software/scsi2sd-util/wxWidgets/samples/sockets/sockets_vc9_baseserver.vcproj
software/scsi2sd-util/wxWidgets/samples/sockets/sockets_vc9_client.vcproj
software/scsi2sd-util/wxWidgets/samples/sockets/sockets_vc9_server.vcproj
software/scsi2sd-util/wxWidgets/samples/sound/Makefile.in
software/scsi2sd-util/wxWidgets/samples/sound/sound_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/sound/sound_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/splash/Makefile.in
software/scsi2sd-util/wxWidgets/samples/splash/splash_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/splash/splash_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/splitter/Makefile.in
software/scsi2sd-util/wxWidgets/samples/splitter/splitter_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/splitter/splitter_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/statbar/Makefile.in
software/scsi2sd-util/wxWidgets/samples/statbar/statbar_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/statbar/statbar_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/stc/Makefile.in
software/scsi2sd-util/wxWidgets/samples/stc/stctest_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/stc/stctest_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/svg/Makefile.in
software/scsi2sd-util/wxWidgets/samples/svg/svgtest_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/svg/svgtest_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/taborder/Makefile.in
software/scsi2sd-util/wxWidgets/samples/taborder/taborder_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/taborder/taborder_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/taskbar/Makefile.in
software/scsi2sd-util/wxWidgets/samples/taskbar/taskbar_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/taskbar/taskbar_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/text/Makefile.in
software/scsi2sd-util/wxWidgets/samples/text/text_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/text/text_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/thread/Makefile.in
software/scsi2sd-util/wxWidgets/samples/thread/thread_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/thread/thread_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/toolbar/Makefile.in
software/scsi2sd-util/wxWidgets/samples/toolbar/toolbar.cpp
software/scsi2sd-util/wxWidgets/samples/toolbar/toolbar_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/toolbar/toolbar_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/treectrl/Makefile.in
software/scsi2sd-util/wxWidgets/samples/treectrl/treectrl_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/treectrl/treectrl_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/treectrl/treetest.cpp
software/scsi2sd-util/wxWidgets/samples/treectrl/treetest.h
software/scsi2sd-util/wxWidgets/samples/treelist/Makefile.in
software/scsi2sd-util/wxWidgets/samples/treelist/treelist_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/treelist/treelist_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/typetest/Makefile.in
software/scsi2sd-util/wxWidgets/samples/typetest/typetest_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/typetest/typetest_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/uiaction/Makefile.in
software/scsi2sd-util/wxWidgets/samples/uiaction/uiaction_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/uiaction/uiaction_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/validate/Makefile.in
software/scsi2sd-util/wxWidgets/samples/validate/validate_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/validate/validate_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/vscroll/Makefile.in
software/scsi2sd-util/wxWidgets/samples/vscroll/vscroll_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/vscroll/vscroll_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/webview/Makefile.in
software/scsi2sd-util/wxWidgets/samples/webview/webview_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/webview/webview_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/widgets/Makefile.in
software/scsi2sd-util/wxWidgets/samples/widgets/widgets_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/widgets/widgets_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/wizard/Makefile.in
software/scsi2sd-util/wxWidgets/samples/wizard/wizard_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/wizard/wizard_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/wrapsizer/Makefile.in
software/scsi2sd-util/wxWidgets/samples/wrapsizer/wrapsizer_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/wrapsizer/wrapsizer_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/xrc/Makefile.in
software/scsi2sd-util/wxWidgets/samples/xrc/makefile.bcc
software/scsi2sd-util/wxWidgets/samples/xrc/makefile.gcc
software/scsi2sd-util/wxWidgets/samples/xrc/makefile.vc
software/scsi2sd-util/wxWidgets/samples/xrc/makefile.wat
software/scsi2sd-util/wxWidgets/samples/xrc/myframe.cpp
software/scsi2sd-util/wxWidgets/samples/xrc/myframe.h
software/scsi2sd-util/wxWidgets/samples/xrc/rc/controls.xrc
software/scsi2sd-util/wxWidgets/samples/xrc/rc/menu.xrc
software/scsi2sd-util/wxWidgets/samples/xrc/rc/variants.xpm [new file with mode: 0644]
software/scsi2sd-util/wxWidgets/samples/xrc/rc/variants.xrc [new file with mode: 0644]
software/scsi2sd-util/wxWidgets/samples/xrc/xrcdemo.bkl
software/scsi2sd-util/wxWidgets/samples/xrc/xrcdemo_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/xrc/xrcdemo_vc9.vcproj
software/scsi2sd-util/wxWidgets/samples/xti/Makefile.in
software/scsi2sd-util/wxWidgets/samples/xti/xti_vc8.vcproj
software/scsi2sd-util/wxWidgets/samples/xti/xti_vc9.vcproj
software/scsi2sd-util/wxWidgets/src/aui/auibar.cpp
software/scsi2sd-util/wxWidgets/src/aui/auibook.cpp
software/scsi2sd-util/wxWidgets/src/common/arrstr.cpp
software/scsi2sd-util/wxWidgets/src/common/cairo.cpp
software/scsi2sd-util/wxWidgets/src/common/cmdline.cpp
software/scsi2sd-util/wxWidgets/src/common/datavcmn.cpp
software/scsi2sd-util/wxWidgets/src/common/datetime.cpp
software/scsi2sd-util/wxWidgets/src/common/datetimefmt.cpp
software/scsi2sd-util/wxWidgets/src/common/dcbase.cpp
software/scsi2sd-util/wxWidgets/src/common/dcgraph.cpp
software/scsi2sd-util/wxWidgets/src/common/event.cpp
software/scsi2sd-util/wxWidgets/src/common/ffile.cpp
software/scsi2sd-util/wxWidgets/src/common/file.cpp
software/scsi2sd-util/wxWidgets/src/common/filename.cpp
software/scsi2sd-util/wxWidgets/src/common/fswatchercmn.cpp
software/scsi2sd-util/wxWidgets/src/common/ftp.cpp
software/scsi2sd-util/wxWidgets/src/common/imaggif.cpp
software/scsi2sd-util/wxWidgets/src/common/languageinfo.cpp
software/scsi2sd-util/wxWidgets/src/common/sckaddr.cpp
software/scsi2sd-util/wxWidgets/src/common/stopwatch.cpp
software/scsi2sd-util/wxWidgets/src/common/string.cpp
software/scsi2sd-util/wxWidgets/src/common/translation.cpp
software/scsi2sd-util/wxWidgets/src/generic/animateg.cpp
software/scsi2sd-util/wxWidgets/src/generic/datavgen.cpp
software/scsi2sd-util/wxWidgets/src/generic/graphicc.cpp
software/scsi2sd-util/wxWidgets/src/generic/grid.cpp
software/scsi2sd-util/wxWidgets/src/generic/listctrl.cpp
software/scsi2sd-util/wxWidgets/src/generic/preferencesg.cpp
software/scsi2sd-util/wxWidgets/src/generic/srchctlg.cpp
software/scsi2sd-util/wxWidgets/src/generic/treectlg.cpp
software/scsi2sd-util/wxWidgets/src/gtk/control.cpp
software/scsi2sd-util/wxWidgets/src/gtk/dcclient.cpp
software/scsi2sd-util/wxWidgets/src/gtk/notebook.cpp
software/scsi2sd-util/wxWidgets/src/gtk/toolbar.cpp
software/scsi2sd-util/wxWidgets/src/gtk/window.cpp
software/scsi2sd-util/wxWidgets/src/html/htmlwin.cpp
software/scsi2sd-util/wxWidgets/src/msw/anybutton.cpp
software/scsi2sd-util/wxWidgets/src/msw/bitmap.cpp
software/scsi2sd-util/wxWidgets/src/msw/bmpcbox.cpp
software/scsi2sd-util/wxWidgets/src/msw/calctrl.cpp
software/scsi2sd-util/wxWidgets/src/msw/control.cpp
software/scsi2sd-util/wxWidgets/src/msw/dc.cpp
software/scsi2sd-util/wxWidgets/src/msw/dirdlg.cpp
software/scsi2sd-util/wxWidgets/src/msw/font.cpp
software/scsi2sd-util/wxWidgets/src/msw/frame.cpp
software/scsi2sd-util/wxWidgets/src/msw/graphics.cpp
software/scsi2sd-util/wxWidgets/src/msw/imaglist.cpp
software/scsi2sd-util/wxWidgets/src/msw/menu.cpp
software/scsi2sd-util/wxWidgets/src/msw/menuitem.cpp
software/scsi2sd-util/wxWidgets/src/msw/printdlg.cpp
software/scsi2sd-util/wxWidgets/src/msw/statbox.cpp
software/scsi2sd-util/wxWidgets/src/msw/textctrl.cpp
software/scsi2sd-util/wxWidgets/src/msw/treectrl.cpp
software/scsi2sd-util/wxWidgets/src/msw/utils.cpp
software/scsi2sd-util/wxWidgets/src/msw/webview_ie.cpp
software/scsi2sd-util/wxWidgets/src/msw/window.cpp
software/scsi2sd-util/wxWidgets/src/osx/carbon/colordlg.cpp
software/scsi2sd-util/wxWidgets/src/osx/carbon/colordlgosx.mm
software/scsi2sd-util/wxWidgets/src/osx/cocoa/glcanvas.mm
software/scsi2sd-util/wxWidgets/src/osx/cocoa/taskbar.mm
software/scsi2sd-util/wxWidgets/src/osx/cocoa/toolbar.mm
software/scsi2sd-util/wxWidgets/src/osx/cocoa/utils.mm
software/scsi2sd-util/wxWidgets/src/osx/cocoa/window.mm
software/scsi2sd-util/wxWidgets/src/osx/menu_osx.cpp
software/scsi2sd-util/wxWidgets/src/osx/window_osx.cpp
software/scsi2sd-util/wxWidgets/src/propgrid/propgrid.cpp
software/scsi2sd-util/wxWidgets/src/ribbon/bar.cpp
software/scsi2sd-util/wxWidgets/src/richtext/richtextbuffer.cpp
software/scsi2sd-util/wxWidgets/src/richtext/richtextctrl.cpp
software/scsi2sd-util/wxWidgets/src/richtext/richtextxml.cpp
software/scsi2sd-util/wxWidgets/src/unix/displayx11.cpp
software/scsi2sd-util/wxWidgets/src/unix/stackwalk.cpp
software/scsi2sd-util/wxWidgets/src/xrc/xh_simplebook.cpp [new file with mode: 0644]
software/scsi2sd-util/wxWidgets/src/xrc/xh_toolb.cpp
software/scsi2sd-util/wxWidgets/src/xrc/xmlres.cpp
software/scsi2sd-util/wxWidgets/src/xrc/xmlrsall.cpp
software/scsi2sd-util/wxWidgets/tests/Makefile.in
software/scsi2sd-util/wxWidgets/tests/arrays/arrays.cpp
software/scsi2sd-util/wxWidgets/tests/benchmarks/Makefile.in
software/scsi2sd-util/wxWidgets/tests/benchmarks/bench_vc8.sln
software/scsi2sd-util/wxWidgets/tests/benchmarks/bench_vc8_bench.vcproj
software/scsi2sd-util/wxWidgets/tests/benchmarks/bench_vc8_bench_gui.vcproj
software/scsi2sd-util/wxWidgets/tests/benchmarks/bench_vc9.sln
software/scsi2sd-util/wxWidgets/tests/benchmarks/bench_vc9_bench.vcproj
software/scsi2sd-util/wxWidgets/tests/benchmarks/bench_vc9_bench_gui.vcproj
software/scsi2sd-util/wxWidgets/tests/controls/listbasetest.cpp
software/scsi2sd-util/wxWidgets/tests/datetime/datetimetest.cpp
software/scsi2sd-util/wxWidgets/tests/filename/filenametest.cpp
software/scsi2sd-util/wxWidgets/tests/graphics/boundingbox.cpp [new file with mode: 0644]
software/scsi2sd-util/wxWidgets/tests/makefile.bcc
software/scsi2sd-util/wxWidgets/tests/makefile.gcc
software/scsi2sd-util/wxWidgets/tests/makefile.vc
software/scsi2sd-util/wxWidgets/tests/strings/unicode.cpp
software/scsi2sd-util/wxWidgets/tests/test.bkl
software/scsi2sd-util/wxWidgets/tests/test_vc7_test_gui.vcproj
software/scsi2sd-util/wxWidgets/tests/test_vc8_test.vcproj
software/scsi2sd-util/wxWidgets/tests/test_vc8_test_gui.vcproj
software/scsi2sd-util/wxWidgets/tests/test_vc9_test.vcproj
software/scsi2sd-util/wxWidgets/tests/test_vc9_test_gui.vcproj
software/scsi2sd-util/wxWidgets/utils/emulator/src/emulator_vc8.vcproj
software/scsi2sd-util/wxWidgets/utils/emulator/src/emulator_vc9.vcproj
software/scsi2sd-util/wxWidgets/utils/execmon/execmon_vc8.sln
software/scsi2sd-util/wxWidgets/utils/execmon/execmon_vc8.vcproj
software/scsi2sd-util/wxWidgets/utils/execmon/execmon_vc9.sln
software/scsi2sd-util/wxWidgets/utils/execmon/execmon_vc9.vcproj
software/scsi2sd-util/wxWidgets/utils/helpview/src/Makefile.in
software/scsi2sd-util/wxWidgets/utils/helpview/src/helpview_vc8.vcproj
software/scsi2sd-util/wxWidgets/utils/helpview/src/helpview_vc9.vcproj
software/scsi2sd-util/wxWidgets/utils/hhp2cached/hhp2cached_vc8.vcproj
software/scsi2sd-util/wxWidgets/utils/hhp2cached/hhp2cached_vc9.vcproj
software/scsi2sd-util/wxWidgets/utils/ifacecheck/src/ifacecheck_vc8.sln
software/scsi2sd-util/wxWidgets/utils/ifacecheck/src/ifacecheck_vc8.vcproj
software/scsi2sd-util/wxWidgets/utils/ifacecheck/src/ifacecheck_vc9.sln
software/scsi2sd-util/wxWidgets/utils/ifacecheck/src/ifacecheck_vc9.vcproj
software/scsi2sd-util/wxWidgets/utils/screenshotgen/src/Makefile.in
software/scsi2sd-util/wxWidgets/utils/screenshotgen/src/screenshotgen_vc8.sln
software/scsi2sd-util/wxWidgets/utils/screenshotgen/src/screenshotgen_vc8.vcproj
software/scsi2sd-util/wxWidgets/utils/screenshotgen/src/screenshotgen_vc9.sln
software/scsi2sd-util/wxWidgets/utils/screenshotgen/src/screenshotgen_vc9.vcproj
software/scsi2sd-util/wxWidgets/utils/wxrc/wxrc.cpp
software/scsi2sd-util/wxWidgets/utils/wxrc/wxrc_vc8.vcproj
software/scsi2sd-util/wxWidgets/utils/wxrc/wxrc_vc9.vcproj
software/scsi2sd-util/wxWidgets/version-script.in

index 81b3bf8..ea5ccc8 100644 (file)
--- a/CHANGELOG
+++ b/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
index 6708345..7b4ed82 100755 (executable)
 #include "scsi.h"\r
 #include "scsiPhy.h"\r
 #include "disk.h"\r
+#include "trace.h"\r
 \r
 #include "../../include/scsi2sd.h"\r
 #include "../../include/hidpacket.h"\r
 \r
 #include <string.h>\r
 \r
-static const uint16_t FIRMWARE_VERSION = 0x0442;\r
+static const uint16_t FIRMWARE_VERSION = 0x0450;\r
 \r
 // 1 flash row\r
 static const uint8_t DEFAULT_CONFIG[256] =\r
@@ -64,7 +65,26 @@ static int usbInEpState;
 static int usbDebugEpState;\r
 static int usbReady;\r
 \r
-void configInit()\r
+static void initBoardConfig(BoardConfig* config) {\r
+       memcpy(\r
+               config,\r
+               (\r
+                       CY_FLASH_BASE +\r
+                       (CY_FLASH_SIZEOF_ARRAY * (size_t) SCSI_CONFIG_ARRAY) +\r
+                       (CY_FLASH_SIZEOF_ROW * SCSI_CONFIG_BOARD_ROW)\r
+                       ),\r
+               sizeof(BoardConfig));\r
+\r
+       if (memcmp(config->magic, "BCFG", 4)) {\r
+               // Set a default from the deprecated flags, or 0 if\r
+               // there is no initial config.\r
+               config->flags = getConfigByIndex(0)->flagsDEPRECATED;\r
+\r
+               config->selectionDelay = 255; // auto\r
+       }\r
+}\r
+\r
+void configInit(BoardConfig* config)\r
 {\r
        // The USB block will be powered by an internal 3.3V regulator.\r
        // The PSoC must be operating between 4.6V and 5V for the regulator\r
@@ -90,6 +110,8 @@ void configInit()
                CySetTemp();\r
                CyWriteRowData(SCSI_CONFIG_ARRAY, SCSI_CONFIG_0_ROW, DEFAULT_CONFIG);\r
        }\r
+\r
+       initBoardConfig(config);\r
 }\r
 \r
 static void\r
@@ -123,7 +145,7 @@ writeFlashCommand(const uint8_t* cmd, size_t cmdSize)
        // Be very careful not to overwrite the bootloader or other\r
        // code\r
        if ((flashArray != SCSI_CONFIG_ARRAY) ||\r
-               (flashRow < SCSI_CONFIG_0_ROW) ||\r
+               (flashRow < SCSI_CONFIG_BOARD_ROW) ||\r
                (flashRow >= SCSI_CONFIG_3_ROW + SCSI_CONFIG_ROWS))\r
        {\r
                uint8_t response[] = { CONFIG_STATUS_ERR};\r
@@ -324,6 +346,7 @@ void debugPoll()
                hidBuffer[27] = scsiDev.lastSenseASC >> 8;\r
                hidBuffer[28] = scsiDev.lastSenseASC;\r
                hidBuffer[29] = scsiReadDBxPins();\r
+               hidBuffer[30] = LastTrace;\r
 \r
                hidBuffer[58] = sdDev.capacity >> 24;\r
                hidBuffer[59] = sdDev.capacity >> 16;\r
index c16767c..2c47a1e 100755 (executable)
@@ -20,7 +20,7 @@
 #include "device.h"\r
 #include "scsi2sd.h"\r
 \r
-void configInit(void);\r
+void configInit(BoardConfig* config);\r
 void debugInit(void);\r
 void configPoll(void);\r
 void configSave(int scsiId, uint16_t byesPerSector);\r
index 7a59939..7055c34 100755 (executable)
@@ -175,6 +175,8 @@ static void doWrite(uint32 lba, uint32 blocks)
                CyDelay(10);\r
        }\r
 \r
+       uint32_t bytesPerSector = scsiDev.target->liveCfg.bytesPerSector;\r
+\r
        if (unlikely(blockDev.state & DISK_WP) ||\r
                unlikely(scsiDev.target->cfg->deviceType == CONFIG_OPTICAL))\r
 \r
@@ -187,7 +189,7 @@ static void doWrite(uint32 lba, uint32 blocks)
        else if (unlikely(((uint64) lba) + blocks >\r
                getScsiCapacity(\r
                        scsiDev.target->cfg->sdSectorStart,\r
-                       scsiDev.target->liveCfg.bytesPerSector,\r
+                       bytesPerSector,\r
                        scsiDev.target->cfg->scsiSectors\r
                        )\r
                ))\r
@@ -199,19 +201,25 @@ static void doWrite(uint32 lba, uint32 blocks)
        }\r
        else\r
        {\r
-               transfer.dir = TRANSFER_WRITE;\r
                transfer.lba = lba;\r
                transfer.blocks = blocks;\r
                transfer.currentBlock = 0;\r
                scsiDev.phase = DATA_OUT;\r
-               scsiDev.dataLen = scsiDev.target->liveCfg.bytesPerSector;\r
-               scsiDev.dataPtr = scsiDev.target->liveCfg.bytesPerSector;\r
+               scsiDev.dataLen = bytesPerSector;\r
+               scsiDev.dataPtr = bytesPerSector;\r
 \r
                // No need for single-block writes atm.  Overhead of the\r
                // multi-block write is minimal.\r
                transfer.multiBlock = 1;\r
 \r
-               sdWriteMultiSectorPrep();\r
+\r
+               uint32_t sdLBA =\r
+                       SCSISector2SD(\r
+                               scsiDev.target->cfg->sdSectorStart,\r
+                               bytesPerSector,\r
+                               lba);\r
+               uint32_t sdBlocks = blocks * SDSectorsPerSCSISector(bytesPerSector);\r
+               sdWriteMultiSectorPrep(sdLBA, sdBlocks);\r
        }\r
 }\r
 \r
@@ -237,14 +245,21 @@ static void doRead(uint32 lba, uint32 blocks)
        }\r
        else\r
        {\r
-               transfer.dir = TRANSFER_READ;\r
                transfer.lba = lba;\r
                transfer.blocks = blocks;\r
                transfer.currentBlock = 0;\r
                scsiDev.phase = DATA_IN;\r
                scsiDev.dataLen = 0; // No data yet\r
 \r
-               if ((blocks * SDSectorsPerSCSISector(scsiDev.target->liveCfg.bytesPerSector) == 1) ||\r
+               uint32_t bytesPerSector = scsiDev.target->liveCfg.bytesPerSector;\r
+               uint32_t sdSectorPerSCSISector = SDSectorsPerSCSISector(bytesPerSector);\r
+               uint32_t sdSectors =\r
+                       blocks * sdSectorPerSCSISector;\r
+\r
+               if ((\r
+                               (sdSectors == 1) &&\r
+                               !(scsiDev.boardCfg.flags & CONFIG_ENABLE_CACHE)\r
+                       ) ||\r
                        unlikely(((uint64) lba) + blocks == capacity)\r
                        )\r
                {\r
@@ -255,7 +270,14 @@ static void doRead(uint32 lba, uint32 blocks)
                else\r
                {\r
                        transfer.multiBlock = 1;\r
-                       sdReadMultiSectorPrep();\r
+\r
+                       uint32_t sdLBA =\r
+                               SCSISector2SD(\r
+                                       scsiDev.target->cfg->sdSectorStart,\r
+                                       bytesPerSector,\r
+                                       lba);\r
+\r
+                       sdReadMultiSectorPrep(sdLBA, sdSectors);\r
                }\r
        }\r
 }\r
@@ -515,22 +537,22 @@ int scsiDiskCommand()
 \r
 void scsiDiskPoll()\r
 {\r
+       uint32_t bytesPerSector = scsiDev.target->liveCfg.bytesPerSector;\r
+\r
        if (scsiDev.phase == DATA_IN &&\r
                transfer.currentBlock != transfer.blocks)\r
        {\r
                scsiEnterPhase(DATA_IN);\r
 \r
                int totalSDSectors =\r
-                       transfer.blocks *\r
-                               SDSectorsPerSCSISector(scsiDev.target->liveCfg.bytesPerSector);\r
+                       transfer.blocks * SDSectorsPerSCSISector(bytesPerSector);\r
                uint32_t sdLBA =\r
                        SCSISector2SD(\r
                                scsiDev.target->cfg->sdSectorStart,\r
-                               scsiDev.target->liveCfg.bytesPerSector,\r
+                               bytesPerSector,\r
                                transfer.lba);\r
 \r
-               const int sdPerScsi =\r
-                       SDSectorsPerSCSISector(scsiDev.target->liveCfg.bytesPerSector);\r
+               const int sdPerScsi = SDSectorsPerSCSISector(bytesPerSector);\r
                int buffers = sizeof(scsiDev.data) / SD_SECTOR_SIZE;\r
                int prep = 0;\r
                int i = 0;\r
@@ -543,16 +565,18 @@ void scsiDiskPoll()
                        // Wait for the next DMA interrupt. It's beneficial to halt the\r
                        // processor to give the DMA controller more memory bandwidth to\r
                        // work with.\r
-                       // We're optimistically assuming a race condition won't occur\r
-                       // between these checks and the interrupt handers. The 1ms\r
-                       // systick timer interrupt saves us on the event of a race.\r
-                       int scsiBusy = scsiDMABusy();\r
-                       int sdBusy = sdDMABusy();\r
+                       int scsiBusy = 1;\r
+                       int sdBusy = 1;\r
                        while (scsiBusy && sdBusy)\r
                        {\r
-                               __WFI();\r
+                               uint8_t intr = CyEnterCriticalSection();\r
                                scsiBusy = scsiDMABusy();\r
                                sdBusy = sdDMABusy();\r
+                               if (scsiBusy && sdBusy)\r
+                               {\r
+                                       __WFI();\r
+                               }\r
+                               CyExitCriticalSection(intr);\r
                        }\r
 \r
                        if (sdActive && !sdBusy && sdReadSectorDMAPoll())\r
@@ -591,7 +615,7 @@ void scsiDiskPoll()
                                int dmaBytes = SD_SECTOR_SIZE;\r
                                if ((i % sdPerScsi) == (sdPerScsi - 1))\r
                                {\r
-                                       dmaBytes = scsiDev.target->liveCfg.bytesPerSector % SD_SECTOR_SIZE;\r
+                                       dmaBytes = bytesPerSector % SD_SECTOR_SIZE;\r
                                        if (dmaBytes == 0) dmaBytes = SD_SECTOR_SIZE;\r
                                }\r
                                scsiWriteDMA(&scsiDev.data[SD_SECTOR_SIZE * (i % buffers)], dmaBytes);\r
@@ -609,8 +633,7 @@ void scsiDiskPoll()
        {\r
                scsiEnterPhase(DATA_OUT);\r
 \r
-               const int sdPerScsi =\r
-                       SDSectorsPerSCSISector(scsiDev.target->liveCfg.bytesPerSector);\r
+               const int sdPerScsi = SDSectorsPerSCSISector(bytesPerSector);\r
                int totalSDSectors = transfer.blocks * sdPerScsi;\r
                int buffers = sizeof(scsiDev.data) / SD_SECTOR_SIZE;\r
                int prep = 0;\r
@@ -629,19 +652,21 @@ void scsiDiskPoll()
                        // Wait for the next DMA interrupt. It's beneficial to halt the\r
                        // processor to give the DMA controller more memory bandwidth to\r
                        // work with.\r
-                       // We're optimistically assuming a race condition won't occur\r
-                       // between these checks and the interrupt handers. The 1ms\r
-                       // systick timer interrupt saves us on the event of a race.\r
-                       int scsiBusy = scsiDMABusy();\r
-                       int sdBusy = sdDMABusy();\r
+                       int scsiBusy = 1;\r
+                       int sdBusy = 1;\r
                        while (scsiBusy && sdBusy)\r
                        {\r
-                               __WFI();\r
+                               uint8_t intr = CyEnterCriticalSection();\r
                                scsiBusy = scsiDMABusy();\r
                                sdBusy = sdDMABusy();\r
+                               if (scsiBusy && sdBusy)\r
+                               {\r
+                                       __WFI();\r
+                               }\r
+                               CyExitCriticalSection(intr);\r
                        }\r
 \r
-                       if (sdActive && !sdBusy && sdWriteSectorDMAPoll(i == (totalSDSectors - 1)))\r
+                       if (sdActive && !sdBusy && sdWriteSectorDMAPoll())\r
                        {\r
                                sdActive = 0;\r
                                i++;\r
@@ -669,13 +694,14 @@ void scsiDiskPoll()
                                int dmaBytes = SD_SECTOR_SIZE;\r
                                if ((prep % sdPerScsi) == (sdPerScsi - 1))\r
                                {\r
-                                       dmaBytes = scsiDev.target->liveCfg.bytesPerSector % SD_SECTOR_SIZE;\r
+                                       dmaBytes = bytesPerSector % SD_SECTOR_SIZE;\r
                                        if (dmaBytes == 0) dmaBytes = SD_SECTOR_SIZE;\r
                                }\r
                                scsiReadDMA(&scsiDev.data[SD_SECTOR_SIZE * (prep % buffers)], dmaBytes);\r
                                scsiActive = 1;\r
                        }\r
                        else if (\r
+                               (scsiDev.boardCfg.flags & CONFIG_ENABLE_DISCONNECT) &&\r
                                (scsiActive == 0) &&\r
                                likely(!scsiDisconnected) &&\r
                                unlikely(scsiDev.discPriv) &&\r
@@ -761,7 +787,7 @@ void scsiDiskPoll()
                if (scsiDev.phase == DATA_OUT)\r
                {\r
                        if (scsiDev.parityError &&\r
-                               (scsiDev.target->cfg->flags & CONFIG_ENABLE_PARITY) &&\r
+                               (scsiDev.boardCfg.flags & CONFIG_ENABLE_PARITY) &&\r
                                (scsiDev.compatMode >= COMPAT_SCSI2))\r
                        {\r
                                scsiDev.target->sense.code = ABORTED_COMMAND;\r
@@ -784,24 +810,19 @@ void scsiDiskReset()
        transfer.currentBlock = 0;\r
 \r
        // Cancel long running commands!\r
-       if (unlikely(transfer.inProgress == 1))\r
+       if (\r
+               ((scsiDev.boardCfg.flags & CONFIG_ENABLE_CACHE) == 0) ||\r
+                       (transfer.multiBlock == 0)\r
+               )\r
        {\r
-               if (transfer.dir == TRANSFER_WRITE)\r
-               {\r
-                       sdCompleteWrite();\r
-               }\r
-               else\r
-               {\r
-                       sdCompleteRead();\r
-               }\r
+               sdCompleteTransfer();\r
        }\r
-       transfer.inProgress = 0;\r
+\r
        transfer.multiBlock = 0;\r
 }\r
 \r
 void scsiDiskInit()\r
 {\r
-       transfer.inProgress = 0;\r
        scsiDiskReset();\r
 \r
        // Don't require the host to send us a START STOP UNIT command\r
index b9367a4..df197d7 100755 (executable)
@@ -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;
 
index cb041c2..992f286 100755 (executable)
@@ -26,9 +26,7 @@
 #include "time.h"\r
 #include "trace.h"\r
 \r
-const char* Notice = "Copyright (C) 2014 Michael McMaster <michael@codesrc.com>";\r
-\r
-uint8_t testData[512];\r
+const char* Notice = "Copyright (C) 2015 Michael McMaster <michael@codesrc.com>";\r
 \r
 int main()\r
 {\r
@@ -43,16 +41,21 @@ int main()
        // Set interrupt handlers.\r
        scsiPhyInit();\r
 \r
-       configInit();\r
+       configInit(&scsiDev.boardCfg);\r
        debugInit();\r
 \r
        scsiInit();\r
        scsiDiskInit();\r
 \r
-       uint32_t lastSDPoll = getTime_ms();\r
-       sdPoll();\r
-\r
+       // Optional bootup delay\r
+       int delaySeconds = 0;\r
+       while (delaySeconds < scsiDev.boardCfg.startupDelay) {\r
+               CyDelay(1000);\r
+               ++delaySeconds;\r
+       }\r
 \r
+       uint32_t lastSDPoll = getTime_ms();\r
+       sdCheckPresent();\r
 \r
 \r
        while (1)\r
@@ -62,22 +65,35 @@ int main()
                scsiPoll();\r
                scsiDiskPoll();\r
                configPoll();\r
+               sdPoll();\r
 \r
                if (unlikely(scsiDev.phase == BUS_FREE))\r
                {\r
                        if (unlikely(elapsedTime_ms(lastSDPoll) > 200))\r
                        {\r
                                lastSDPoll = getTime_ms();\r
-                               sdPoll();\r
+                               sdCheckPresent();\r
                        }\r
                        else\r
                        {\r
                                // Wait for our 1ms timer to save some power.\r
                                // There's an interrupt on the SEL signal to ensure we respond\r
-                               // quickly to any SCSI commands.\r
-                               __WFI();\r
+                               // quickly to any SCSI commands. The selection abort time is\r
+                               // only 250us, and new SCSI-3 controllers time-out very\r
+                               // not long after that, so we need to ensure we wake up quickly.\r
+                               uint8_t interruptState = CyEnterCriticalSection();\r
+                               if (!SCSI_ReadFilt(SCSI_Filt_SEL))\r
+                               {\r
+                                       __WFI(); // Will wake on interrupt, regardless of mask\r
+                               }\r
+                               CyExitCriticalSection(interruptState);\r
                        }\r
                }\r
+               else if (scsiDev.phase >= 0)\r
+               {\r
+                       // don't waste time scanning SD cards while we're doing disk IO\r
+                       lastSDPoll = getTime_ms();\r
+               }\r
        }\r
        return 0;\r
 }\r
index 48b4c6d..79d1e73 100755 (executable)
@@ -213,7 +213,7 @@ static void process_DataOut()
                scsiDev.dataPtr += len;\r
 \r
                if (scsiDev.parityError &&\r
-                       (scsiDev.target->cfg->flags & CONFIG_ENABLE_PARITY) &&\r
+                       (scsiDev.boardCfg.flags & CONFIG_ENABLE_PARITY) &&\r
                        (scsiDev.compatMode >= COMPAT_SCSI2))\r
                {\r
                        scsiDev.target->sense.code = ABORTED_COMMAND;\r
@@ -274,7 +274,7 @@ static void process_Command()
                return;\r
        }\r
        else if (scsiDev.parityError &&\r
-               (cfg->flags & CONFIG_ENABLE_PARITY) &&\r
+               (scsiDev.boardCfg.flags & CONFIG_ENABLE_PARITY) &&\r
                (scsiDev.compatMode >= COMPAT_SCSI2))\r
        {\r
                scsiDev.target->sense.code = ABORTED_COMMAND;\r
@@ -327,7 +327,7 @@ static void process_Command()
        // on receiving the unit attention response on boot, thus\r
        // triggering another unit attention condition.\r
        else if (scsiDev.target->unitAttention &&\r
-               (cfg->flags & CONFIG_ENABLE_UNIT_ATTENTION))\r
+               (scsiDev.boardCfg.flags & CONFIG_ENABLE_UNIT_ATTENTION))\r
        {\r
                scsiDev.target->sense.code = UNIT_ATTENTION;\r
                scsiDev.target->sense.asc = scsiDev.target->unitAttention;\r
@@ -520,14 +520,26 @@ static void enter_SelectionPhase()
 \r
 static void process_SelectionPhase()\r
 {\r
-       if (scsiDev.compatMode < COMPAT_SCSI2)\r
+       // Selection delays.\r
+       // Many SCSI1 samplers that use a 5380 chip need a delay of at least 1ms.\r
+       // The Mac Plus boot-time (ie. rom code) selection abort time\r
+       // is < 1ms and must have no delay (standard suggests 250ms abort time)\r
+       // Most newer SCSI2 hosts don't care either way.\r
+       if (scsiDev.boardCfg.selectionDelay == 255) // auto\r
+       {\r
+               if (scsiDev.compatMode < COMPAT_SCSI2)\r
+               {\r
+                       CyDelay(1);\r
+               }\r
+       }\r
+       else if (scsiDev.boardCfg.selectionDelay != 0)\r
        {\r
-               // Required for some older SCSI1 devices using a 5380 chip.\r
-               CyDelay(1);\r
+               CyDelay(scsiDev.boardCfg.selectionDelay);\r
        }\r
 \r
        int sel = SCSI_ReadFilt(SCSI_Filt_SEL);\r
        int bsy = SCSI_ReadFilt(SCSI_Filt_BSY);\r
+       int io = SCSI_ReadPin(SCSI_In_IO);\r
 \r
        // Only read these pins AFTER SEL and BSY - we don't want to catch them\r
        // during a transition period.\r
@@ -546,11 +558,23 @@ static void process_SelectionPhase()
                        break;\r
                }\r
        }\r
-       if (!bsy && sel &&\r
+       sel &= SCSI_ReadFilt(SCSI_Filt_SEL);\r
+       bsy |= SCSI_ReadFilt(SCSI_Filt_BSY);\r
+       io |= SCSI_ReadPin(SCSI_In_IO);\r
+       if (!bsy && !io && sel &&\r
                target &&\r
-               (goodParity || !(target->cfg->flags & CONFIG_ENABLE_PARITY) || !atnFlag) &&\r
+               (goodParity || !(scsiDev.boardCfg.flags & CONFIG_ENABLE_PARITY) || !atnFlag) &&\r
                likely(maskBitCount <= 2))\r
        {\r
+               // We've been selected!\r
+               // Assert BSY - Selection success!\r
+               // must happen within 200us (Selection abort time) of seeing our\r
+               // ID + SEL.\r
+               // (Note: the initiator will be waiting the "Selection time-out delay"\r
+               // for our BSY response, which is actually a very generous 250ms)\r
+               SCSI_SetPin(SCSI_Out_BSY);\r
+               ledOn();\r
+\r
                scsiDev.target = target;\r
 \r
                // Do we enter MESSAGE OUT immediately ? SCSI 1 and 2 standards says\r
@@ -558,6 +582,7 @@ static void process_SelectionPhase()
                // The initiator should assert ATN with SEL.\r
                scsiDev.atnFlag = atnFlag;\r
 \r
+\r
                // Unit attention breaks many older SCSI hosts. Disable it completely\r
                // for SCSI-1 (and older) hosts, regardless of our configured setting.\r
                // Enable the compatability mode also as many SASI and SCSI1\r
@@ -567,7 +592,7 @@ static void process_SelectionPhase()
                        target->unitAttention = 0;\r
                        scsiDev.compatMode = COMPAT_SCSI1;\r
                }\r
-               else if (!(target->cfg->flags & CONFIG_ENABLE_SCSI2))\r
+               else if (!(scsiDev.boardCfg.flags & CONFIG_ENABLE_SCSI2))\r
                {\r
                        scsiDev.compatMode = COMPAT_SCSI1;\r
                }\r
@@ -576,25 +601,8 @@ static void process_SelectionPhase()
                        scsiDev.compatMode = COMPAT_SCSI2;\r
                }\r
 \r
-               // We've been selected!\r
-               // Assert BSY - Selection success!\r
-               // must happen within 200us (Selection abort time) of seeing our\r
-               // ID + SEL.\r
-               // (Note: the initiator will be waiting the "Selection time-out delay"\r
-               // for our BSY response, which is actually a very generous 250ms)\r
-               SCSI_SetPin(SCSI_Out_BSY);\r
-               ledOn();\r
-\r
                scsiDev.selCount++;\r
 \r
-               // Wait until the end of the selection phase.\r
-               while (likely(!scsiDev.resetFlag))\r
-               {\r
-                       if (!SCSI_ReadFilt(SCSI_Filt_SEL))\r
-                       {\r
-                               break;\r
-                       }\r
-               }\r
 \r
                // Save our initiator now that we're no longer in a time-critical\r
                // section.\r
@@ -613,6 +621,15 @@ static void process_SelectionPhase()
                        }\r
                }\r
 \r
+               // Wait until the end of the selection phase.\r
+               while (likely(!scsiDev.resetFlag))\r
+               {\r
+                       if (!SCSI_ReadFilt(SCSI_Filt_SEL))\r
+                       {\r
+                               break;\r
+                       }\r
+               }\r
+\r
                scsiDev.phase = COMMAND;\r
        }\r
        else if (!sel)\r
@@ -631,7 +648,7 @@ static void process_MessageOut()
        scsiDev.msgCount++;\r
 \r
        if (scsiDev.parityError &&\r
-               (scsiDev.target->cfg->flags & CONFIG_ENABLE_PARITY) &&\r
+               (scsiDev.boardCfg.flags & CONFIG_ENABLE_PARITY) &&\r
                (scsiDev.compatMode >= COMPAT_SCSI2))\r
        {\r
                // Skip the remaining message bytes, and then start the MESSAGE_OUT\r
@@ -720,6 +737,12 @@ static void process_MessageOut()
        {\r
                // Two byte message. We don't support these. read and discard.\r
                scsiReadByte();\r
+\r
+               if (scsiDev.msgOut == 0x23) {\r
+                       // Ignore Wide Residue. We're only 8 bit anyway.\r
+               } else {\r
+                       messageReject();\r
+               }\r
        }\r
        else if (scsiDev.msgOut == 0x01)\r
        {\r
index adb61c8..11fd676 100755 (executable)
@@ -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;
index da86b2b..b3b466f 100755 (executable)
@@ -75,7 +75,7 @@ CY_ISR(scsiSelectionISR)
 {\r
        // The SEL signal ISR ensures we wake up from a _WFI() (wait-for-interrupt)\r
        // call in the main loop without waiting for our 1ms timer to\r
-       // expire. This is done for performance reasons only.\r
+       // expire. This is done to meet the 250us selection abort time.\r
 }\r
 \r
 uint8_t\r
@@ -104,9 +104,6 @@ scsiReadByte(void)
        uint8_t val = scsiPhyRx();\r
        scsiDev.parityError = scsiDev.parityError || SCSI_Parity_Error_Read();\r
 \r
-       trace(trace_spinTxComplete);\r
-       while (!(scsiPhyStatus() & SCSI_PHY_TX_COMPLETE) && likely(!scsiDev.resetFlag)) {}\r
-\r
        return val;\r
 }\r
 \r
@@ -132,7 +129,6 @@ scsiReadPIO(uint8* data, uint32 count)
                }\r
        }\r
        scsiDev.parityError = scsiDev.parityError || SCSI_Parity_Error_Read();\r
-       while (!(scsiPhyStatus() & SCSI_PHY_TX_COMPLETE) && likely(!scsiDev.resetFlag)) {}\r
 }\r
 \r
 static void\r
@@ -199,11 +195,6 @@ scsiReadDMAPoll()
 {\r
        if (scsiTxDMAComplete && scsiRxDMAComplete)\r
        {\r
-               // Wait until our scsi signals are consistent. This should only be\r
-               // a few cycles.\r
-               trace(trace_spinTxComplete);\r
-               while (!(scsiPhyStatus() & SCSI_PHY_TX_COMPLETE)) {}\r
-\r
                if (likely(dmaSentCount == dmaTotalCount))\r
                {\r
                        dmaInProgress = 0;\r
@@ -266,7 +257,7 @@ scsiWriteByte(uint8 value)
 \r
        trace(trace_spinTxComplete);\r
        while (!(scsiPhyStatus() & SCSI_PHY_TX_COMPLETE) && likely(!scsiDev.resetFlag)) {}\r
-       scsiPhyRxFifoClear();\r
+       scsiPhyRx();\r
 }\r
 \r
 static void\r
@@ -386,7 +377,7 @@ scsiWrite(const uint8_t* data, uint32_t count)
                {\r
                        __WFI();\r
                };\r
-               \r
+\r
                if (count > alignedCount)\r
                {\r
                        scsiWritePIO(data + alignedCount, count - alignedCount);\r
@@ -403,6 +394,12 @@ static inline void busSettleDelay(void)
 \r
 void scsiEnterPhase(int phase)\r
 {\r
+       // ANSI INCITS 362-2002 SPI-3 10.7.1:\r
+       // Phase changes are not allowed while REQ or ACK is asserted.\r
+       while (likely(!scsiDev.resetFlag) &&\r
+               (SCSI_ReadPin(SCSI_In_REQ) || SCSI_ReadFilt(SCSI_Filt_ACK))\r
+               ) {}\r
+\r
        int newPhase = phase > 0 ? phase : 0;\r
        if (newPhase != SCSI_CTL_PHASE_Read())\r
        {\r
@@ -427,7 +424,7 @@ void scsiPhyReset()
                dmaTotalCount = 0;\r
                CyDmaChSetRequest(scsiDmaTxChan, CY_DMA_CPU_TERM_CHAIN);\r
                CyDmaChSetRequest(scsiDmaRxChan, CY_DMA_CPU_TERM_CHAIN);\r
-               \r
+\r
                // CyDmaChGetRequest returns 0 for the relevant bit once the\r
                // request is completed.\r
                trace(trace_spinDMAReset);\r
@@ -484,7 +481,7 @@ static void scsiPhyInitDMA()
                                HI16(CYDEV_SRAM_BASE),\r
                                HI16(CYDEV_PERIPH_BASE)\r
                                );\r
-               \r
+\r
                CyDmaChDisable(scsiDmaRxChan);\r
                CyDmaChDisable(scsiDmaTxChan);\r
 \r
@@ -506,7 +503,7 @@ void scsiPhyInit()
        SCSI_SEL_ISR_StartEx(scsiSelectionISR);\r
 \r
        // Disable the glitch filter for ACK to improve performance.\r
-       if (getConfigByIndex(0)->flags & CONFIG_DISABLE_GLITCH)\r
+       if (scsiDev.boardCfg.flags & CONFIG_DISABLE_GLITCH)\r
        {\r
                SCSI_Glitch_Ctl_Write(1);\r
                CY_SET_REG8(scsiTarget_datapath__D0_REG, 0);\r
index e11e8b6..bf1adc2 100755 (executable)
 // Global\r
 SdDevice sdDev;\r
 \r
-enum SD_IO_STATE { SD_DMA, SD_ACCEPTED, SD_BUSY, SD_IDLE };\r
+enum SD_CMD_STATE { CMD_STATE_IDLE, CMD_STATE_READ, CMD_STATE_WRITE };\r
+static int sdCmdState = CMD_STATE_IDLE;\r
+static uint32_t sdCmdNextLBA; // Only valid in CMD_STATE_READ or CMD_STATE_WRITE\r
+static uint32_t sdCmdTime;\r
+static uint32_t sdLastCmdState = CMD_STATE_IDLE;\r
+\r
+enum SD_IO_STATE { SD_DMA, SD_ACCEPTED, SD_IDLE };\r
 static int sdIOState = SD_IDLE;\r
 \r
 // Private DMA variables.\r
@@ -85,6 +91,7 @@ static uint8 sdCrc7(uint8* chr, uint8 cnt, uint8 crc)
        return crc & 0x7F;\r
 }\r
 \r
+\r
 // Read and write 1 byte.\r
 static uint8_t sdSpiByte(uint8_t value)\r
 {\r
@@ -95,6 +102,34 @@ static uint8_t sdSpiByte(uint8_t value)
        return SDCard_ReadRxData();\r
 }\r
 \r
+static void sdWaitWriteBusy()\r
+{\r
+       uint8 val;\r
+       do\r
+       {\r
+               val = sdSpiByte(0xFF);\r
+       } while (val != 0xFF);\r
+}\r
+\r
+static void sdPreCmdState(uint32_t newState)\r
+{\r
+       if (sdCmdState == CMD_STATE_READ)\r
+       {\r
+               sdCompleteRead();\r
+       }\r
+       else if (sdCmdState == CMD_STATE_WRITE)\r
+       {\r
+               sdCompleteWrite();\r
+       }\r
+       sdCmdState = CMD_STATE_IDLE;\r
+\r
+       if (sdLastCmdState != newState && newState != CMD_STATE_IDLE)\r
+       {\r
+               sdWaitWriteBusy();\r
+               sdLastCmdState = newState;\r
+       }\r
+}\r
+\r
 static uint16_t sdDoCommand(\r
        uint8_t cmd,\r
        uint32_t param,\r
@@ -172,7 +207,17 @@ static uint16_t sdDoCommand(
        CyDmaChEnable(sdDMATxChan, 1);\r
 \r
        trace(trace_spinSDDMA);\r
-       while (!(sdTxDMAComplete && sdRxDMAComplete)) { __WFI(); }\r
+       int allComplete = 0;\r
+       while (!allComplete)\r
+       {\r
+               uint8_t intr = CyEnterCriticalSection();\r
+               allComplete = sdTxDMAComplete && sdRxDMAComplete;\r
+               if (!allComplete)\r
+               {\r
+                       __WFI();\r
+               }\r
+               CyExitCriticalSection(intr);\r
+       }\r
 \r
        uint16_t response = sdSpiByte(0xFF); // Result code or stuff byte\r
        if (unlikely(cmd == SD_STOP_TRANSMISSION))\r
@@ -218,34 +263,43 @@ static void sdClearStatus()
 }\r
 \r
 void\r
-sdReadMultiSectorPrep()\r
+sdReadMultiSectorPrep(uint32_t sdLBA, uint32_t sdSectors)\r
 {\r
-       uint8 v;\r
-       uint32 scsiLBA = (transfer.lba + transfer.currentBlock);\r
-       uint32 sdLBA =\r
-               SCSISector2SD(\r
-                       scsiDev.target->cfg->sdSectorStart,\r
-                       scsiDev.target->liveCfg.bytesPerSector,\r
-                       scsiLBA);\r
+       uint32_t tmpNextLBA = sdLBA + sdSectors;\r
 \r
        if (!sdDev.ccs)\r
        {\r
                sdLBA = sdLBA * SD_SECTOR_SIZE;\r
+               tmpNextLBA = tmpNextLBA * SD_SECTOR_SIZE;\r
        }\r
-       v = sdCommandAndResponse(SD_READ_MULTIPLE_BLOCK, sdLBA);\r
-       if (unlikely(v))\r
-       {\r
-               scsiDiskReset();\r
-               sdClearStatus();\r
 \r
-               scsiDev.status = CHECK_CONDITION;\r
-               scsiDev.target->sense.code = HARDWARE_ERROR;\r
-               scsiDev.target->sense.asc = LOGICAL_UNIT_COMMUNICATION_FAILURE;\r
-               scsiDev.phase = STATUS;\r
+       if (sdCmdState == CMD_STATE_READ && sdCmdNextLBA == sdLBA)\r
+       {\r
+               // Well, that was lucky. We're already reading this data\r
+               sdCmdNextLBA = tmpNextLBA;\r
+               sdCmdTime = getTime_ms();\r
        }\r
        else\r
        {\r
-               transfer.inProgress = 1;\r
+               sdPreCmdState(CMD_STATE_READ);\r
+\r
+               uint8_t v = sdCommandAndResponse(SD_READ_MULTIPLE_BLOCK, sdLBA);\r
+               if (unlikely(v))\r
+               {\r
+                       scsiDiskReset();\r
+                       sdClearStatus();\r
+\r
+                       scsiDev.status = CHECK_CONDITION;\r
+                       scsiDev.target->sense.code = HARDWARE_ERROR;\r
+                       scsiDev.target->sense.asc = LOGICAL_UNIT_COMMUNICATION_FAILURE;\r
+                       scsiDev.phase = STATUS;\r
+               }\r
+               else\r
+               {\r
+                       sdCmdNextLBA = tmpNextLBA;\r
+                       sdCmdState = CMD_STATE_READ;\r
+                       sdCmdTime = getTime_ms();\r
+               }\r
        }\r
 }\r
 \r
@@ -290,12 +344,12 @@ dmaReadSector(uint8_t* outputBuffer)
                dmaRxTd[0] = CyDmaTdAllocate();\r
                dmaRxTd[1] = CyDmaTdAllocate();\r
                dmaTxTd = CyDmaTdAllocate();\r
-               \r
+\r
                // Receive 512 bytes of data and then 2 bytes CRC.\r
                CyDmaTdSetConfiguration(dmaRxTd[0], SD_SECTOR_SIZE, dmaRxTd[1], TD_INC_DST_ADR);\r
                CyDmaTdSetConfiguration(dmaRxTd[1], 2, CY_DMA_DISABLE_TD, SD_RX_DMA__TD_TERMOUT_EN);\r
                CyDmaTdSetAddress(dmaRxTd[1], LO16((uint32)SDCard_RXDATA_PTR), LO16((uint32)&discardBuffer));\r
-       \r
+\r
                CyDmaTdSetConfiguration(dmaTxTd, SD_SECTOR_SIZE + 2, CY_DMA_DISABLE_TD, SD_TX_DMA__TD_TERMOUT_EN);\r
                CyDmaTdSetAddress(dmaTxTd, LO16((uint32)&dummyBuffer), LO16((uint32)SDCard_TXDATA_PTR));\r
 \r
@@ -341,6 +395,8 @@ sdReadSectorDMAPoll()
 \r
 void sdReadSingleSectorDMA(uint32_t lba, uint8_t* outputBuffer)\r
 {\r
+       sdPreCmdState(CMD_STATE_READ);\r
+\r
        uint8 v;\r
        if (!sdDev.ccs)\r
        {\r
@@ -370,7 +426,6 @@ sdReadMultiSectorDMA(uint8_t* outputBuffer)
        dmaReadSector(outputBuffer);\r
 }\r
 \r
-\r
 void sdCompleteRead()\r
 {\r
        if (unlikely(sdIOState != SD_IDLE))\r
@@ -381,13 +436,13 @@ void sdCompleteRead()
                trace(trace_spinSDCompleteRead);\r
                while (!sdReadSectorDMAPoll()) { /* spin */ }\r
        }\r
-       \r
-       if (transfer.inProgress)\r
+\r
+\r
+       if (sdCmdState == CMD_STATE_READ)\r
        {\r
-               transfer.inProgress = 0;\r
                uint8 r1b = sdCommandAndResponse(SD_STOP_TRANSMISSION, 0);\r
 \r
-               if (unlikely(r1b))\r
+               if (unlikely(r1b) && (scsiDev.PHASE == DATA_IN))\r
                {\r
                        scsiDev.status = CHECK_CONDITION;\r
                        scsiDev.target->sense.code = HARDWARE_ERROR;\r
@@ -399,15 +454,8 @@ void sdCompleteRead()
        // R1b has an optional trailing "busy" signal, but we defer waiting on this.\r
        // The next call so sdCommandAndResponse will wait for the busy state to\r
        // clear.\r
-}\r
 \r
-static void sdWaitWriteBusy()\r
-{\r
-       uint8 val;\r
-       do\r
-       {\r
-               val = sdSpiByte(0xFF);\r
-       } while (val != 0xFF);\r
+       sdCmdState = CMD_STATE_IDLE;\r
 }\r
 \r
 void\r
@@ -422,7 +470,7 @@ sdWriteMultiSectorDMA(uint8_t* outputBuffer)
                dmaTxTd[0] = CyDmaTdAllocate();\r
                dmaTxTd[1] = CyDmaTdAllocate();\r
                dmaTxTd[2] = CyDmaTdAllocate();\r
-               \r
+\r
                // Transmit 512 bytes of data and then 2 bytes CRC, and then get the response byte\r
                // We need to do this without stopping the clock\r
                CyDmaTdSetConfiguration(dmaTxTd[0], 2, dmaTxTd[1], TD_INC_SRC_ADR);\r
@@ -464,7 +512,7 @@ sdWriteMultiSectorDMA(uint8_t* outputBuffer)
 }\r
 \r
 int\r
-sdWriteSectorDMAPoll(int sendStopToken)\r
+sdWriteSectorDMAPoll()\r
 {\r
        if (sdRxDMAComplete && sdTxDMAComplete)\r
        {\r
@@ -490,7 +538,7 @@ sdWriteSectorDMAPoll(int sendStopToken)
                                sdSpiByte(0xFD); // STOP TOKEN\r
                                sdWaitWriteBusy();\r
 \r
-                               transfer.inProgress = 0;\r
+                               sdCmdState = CMD_STATE_IDLE;\r
                                scsiDiskReset();\r
                                sdClearStatus();\r
 \r
@@ -506,25 +554,6 @@ sdWriteSectorDMAPoll(int sendStopToken)
                }\r
 \r
                if (sdIOState == SD_ACCEPTED)\r
-               {\r
-                       // Wait while the SD card is busy\r
-                       if (sdSpiByte(0xFF) == 0xFF)\r
-                       {\r
-                               if (sendStopToken)\r
-                               {\r
-                                       sdIOState = SD_BUSY;\r
-                                       transfer.inProgress = 0;\r
-\r
-                                       sdSpiByte(0xFD); // STOP TOKEN\r
-                               }\r
-                               else\r
-                               {\r
-                                       sdIOState = SD_IDLE;\r
-                               }\r
-                       }\r
-               }\r
-\r
-               if (sdIOState == SD_BUSY)\r
                {\r
                        // Wait while the SD card is busy\r
                        if (sdSpiByte(0xFF) == 0xFF)\r
@@ -549,10 +578,20 @@ void sdCompleteWrite()
                // Cancelling the transfer can't be done as we have no way to reset\r
                // the SD card.\r
                trace(trace_spinSDCompleteWrite);\r
-               while (!sdWriteSectorDMAPoll(1)) { /* spin */ }\r
+               while (!sdWriteSectorDMAPoll()) { /* spin */ }\r
        }\r
 \r
-       if (transfer.inProgress && likely(scsiDev.phase == DATA_OUT))\r
+       if (sdCmdState == CMD_STATE_WRITE)\r
+       {\r
+               sdWaitWriteBusy();\r
+\r
+               sdSpiByte(0xFD); // STOP TOKEN\r
+\r
+               sdWaitWriteBusy();\r
+       }\r
+\r
+\r
+       if (likely(scsiDev.phase == DATA_OUT))\r
        {\r
                uint16_t r2 = sdDoCommand(SD_SEND_STATUS, 0, 0, 1);\r
                if (unlikely(r2))\r
@@ -564,7 +603,12 @@ void sdCompleteWrite()
                        scsiDev.phase = STATUS;\r
                }\r
        }\r
-       transfer.inProgress = 0;\r
+       sdCmdState = CMD_STATE_IDLE;\r
+}\r
+\r
+void sdCompleteTransfer()\r
+{\r
+       sdPreCmdState(CMD_STATE_IDLE);\r
 }\r
 \r
 \r
@@ -763,6 +807,7 @@ int sdInit()
        int i;\r
        uint8 v;\r
 \r
+       sdCmdState = CMD_STATE_IDLE;\r
        sdDev.version = 0;\r
        sdDev.ccs = 0;\r
        sdDev.capacity = 0;\r
@@ -845,52 +890,68 @@ out:
 \r
 }\r
 \r
-void sdWriteMultiSectorPrep()\r
+void sdWriteMultiSectorPrep(uint32_t sdLBA, uint32_t sdSectors)\r
 {\r
-       uint8 v;\r
+       uint32_t tmpNextLBA = sdLBA + sdSectors;\r
 \r
-       // Set the number of blocks to pre-erase by the multiple block write command\r
-       // We don't care about the response - if the command is not accepted, writes\r
-       // will just be a bit slower.\r
-       // Max 22bit parameter.\r
-       uint32_t sdBlocks =\r
-               transfer.blocks *\r
-                       SDSectorsPerSCSISector(scsiDev.target->liveCfg.bytesPerSector);\r
-       uint32 blocks = sdBlocks > 0x7FFFFF ? 0x7FFFFF : sdBlocks;\r
-       sdCommandAndResponse(SD_APP_CMD, 0);\r
-       sdCommandAndResponse(SD_APP_SET_WR_BLK_ERASE_COUNT, blocks);\r
-\r
-       uint32 scsiLBA = (transfer.lba + transfer.currentBlock);\r
-       uint32 sdLBA =\r
-               SCSISector2SD(\r
-                       scsiDev.target->cfg->sdSectorStart,\r
-                       scsiDev.target->liveCfg.bytesPerSector,\r
-                       scsiLBA);\r
        if (!sdDev.ccs)\r
        {\r
                sdLBA = sdLBA * SD_SECTOR_SIZE;\r
+               tmpNextLBA = tmpNextLBA * SD_SECTOR_SIZE;\r
        }\r
-       v = sdCommandAndResponse(SD_WRITE_MULTIPLE_BLOCK, sdLBA);\r
-       if (unlikely(v))\r
+\r
+       if (sdCmdState == CMD_STATE_WRITE && sdCmdNextLBA == sdLBA)\r
        {\r
-               scsiDiskReset();\r
-               sdClearStatus();\r
-               scsiDev.status = CHECK_CONDITION;\r
-               scsiDev.target->sense.code = HARDWARE_ERROR;\r
-               scsiDev.target->sense.asc = LOGICAL_UNIT_COMMUNICATION_FAILURE;\r
-               scsiDev.phase = STATUS;\r
+               // Well, that was lucky. We're already writing this data\r
+               sdCmdNextLBA = tmpNextLBA;\r
+               sdCmdTime = getTime_ms();\r
        }\r
        else\r
        {\r
-               transfer.inProgress = 1;\r
+               sdPreCmdState(CMD_STATE_WRITE);\r
+\r
+               // Set the number of blocks to pre-erase by the multiple block write\r
+               // command. We don't care about the response - if the command is not\r
+               // accepted, writes will just be a bit slower. Max 22bit parameter.\r
+               uint32 blocks = sdSectors > 0x7FFFFF ? 0x7FFFFF : sdSectors;\r
+               sdCommandAndResponse(SD_APP_CMD, 0);\r
+               sdCommandAndResponse(SD_APP_SET_WR_BLK_ERASE_COUNT, blocks);\r
+\r
+               uint8_t v = sdCommandAndResponse(SD_WRITE_MULTIPLE_BLOCK, sdLBA);\r
+               if (unlikely(v))\r
+               {\r
+                       scsiDiskReset();\r
+                       sdClearStatus();\r
+                       scsiDev.status = CHECK_CONDITION;\r
+                       scsiDev.target->sense.code = HARDWARE_ERROR;\r
+                       scsiDev.target->sense.asc = LOGICAL_UNIT_COMMUNICATION_FAILURE;\r
+                       scsiDev.phase = STATUS;\r
+               }\r
+               else\r
+               {\r
+                       sdCmdTime = getTime_ms();\r
+                       sdCmdNextLBA = tmpNextLBA;\r
+                       sdCmdState = CMD_STATE_WRITE;\r
+               }\r
        }\r
 }\r
 \r
 void sdPoll()\r
+{\r
+       if ((scsiDev.phase == BUS_FREE) &&\r
+               (sdCmdState != CMD_STATE_IDLE) &&\r
+               (elapsedTime_ms(sdCmdTime) >= 50))\r
+       {\r
+               sdPreCmdState(CMD_STATE_IDLE);\r
+       }\r
+}\r
+\r
+void sdCheckPresent()\r
 {\r
        // Check if there's an SD card present.\r
        if ((scsiDev.phase == BUS_FREE) &&\r
-               (sdIOState == SD_IDLE))\r
+               (sdIOState == SD_IDLE) &&\r
+               (sdCmdState == CMD_STATE_IDLE))\r
        {\r
                // The CS line is pulled high by the SD card.\r
                // De-assert the line, and check if it's high.\r
@@ -916,6 +977,13 @@ void sdPoll()
                        {\r
                                blockDev.state |= DISK_PRESENT | DISK_INITIALISED;\r
 \r
+                               // Always "start" the device. Many systems (eg. Apple System 7)\r
+                               // won't respond properly to\r
+                               // LOGICAL_UNIT_NOT_READY_INITIALIZING_COMMAND_REQUIRED sense\r
+                               // code, even if they stopped it first with\r
+                               // START STOP UNIT command.\r
+                               blockDev.state |= DISK_STARTED;\r
+\r
                                if (!firstInit)\r
                                {\r
                                        int i;\r
index 3b4a11d..8ffcee7 100755 (executable)
@@ -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
old mode 100644 (file)
new mode 100755 (executable)
index 643241b..1aa4eb9
@@ -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;
index 00d44d4..9582916 100755 (executable)
@@ -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
index d5def20..8e9bbe0 100755 (executable)
@@ -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` */
 
index b07d7cf..fb8e582 100755 (executable)
@@ -20,6 +20,7 @@
 #include <CyLib.h>\r
 #include <SCSI_RST_ISR.h>\r
 \r
+\r
 #if !defined(SCSI_RST_ISR__REMOVED) /* Check for removal by optimization */\r
 \r
 /*******************************************************************************\r
@@ -158,6 +159,10 @@ void SCSI_RST_ISR_Stop(void)
 *******************************************************************************/\r
 CY_ISR(SCSI_RST_ISR_Interrupt)\r
 {\r
+    #ifdef SCSI_RST_ISR_INTERRUPT_INTERRUPT_CALLBACK\r
+        SCSI_RST_ISR_Interrupt_InterruptCallback();\r
+    #endif /* SCSI_RST_ISR_INTERRUPT_INTERRUPT_CALLBACK */ \r
+\r
     /*  Place your Interrupt code here. */\r
     /* `#START SCSI_RST_ISR_Interrupt` */\r
 \r
index 5553fba..b2633aa 100755 (executable)
@@ -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` */
 
index ffe9fd5..e274d74 100755 (executable)
@@ -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` */
 
index cdb5ec5..20517cc 100755 (executable)
@@ -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` */
 
index b15cfe8..94260ef 100755 (executable)
@@ -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` */
 
index 383a758..7203eb8 100755 (executable)
@@ -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` */
 
old mode 100644 (file)
new mode 100755 (executable)
index 2cd1304..58fa966
@@ -17,6 +17,7 @@
 \r
 #include "USBFS.h"\r
 \r
+\r
 #if defined(USBFS_ENABLE_AUDIO_CLASS)\r
 \r
 #include "USBFS_audio.h"\r
@@ -124,6 +125,11 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
                 /* `#START AUDIO_READ_REQUESTS` Place other request handler here */\r
 \r
                 /* `#END` */\r
+                \r
+                #ifdef USBFS_DISPATCH_AUDIO_CLASS_AUDIO_READ_REQUESTS_CALLBACK\r
+                    USBFS_DispatchAUDIOClass_AUDIO_READ_REQUESTS_Callback();\r
+                #endif /* USBFS_DISPATCH_AUDIO_CLASS_AUDIO_READ_REQUESTS_CALLBACK */\r
+\r
                     break;\r
                 default:\r
                     break;\r
@@ -142,7 +148,11 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
 \r
                         /* `#END` */\r
 \r
-                         /* Entity ID Control Selector is MUTE */\r
+                        #ifdef USBFS_DISPATCH_AUDIO_CLASS_MUTE_CONTROL_GET_REQUEST_CALLBACK\r
+                            USBFS_DispatchAUDIOClass_MUTE_CONTROL_GET_REQUEST_Callback();\r
+                        #endif /* USBFS_DISPATCH_AUDIO_CLASS_MUTE_CONTROL_GET_REQUEST_CALLBACK */\r
+\r
+                        /* Entity ID Control Selector is MUTE */\r
                         USBFS_currentTD.wCount = 1u;\r
                         USBFS_currentTD.pData  = &USBFS_currentMute;\r
                         requestHandled   = USBFS_InitControlRead();\r
@@ -153,6 +163,10 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
 \r
                         /* `#END` */\r
 \r
+                        #ifdef USBFS_DISPATCH_AUDIO_CLASS_VOLUME_CONTROL_GET_REQUEST_CALLBACK\r
+                            USBFS_DispatchAUDIOClass_VOLUME_CONTROL_GET_REQUEST_Callback();\r
+                        #endif /* USBFS_DISPATCH_AUDIO_CLASS_VOLUME_CONTROL_GET_REQUEST_CALLBACK */\r
+\r
                         /* Entity ID Control Selector is VOLUME, */\r
                         USBFS_currentTD.wCount = USBFS_VOLUME_LEN;\r
                         USBFS_currentTD.pData  = USBFS_currentVolume;\r
@@ -163,6 +177,10 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
                         /* `#START OTHER_GET_CUR_REQUESTS` Place other request handler here */\r
 \r
                         /* `#END` */\r
+\r
+                        #ifdef USBFS_DISPATCH_AUDIO_CLASS_OTHER_GET_CUR_REQUESTS_CALLBACK\r
+                            USBFS_DispatchAUDIOClass_OTHER_GET_CUR_REQUESTS_Callback();\r
+                        #endif /* USBFS_DISPATCH_AUDIO_CLASS_OTHER_GET_CUR_REQUESTS_CALLBACK */\r
                     }\r
                     break;\r
                 case USBFS_GET_MIN:    /* GET_MIN */\r
@@ -205,6 +223,11 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
                 /* `#START AUDIO_WRITE_REQUESTS` Place other request handler here */\r
 \r
                 /* `#END` */\r
+\r
+                #ifdef USBFS_DISPATCH_AUDIO_CLASS_AUDIO_WRITE_REQUESTS_CALLBACK\r
+                    USBFS_DispatchAUDIOClass_AUDIO_WRITE_REQUESTS_Callback();\r
+                #endif /* USBFS_DISPATCH_AUDIO_CLASS_AUDIO_WRITE_REQUESTS_CALLBACK */\r
+\r
                     break;\r
                 default:\r
                     break;\r
@@ -237,6 +260,11 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
                 /* `#START AUDIO_SAMPLING_FREQ_REQUESTS` Place other request handler here */\r
 \r
                 /* `#END` */\r
+\r
+                #ifdef USBFS_DISPATCH_AUDIO_CLASS_AUDIO_SAMPLING_FREQ_REQUESTS_CALLBACK\r
+                    USBFS_DispatchAUDIOClass_AUDIO_SAMPLING_FREQ_REQUESTS_Callback();\r
+                #endif /* USBFS_DISPATCH_AUDIO_CLASS_AUDIO_SAMPLING_FREQ_REQUESTS_CALLBACK */\r
+\r
                     break;\r
                 default:\r
                     break;\r
@@ -255,6 +283,10 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
 \r
                         /* `#END` */\r
 \r
+                        #ifdef USBFS_DISPATCH_AUDIO_CLASS_MUTE_SET_REQUEST_CALLBACK\r
+                            USBFS_DispatchAUDIOClass_MUTE_SET_REQUEST_Callback();\r
+                        #endif /* USBFS_DISPATCH_AUDIO_CLASS_MUTE_SET_REQUEST_CALLBACK */\r
+\r
                         /* Entity ID Control Selector is MUTE */\r
                         USBFS_currentTD.wCount = 1u;\r
                         USBFS_currentTD.pData  = &USBFS_currentMute;\r
@@ -266,6 +298,10 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
 \r
                         /* `#END` */\r
 \r
+                        #ifdef USBFS_DISPATCH_AUDIO_CLASS_VOLUME_CONTROL_SET_REQUEST_CALLBACK\r
+                            USBFS_DispatchAUDIOClass_VOLUME_CONTROL_SET_REQUEST_Callback();\r
+                        #endif /* USBFS_DISPATCH_AUDIO_CLASS_VOLUME_CONTROL_SET_REQUEST_CALLBACK */\r
+\r
                         /* Entity ID Control Selector is VOLUME */\r
                         USBFS_currentTD.wCount = USBFS_VOLUME_LEN;\r
                         USBFS_currentTD.pData  = USBFS_currentVolume;\r
@@ -276,12 +312,21 @@ uint8 USBFS_DispatchAUDIOClassRqst(void)
                         /* `#START OTHER_SET_CUR_REQUESTS` Place other request handler here */\r
 \r
                         /* `#END` */\r
+\r
+                        #ifdef USBFS_DISPATCH_AUDIO_CLASS_OTHER_SET_CUR_REQUESTS_CALLBACK\r
+                            USBFS_DispatchAUDIOClass_OTHER_SET_CUR_REQUESTS_Callback();\r
+                        #endif /* USBFS_DISPATCH_AUDIO_CLASS_OTHER_SET_CUR_REQUESTS_CALLBACK */\r
                     }\r
                 #endif /*  USBFS_ENABLE_AUDIO_STREAMING */\r
 \r
                 /* `#START AUDIO_CONTROL_SEL_REQUESTS` Place other request handler here */\r
 \r
                 /* `#END` */\r
+\r
+                #ifdef USBFS_DISPATCH_AUDIO_CLASS_AUDIO_CONTROL_SEL_REQUESTS_CALLBACK\r
+                    USBFS_DispatchAUDIOClass_AUDIO_CONTROL_SEL_REQUESTS_Callback();\r
+                #endif /* USBFS_DISPATCH_AUDIO_CLASS_AUDIO_CONTROL_SEL_REQUESTS_CALLBACK */\r
+\r
                     break;\r
                 default:\r
                     break;\r
old mode 100644 (file)
new mode 100755 (executable)
index 63ebf12..7b0bb9b
@@ -23,6 +23,7 @@
 #include "USBFS_pvt.h"\r
 \r
 \r
+\r
 /***************************************\r
 *    CDC Variables\r
 ***************************************/\r
@@ -104,6 +105,10 @@ uint8 USBFS_DispatchCDCClassRqst(void)
 \r
             /* `#END` */\r
 \r
+            #ifdef USBFS_DISPATCH_CDC_CLASS_CDC_READ_REQUESTS_CALLBACK\r
+                USBFS_DispatchCDCClass_CDC_READ_REQUESTS_Callback();\r
+            #endif /* USBFS_DISPATCH_CDC_CLASS_CDC_READ_REQUESTS_CALLBACK */\r
+\r
             default:    /* requestHandled is initialized as FALSE by default */\r
                 break;\r
         }\r
@@ -130,6 +135,10 @@ uint8 USBFS_DispatchCDCClassRqst(void)
 \r
             /* `#END` */\r
 \r
+            #ifdef USBFS_DISPATCH_CDC_CLASS_CDC_WRITE_REQUESTS_CALLBACK\r
+                USBFS_DispatchCDCClass_CDC_WRITE_REQUESTS_Callback();\r
+            #endif /* USBFS_DISPATCH_CDC_CLASS_CDC_WRITE_REQUESTS_CALLBACK */\r
+\r
             default:    /* requestHandled is initialized as FALSE by default */\r
                 break;\r
         }\r
old mode 100644 (file)
new mode 100755 (executable)
index a9801ea..7ce5887
@@ -21,6 +21,7 @@
 #include "USBFS_pvt.h"\r
 \r
 \r
+\r
 /***************************************\r
 * User Implemented Class Driver Declarations.\r
 ***************************************/\r
@@ -89,6 +90,10 @@ uint8 USBFS_DispatchClassRqst(void)
 \r
     /* `#END` */\r
 \r
+    #ifdef USBFS_DISPATCH_CLASS_RQST_CALLBACK\r
+        USBFS_DispatchClassRqst_Callback();\r
+    #endif /* USBFS_DISPATCH_CLASS_RQST_CALLBACK */\r
+\r
     return(requestHandled);\r
 }\r
 \r
old mode 100644 (file)
new mode 100755 (executable)
index 282c938..39820f9
@@ -18,6 +18,7 @@
 #include "USBFS_pvt.h"\r
 \r
 \r
+\r
 /***************************************\r
 * Global data allocation\r
 ***************************************/\r
@@ -68,7 +69,10 @@ CY_ISR(USBFS_EP_0_ISR)
     uint8 bRegTemp;\r
     uint8 modifyReg;\r
 \r
-\r
+    #ifdef USBFS_EP_0_ISR_ENTRY_CALLBACK\r
+        USBFS_EP_0_ISR_EntryCallback();\r
+    #endif /* USBFS_EP_0_ISR_ENTRY_CALLBACK */\r
+    \r
     bRegTemp = CY_GET_REG8(USBFS_EP0_CR_PTR);\r
     if ((bRegTemp & USBFS_MODE_ACKD) != 0u)\r
     {\r
@@ -128,6 +132,9 @@ CY_ISR(USBFS_EP_0_ISR)
             }\r
         }\r
     }\r
+    #ifdef USBFS_EP_0_ISR_EXIT_CALLBACK\r
+        USBFS_EP_0_ISR_ExitCallback();\r
+    #endif /* USBFS_EP_0_ISR_EXIT_CALLBACK */\r
 }\r
 \r
 \r
old mode 100644 (file)
new mode 100755 (executable)
index b3cd8e3..56a4a29
@@ -16,6 +16,7 @@
 \r
 #include "USBFS.h"\r
 #include "USBFS_pvt.h"\r
+\r
 #if (defined(USBFS_ENABLE_MIDI_STREAMING) && (USBFS_ENABLE_MIDI_API != 0u))\r
     #include "USBFS_midi.h"\r
 #endif /* (defined(USBFS_ENABLE_MIDI_STREAMING) && (USBFS_ENABLE_MIDI_API != 0u)) */\r
             uint8 int_en;\r
         #endif /* USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3 */\r
 \r
+        #ifdef USBFS_EP_1_ISR_ENTRY_CALLBACK\r
+            USBFS_EP_1_ISR_EntryCallback();\r
+        #endif /* USBFS_EP_1_ISR_ENTRY_CALLBACK */\r
+\r
         /* `#START EP1_USER_CODE` Place your code here */\r
 \r
         /* `#END` */\r
 \r
         /* `#END` */\r
 \r
+        #ifdef USBFS_EP_1_ISR_EXIT_CALLBACK\r
+            USBFS_EP_1_ISR_ExitCallback();\r
+        #endif /* USBFS_EP_1_ISR_EXIT_CALLBACK */\r
+\r
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \\r
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)\r
             EA = int_en;\r
             uint8 int_en;\r
         #endif /* USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3 */\r
 \r
+        #ifdef USBFS_EP_2_ISR_ENTRY_CALLBACK\r
+            USBFS_EP_2_ISR_EntryCallback();\r
+        #endif /* USBFS_EP_2_ISR_ENTRY_CALLBACK */\r
+\r
         /* `#START EP2_USER_CODE` Place your code here */\r
 \r
         /* `#END` */\r
 \r
         /* `#END` */\r
 \r
+        #ifdef USBFS_EP_2_ISR_EXIT_CALLBACK\r
+            USBFS_EP_2_ISR_ExitCallback();\r
+        #endif /* USBFS_EP_2_ISR_EXIT_CALLBACK */\r
+        \r
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \\r
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)\r
             EA = int_en;\r
             uint8 int_en;\r
         #endif /* USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3 */\r
 \r
+        #ifdef USBFS_EP_3_ISR_ENTRY_CALLBACK\r
+            USBFS_EP_3_ISR_EntryCallback();\r
+        #endif /* USBFS_EP_3_ISR_ENTRY_CALLBACK */\r
+\r
         /* `#START EP3_USER_CODE` Place your code here */\r
 \r
         /* `#END` */\r
 \r
         /* `#END` */\r
 \r
+        #ifdef USBFS_EP_3_ISR_EXIT_CALLBACK\r
+            USBFS_EP_3_ISR_ExitCallback();\r
+        #endif /* USBFS_EP_3_ISR_EXIT_CALLBACK */\r
+\r
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \\r
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)\r
             EA = int_en;\r
             uint8 int_en;\r
         #endif /* CY_PSOC3 & USBFS_ISR_SERVICE_MIDI_OUT  */\r
 \r
+        #ifdef USBFS_EP_4_ISR_ENTRY_CALLBACK\r
+            USBFS_EP_4_ISR_EntryCallback();\r
+        #endif /* USBFS_EP_4_ISR_ENTRY_CALLBACK */\r
+\r
         /* `#START EP4_USER_CODE` Place your code here */\r
 \r
         /* `#END` */\r
 \r
         /* `#END` */\r
 \r
+        #ifdef USBFS_EP_4_ISR_EXIT_CALLBACK\r
+            USBFS_EP_4_ISR_ExitCallback();\r
+        #endif /* USBFS_EP_4_ISR_EXIT_CALLBACK */\r
+\r
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \\r
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)\r
             EA = int_en;\r
             uint8 int_en;\r
         #endif /* CY_PSOC3 & USBFS_ISR_SERVICE_MIDI_OUT  */\r
 \r
+        #ifdef USBFS_EP_5_ISR_ENTRY_CALLBACK\r
+            USBFS_EP_5_ISR_EntryCallback();\r
+        #endif /* USBFS_EP_5_ISR_ENTRY_CALLBACK */\r
+\r
         /* `#START EP5_USER_CODE` Place your code here */\r
 \r
         /* `#END` */\r
 \r
         /* `#END` */\r
 \r
+        #ifdef USBFS_EP_5_ISR_EXIT_CALLBACK\r
+            USBFS_EP_5_ISR_ExitCallback();\r
+        #endif /* USBFS_EP_5_ISR_EXIT_CALLBACK */\r
+\r
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \\r
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)\r
             EA = int_en;\r
             uint8 int_en;\r
         #endif /* CY_PSOC3 & USBFS_ISR_SERVICE_MIDI_OUT  */\r
 \r
+        #ifdef USBFS_EP_6_ISR_ENTRY_CALLBACK\r
+            USBFS_EP_6_ISR_EntryCallback();\r
+        #endif /* USBFS_EP_6_ISR_ENTRY_CALLBACK */\r
+\r
         /* `#START EP6_USER_CODE` Place your code here */\r
 \r
         /* `#END` */\r
 \r
         /* `#END` */\r
 \r
+        #ifdef USBFS_EP_6_ISR_EXIT_CALLBACK\r
+            USBFS_EP_6_ISR_ExitCallback();\r
+        #endif /* USBFS_EP_6_ISR_EXIT_CALLBACK */\r
+\r
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \\r
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)\r
             EA = int_en;\r
             uint8 int_en;\r
         #endif /* CY_PSOC3 & USBFS_ISR_SERVICE_MIDI_OUT  */\r
 \r
+        #ifdef USBFS_EP_7_ISR_ENTRY_CALLBACK\r
+            USBFS_EP_7_ISR_EntryCallback();\r
+        #endif /* USBFS_EP_7_ISR_ENTRY_CALLBACK */\r
+\r
         /* `#START EP7_USER_CODE` Place your code here */\r
 \r
         /* `#END` */\r
 \r
         /* `#END` */\r
 \r
+        #ifdef USBFS_EP_7_ISR_EXIT_CALLBACK\r
+            USBFS_EP_7_ISR_ExitCallback();\r
+        #endif /* USBFS_EP_7_ISR_EXIT_CALLBACK */\r
+\r
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \\r
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)\r
             EA = int_en;\r
             uint8 int_en;\r
         #endif /* CY_PSOC3 & USBFS_ISR_SERVICE_MIDI_OUT  */\r
 \r
+        #ifdef USBFS_EP_8_ISR_ENTRY_CALLBACK\r
+            USBFS_EP_8_ISR_EntryCallback();\r
+        #endif /* USBFS_EP_8_ISR_ENTRY_CALLBACK */\r
+\r
         /* `#START EP8_USER_CODE` Place your code here */\r
 \r
         /* `#END` */\r
 \r
         /* `#END` */\r
 \r
+        #ifdef USBFS_EP_8_ISR_EXIT_CALLBACK\r
+            USBFS_EP_8_ISR_ExitCallback();\r
+        #endif /* USBFS_EP_8_ISR_EXIT_CALLBACK */\r
+\r
         #if (defined(USBFS_ENABLE_MIDI_STREAMING) && !defined(USBFS_MAIN_SERVICE_MIDI_OUT) && \\r
                      USBFS_ISR_SERVICE_MIDI_OUT && CY_PSOC3)\r
             EA = int_en;\r
 *******************************************************************************/\r
 CY_ISR(USBFS_SOF_ISR)\r
 {\r
+    #ifdef USBFS_SOF_ISR_INTERRUPT_CALLBACK\r
+        USBFS_SOF_ISR_InterruptCallback();\r
+    #endif /* USBFS_SOF_ISR_INTERRUPT_CALLBACK */\r
+\r
     /* `#START SOF_USER_CODE` Place your code here */\r
 \r
     /* `#END` */\r
@@ -592,11 +661,19 @@ CY_ISR(USBFS_SOF_ISR)
 *******************************************************************************/\r
 CY_ISR(USBFS_BUS_RESET_ISR)\r
 {\r
+    #ifdef USBFS_BUS_RESET_ISR_ENTRY_CALLBACK\r
+        USBFS_BUS_RESET_ISR_EntryCallback();\r
+    #endif /* USBFS_BUS_RESET_ISR_ENTRY_CALLBACK */\r
+\r
     /* `#START BUS_RESET_USER_CODE` Place your code here */\r
 \r
     /* `#END` */\r
 \r
     USBFS_ReInitComponent();\r
+\r
+    #ifdef USBFS_BUS_RESET_ISR_EXIT_CALLBACK\r
+        USBFS_BUS_RESET_ISR_ExitCallback();\r
+    #endif /* USBFS_BUS_RESET_ISR_EXIT_CALLBACK */    \r
 }\r
 \r
 \r
@@ -627,6 +704,10 @@ CY_ISR(USBFS_BUS_RESET_ISR)
         uint8 ep = USBFS_EP1;\r
         uint8 ptr = 0u;\r
 \r
+        #ifdef USBFS_ARB_ISR_ENTRY_CALLBACK\r
+            USBFS_ARB_ISR_EntryCallback();\r
+        #endif /* USBFS_ARB_ISR_ENTRY_CALLBACK */\r
+\r
         /* `#START ARB_BEGIN_USER_CODE` Place your code here */\r
 \r
         /* `#END` */\r
@@ -687,6 +768,10 @@ CY_ISR(USBFS_BUS_RESET_ISR)
 \r
                 /* `#END` */\r
 \r
+                #ifdef USBFS_ARB_ISR_CALLBACK\r
+                    USBFS_ARB_ISR_Callback();\r
+                #endif /* USBFS_ARB_ISR_CALLBACK */\r
+\r
                 CY_SET_REG8((reg8 *)(USBFS_ARB_EP1_SR_IND + ptr), ep_status);   /* Clear Serviced events */\r
             }\r
             ptr += USBFS_EPX_CNTX_ADDR_OFFSET;               /* prepare pointer for next EP */\r
@@ -697,6 +782,10 @@ CY_ISR(USBFS_BUS_RESET_ISR)
         /* `#START ARB_END_USER_CODE` Place your code here */\r
 \r
         /* `#END` */\r
+\r
+        #ifdef USBFS_ARB_ISR_EXIT_CALLBACK\r
+            USBFS_ARB_ISR_ExitCallback();\r
+        #endif /* USBFS_ARB_ISR_EXIT_CALLBACK */\r
     }\r
 \r
 #endif /*  USBFS_EP_MM */\r
@@ -724,6 +813,10 @@ CY_ISR(USBFS_BUS_RESET_ISR)
         uint8 ep = USBFS_EP1;\r
         uint8 ptr = 0u;\r
 \r
+        #ifdef USBFS_EP_DMA_DONE_ISR_ENTRY_CALLBACK\r
+            USBFS_EP_DMA_DONE_ISR_EntryCallback();\r
+        #endif /* USBFS_EP_DMA_DONE_ISR_ENTRY_CALLBACK */\r
+\r
         /* `#START EP_DMA_DONE_BEGIN_USER_CODE` Place your code here */\r
 \r
         /* `#END` */\r
@@ -747,6 +840,10 @@ CY_ISR(USBFS_BUS_RESET_ISR)
 \r
                         /* `#END` */\r
 \r
+                        #ifdef USBFS_EP_DMA_DONE_ISR_CALLBACK\r
+                            USBFS_EP_DMA_DONE_ISR_Callback();\r
+                        #endif /* USBFS_EP_DMA_DONE_ISR_CALLBACK */\r
+\r
                         CY_SET_REG8((reg8 *)(USBFS_ARB_RW1_WA_MSB_IND + ptr), 0x00u);\r
                         /* repeat 2 last bytes to prefetch endpoint area */\r
                         CY_SET_REG8((reg8 *)(USBFS_ARB_RW1_WA_IND + ptr),\r
@@ -773,6 +870,10 @@ CY_ISR(USBFS_BUS_RESET_ISR)
         /* `#START EP_DMA_DONE_END_USER_CODE` Place your code here */\r
 \r
         /* `#END` */\r
+\r
+        #ifdef USBFS_EP_DMA_DONE_ISR_EXIT_CALLBACK\r
+            USBFS_EP_DMA_DONE_ISR_ExitCallback();\r
+        #endif /* USBFS_EP_DMA_DONE_ISR_EXIT_CALLBACK */\r
     }\r
 #endif /* ((USBFS_EP_MM == USBFS__EP_DMAAUTO) && (USBFS_EP_DMA_AUTO_OPT == 0u)) */\r
 \r
old mode 100644 (file)
new mode 100755 (executable)
index fedf8b0..dac538b
@@ -25,6 +25,7 @@
 #include "USBFS_hid.h"\r
 \r
 \r
+\r
 /***************************************\r
 *    HID Variables\r
 ***************************************/\r
@@ -375,6 +376,11 @@ void USBFS_FindReport(void)
     /* `#START HID_FINDREPORT` Place custom handling here */\r
 \r
     /* `#END` */\r
+    \r
+    #ifdef USBFS_FIND_REPORT_CALLBACK\r
+        USBFS_FindReport_Callback();\r
+    #endif /* USBFS_FIND_REPORT_CALLBACK */\r
+    \r
     USBFS_currentTD.count = 0u;   /* Init not supported condition */\r
     pTmp = USBFS_GetConfigTablePtr(USBFS_configuration - 1u);\r
     reportType = CY_GET_REG8(USBFS_wValueHi);\r
old mode 100644 (file)
new mode 100755 (executable)
index be7060b..5ea6b84
@@ -26,6 +26,7 @@
 #include "USBFS_pvt.h"\r
 \r
 \r
+\r
 /***************************************\r
 *    MIDI Constants\r
 ***************************************/\r
@@ -269,6 +270,10 @@ void USBFS_MIDI_EP_Init(void)
                             /* `#START CUSTOM_MIDI_OUT_EP_SERV` Place your code here */\r
 \r
                             /* `#END` */\r
+\r
+                            #ifdef USBFS_MIDI_OUT_EP_SERVICE_CALLBACK\r
+                                USBFS_MIDI_OUT_EP_Service_Callback();\r
+                            #endif /* USBFS_MIDI_OUT_EP_SERVICE_CALLBACK */\r
                         }\r
                     #endif /* (USBFS_MIDI_EXT_MODE >= USBFS_ONE_EXT_INTRF) */\r
 \r
@@ -732,6 +737,9 @@ void USBFS_MIDI_EP_Init(void)
 \r
         /* `#END` */\r
 \r
+        #ifdef USBFS_MIDI_INIT_CALLBACK\r
+            USBFS_MIDI_Init_Callback();\r
+        #endif /* USBFS_MIDI_INIT_CALLBACK */\r
     }\r
 \r
 \r
@@ -1046,6 +1054,10 @@ void USBFS_MIDI_EP_Init(void)
 \r
         /* `#END` */\r
 \r
+        #ifdef USBFS_MIDI1_PROCESS_USB_OUT_ENTRY_CALLBACK\r
+            USBFS_MIDI1_ProcessUsbOut_EntryCallback();\r
+        #endif /* USBFS_MIDI1_PROCESS_USB_OUT_ENTRY_CALLBACK */\r
+\r
         cmd = epBuf[USBFS_EVENT_BYTE0] & USBFS_CIN_MASK;\r
         if((cmd != USBFS_RESERVED0) && (cmd != USBFS_RESERVED1))\r
         {\r
@@ -1118,6 +1130,10 @@ void USBFS_MIDI_EP_Init(void)
         /* `#START MIDI1_PROCESS_OUT_END` */\r
 \r
         /* `#END` */\r
+\r
+        #ifdef USBFS_MIDI1_PROCESS_USB_OUT_EXIT_CALLBACK\r
+            USBFS_MIDI1_ProcessUsbOut_ExitCallback();\r
+        #endif /* USBFS_MIDI1_PROCESS_USB_OUT_EXIT_CALLBACK */\r
     }\r
 \r
 \r
@@ -1269,6 +1285,10 @@ void USBFS_MIDI_EP_Init(void)
 \r
         /* `#END` */\r
 \r
+        #ifdef USBFS_MIDI2_PROCESS_USB_OUT_ENTRY_CALLBACK\r
+            USBFS_MIDI2_ProcessUsbOut_EntryCallback();\r
+        #endif /* USBFS_MIDI2_PROCESS_USB_OUT_ENTRY_CALLBACK */\r
+\r
         cmd = epBuf[USBFS_EVENT_BYTE0] & USBFS_CIN_MASK;\r
         if((cmd != USBFS_RESERVED0) && (cmd != USBFS_RESERVED1))\r
         {\r
@@ -1341,6 +1361,10 @@ void USBFS_MIDI_EP_Init(void)
         /* `#START MIDI2_PROCESS_OUT_END` */\r
 \r
         /* `#END` */\r
+\r
+        #ifdef USBFS_MIDI2_PROCESS_USB_OUT_EXIT_CALLBACK\r
+            USBFS_MIDI2_ProcessUsbOut_ExitCallback();\r
+        #endif /* USBFS_MIDI2_PROCESS_USB_OUT_EXIT_CALLBACK */\r
     }\r
 #endif /* (USBFS_MIDI_EXT_MODE >= USBFS_TWO_EXT_INTRF) */\r
 #endif /* (USBFS_MIDI_EXT_MODE >= USBFS_ONE_EXT_INTRF) */\r
old mode 100644 (file)
new mode 100755 (executable)
index 3540214..bcf7525
@@ -19,6 +19,7 @@
 #include "USBFS_pvt.h"\r
 \r
 \r
+\r
 /***************************************\r
 * Custom Declarations\r
 ***************************************/\r
@@ -53,12 +54,20 @@ static USBFS_BACKUP_STRUCT  USBFS_backup;
     *******************************************************************************/\r
     CY_ISR(USBFS_DP_ISR)\r
     {\r
+        #ifdef USBFS_DP_ISR_ENTRY_CALLBACK\r
+            USBFS_DP_ISR_EntryCallback();\r
+        #endif /* USBFS_DP_ISR_ENTRY_CALLBACK */\r
+\r
         /* `#START DP_USER_CODE` Place your code here */\r
 \r
         /* `#END` */\r
 \r
         /* Clears active interrupt */\r
         CY_GET_REG8(USBFS_DP_INTSTAT_PTR);\r
+\r
+        #ifdef USBFS_DP_ISR_EXIT_CALLBACK\r
+            USBFS_DP_ISR_ExitCallback();\r
+        #endif /* USBFS_DP_ISR_EXIT_CALLBACK */\r
     }\r
 \r
 #endif /* (USBFS_DP_ISR_REMOVE == 0u) */\r
old mode 100644 (file)
new mode 100755 (executable)
index ef4d5f1..78e95ad
@@ -17,6 +17,7 @@
 #include "USBFS.h"\r
 #include "USBFS_pvt.h"\r
 \r
+\r
 #if(USBFS_EXTERN_VND == USBFS_FALSE)\r
 \r
 \r
@@ -77,6 +78,10 @@ uint8 USBFS_HandleVendorRqst(void)
 \r
     /* `#END` */\r
 \r
+    #ifdef USBFS_HANDLE_VENDOR_RQST_CALLBACK\r
+        USBFS_HandleVendorRqst_Callback();\r
+    #endif /* USBFS_HANDLE_VENDOR_RQST_CALLBACK */\r
+\r
     return(requestHandled);\r
 }\r
 \r
@@ -89,7 +94,6 @@ uint8 USBFS_HandleVendorRqst(void)
 \r
 /* `#END` */\r
 \r
-\r
 #endif /* USBFS_EXTERN_VND */\r
 \r
 \r