USB device stack

Dependents:   mbed-mX-USB-TEST1 USBMSD_SD_HID_HelloWorld HidTest MIDI_usb_bridge ... more

Legacy Warning

This is an mbed 2 library. To learn more about mbed OS 5, visit the docs.

Pull requests against this repository are no longer supported. Please raise against mbed OS 5 as documented above.

Files at this revision

API Documentation at this revision

Comitter:
Kojto
Date:
Thu Jul 27 12:14:04 2017 +0100
Parent:
70:2c525a50f1b6
Commit message:
Update libraries

Fixes the previous commmit, as some devices were not copied. USBDevice contains
now targets directory with all targets implementations

Changed in this revision

USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/inc/devdrv_usb_function_api.h Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/inc/usb_function.h Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/inc/usb_function_version.h Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function.h Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function_api.h Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function_dmacdrv.h Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_dataio.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_dma.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_intrn.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_lib.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_api.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_controlrw.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_global.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_sig.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_sub.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/userdef/usb0_function_dmacdrv.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/userdef/usb0_function_userdef.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function.h Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function_api.h Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function_dmacdrv.h Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_dataio.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_dma.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_intrn.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_lib.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_api.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_controlrw.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_global.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_sig.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_sub.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/userdef/usb1_function_dmacdrv.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/userdef/usb1_function_userdef.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb_function_setting.h Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/inc/devdrv_usb_function_api.h Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/inc/usb_function.h Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/inc/usb_function_version.h Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/inc/usb0_function.h Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/inc/usb0_function_api.h Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/inc/usb0_function_dmacdrv.h Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_dataio.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_dma.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_intrn.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_lib.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_api.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_controlrw.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_global.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_sig.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_sub.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/userdef/usb0_function_dmacdrv.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/userdef/usb0_function_userdef.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/inc/usb1_function.h Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/inc/usb1_function_api.h Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/inc/usb1_function_dmacdrv.h Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_dataio.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_dma.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_intrn.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_lib.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_api.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_controlrw.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_global.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_sig.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_sub.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/userdef/usb1_function_dmacdrv.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/userdef/usb1_function_userdef.c Show diff for this revision Revisions of this file
USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb_function_setting.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/USBHAL_STM32F103RB.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/USBHAL_STM_TARGET.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/USBHAL_STM_TARGET.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303ZE/USBHAL_STM32F303ZE.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303ZE/USBHAL_STM_TARGET.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/USBHAL_STM_TARGET.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/USBHAL_STM_TARGET.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_NUCLEO_F411RE/USBHAL_STM_TARGET.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_NUCLEO_F412ZG/USBHAL_STM_TARGET.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_NUCLEO_F429ZI/USBHAL_STM_TARGET.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_NUCLEO_F439ZI/USBHAL_STM_TARGET.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446RE/USBHAL_STM_TARGET.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446ZE/USBHAL_STM_TARGET.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/USBHAL_STM_TARGET.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/TARGET_NUCLEO_F756ZG/USBHAL_STM_TARGET.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/USBHAL_STM_TARGET.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/TARGET_DISCO_F769NI/USBHAL_STM32F769NI.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/TARGET_DISCO_F769NI/USBHAL_STM_TARGET.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L053C8/USBHAL_STM32L053C8.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L053C8/USBHAL_STM_TARGET.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L072CZ_LRWAN1/USBHAL_STM32L072CZ.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L072CZ_LRWAN1/USBHAL_STM_TARGET.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/USBHAL_STM32L475VG.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/USBHAL_STM_TARGET.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_DISCO_L476VG/USBHAL_STM32L476VG.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_DISCO_L476VG/USBHAL_STM_TARGET.h Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/USBHAL_STM32.cpp Show diff for this revision Revisions of this file
USBDevice/TARGET_STM/USBHAL_STM_144_64pins.h Show diff for this revision Revisions of this file
USBDevice/TARGET_Silicon_Labs/inc/em_usb.h Show diff for this revision Revisions of this file
USBDevice/TARGET_Silicon_Labs/inc/em_usbd.h Show diff for this revision Revisions of this file
USBDevice/TARGET_Silicon_Labs/inc/em_usbh.h Show diff for this revision Revisions of this file
USBDevice/TARGET_Silicon_Labs/inc/em_usbhal.h Show diff for this revision Revisions of this file
USBDevice/TARGET_Silicon_Labs/inc/em_usbtypes.h Show diff for this revision Revisions of this file
USBDevice/TARGET_Silicon_Labs/inc/usbconfig.h Show diff for this revision Revisions of this file
USBDevice/TARGET_Silicon_Labs/src/em_usbd.c Show diff for this revision Revisions of this file
USBDevice/TARGET_Silicon_Labs/src/em_usbdep.c Show diff for this revision Revisions of this file
USBDevice/TARGET_Silicon_Labs/src/em_usbdint.c Show diff for this revision Revisions of this file
USBDevice/TARGET_Silicon_Labs/src/em_usbhal.c Show diff for this revision Revisions of this file
USBDevice/TARGET_Silicon_Labs/src/em_usbtimer.c Show diff for this revision Revisions of this file
USBDevice/USBEndpoints_EFM32.h Show diff for this revision Revisions of this file
USBDevice/USBEndpoints_KL25Z.h Show diff for this revision Revisions of this file
USBDevice/USBEndpoints_LPC11U.h Show diff for this revision Revisions of this file
USBDevice/USBEndpoints_LPC17_LPC23.h Show diff for this revision Revisions of this file
USBDevice/USBEndpoints_M453.h Show diff for this revision Revisions of this file
USBDevice/USBEndpoints_Maxim.h Show diff for this revision Revisions of this file
USBDevice/USBEndpoints_NUC472.h Show diff for this revision Revisions of this file
USBDevice/USBEndpoints_RZ_A1H.h Show diff for this revision Revisions of this file
USBDevice/USBEndpoints_STM32.h Show diff for this revision Revisions of this file
USBDevice/USBEndpoints_STM32F4.h Show diff for this revision Revisions of this file
USBDevice/USBHAL_EFM32.cpp Show diff for this revision Revisions of this file
USBDevice/USBHAL_KL25Z.cpp Show diff for this revision Revisions of this file
USBDevice/USBHAL_LPC11U.cpp Show diff for this revision Revisions of this file
USBDevice/USBHAL_LPC17.cpp Show diff for this revision Revisions of this file
USBDevice/USBHAL_LPC40.cpp Show diff for this revision Revisions of this file
USBDevice/USBHAL_M453.cpp Show diff for this revision Revisions of this file
USBDevice/USBHAL_Maxim.cpp Show diff for this revision Revisions of this file
USBDevice/USBHAL_NUC472.cpp Show diff for this revision Revisions of this file
USBDevice/USBHAL_RZ_A1H.cpp Show diff for this revision Revisions of this file
USBDevice/USBHAL_STM32F4.cpp Show diff for this revision Revisions of this file
USBDevice/USBRegs_STM32.h Show diff for this revision Revisions of this file
targets/TARGET_Freescale/USBEndpoints_KL25Z.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_Freescale/USBHAL_KL25Z.cpp Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_Maxim/USBEndpoints_Maxim.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_Maxim/USBHAL_Maxim.cpp Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_NUVOTON/TARGET_M451/USBEndpoints_M453.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_NUVOTON/TARGET_M451/USBHAL_M453.cpp Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_NUVOTON/TARGET_NUC472/USBEndpoints_NUC472.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_NUVOTON/TARGET_NUC472/USBHAL_NUC472.cpp Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_NXP/USBEndpoints_LPC11U.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_NXP/USBEndpoints_LPC17_LPC23.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_NXP/USBHAL_LPC11U.cpp Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_NXP/USBHAL_LPC17.cpp Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_NXP/USBHAL_LPC40.cpp Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/inc/devdrv_usb_function_api.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/inc/usb_function.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/inc/usb_function_version.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function_api.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function_dmacdrv.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_dataio.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_dma.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_intrn.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_lib.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_api.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_controlrw.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_global.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_sig.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_sub.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/userdef/usb0_function_dmacdrv.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/userdef/usb0_function_userdef.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function_api.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function_dmacdrv.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_dataio.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_dma.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_intrn.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_lib.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_api.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_controlrw.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_global.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_sig.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_sub.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/userdef/usb1_function_dmacdrv.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/userdef/usb1_function_userdef.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_RZ_A1H/usb_function_setting.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/inc/devdrv_usb_function_api.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/inc/usb_function.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/inc/usb_function_version.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/inc/usb0_function.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/inc/usb0_function_api.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/inc/usb0_function_dmacdrv.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_dataio.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_dma.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_intrn.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_lib.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_api.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_controlrw.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_global.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_sig.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_sub.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/userdef/usb0_function_dmacdrv.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/userdef/usb0_function_userdef.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/inc/usb1_function.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/inc/usb1_function_api.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/inc/usb1_function_dmacdrv.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_dataio.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_dma.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_intrn.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_lib.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_api.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_controlrw.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_global.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_sig.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_sub.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/userdef/usb1_function_dmacdrv.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/userdef/usb1_function_userdef.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb_function_setting.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/USBEndpoints_RZ_A1H.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_RENESAS/USBHAL_RZ_A1H.cpp Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/USBHAL_STM32F103RB.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/USBHAL_STM_TARGET.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/USBHAL_STM_TARGET.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303ZE/USBHAL_STM32F303ZE.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303ZE/USBHAL_STM_TARGET.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/USBHAL_STM_TARGET.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/USBHAL_STM_TARGET.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_NUCLEO_F411RE/USBHAL_STM_TARGET.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_NUCLEO_F412ZG/USBHAL_STM_TARGET.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_NUCLEO_F429ZI/USBHAL_STM_TARGET.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_NUCLEO_F439ZI/USBHAL_STM_TARGET.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446RE/USBHAL_STM_TARGET.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446ZE/USBHAL_STM_TARGET.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/USBHAL_STM_TARGET.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/TARGET_NUCLEO_F756ZG/USBHAL_STM_TARGET.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/USBHAL_STM_TARGET.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/TARGET_DISCO_F769NI/USBHAL_STM32F769NI.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/TARGET_DISCO_F769NI/USBHAL_STM_TARGET.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L053C8/USBHAL_STM32L053C8.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L053C8/USBHAL_STM_TARGET.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L072CZ_LRWAN1/USBHAL_STM32L072CZ.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L072CZ_LRWAN1/USBHAL_STM_TARGET.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/USBHAL_STM32L475VG.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/USBHAL_STM_TARGET.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_DISCO_L476VG/USBHAL_STM32L476VG.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_DISCO_L476VG/USBHAL_STM_TARGET.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/USBEndpoints_STM32.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/USBEndpoints_STM32F4.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/USBHAL_STM32.cpp Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/USBHAL_STM32F4.cpp Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/USBHAL_STM_144_64pins.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_STM/USBRegs_STM32.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_Silicon_Labs/USBEndpoints_EFM32.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_Silicon_Labs/USBHAL_EFM32.cpp Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_Silicon_Labs/inc/em_usb.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_Silicon_Labs/inc/em_usbd.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_Silicon_Labs/inc/em_usbh.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_Silicon_Labs/inc/em_usbhal.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_Silicon_Labs/inc/em_usbtypes.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_Silicon_Labs/inc/usbconfig.h Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_Silicon_Labs/src/em_usbd.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_Silicon_Labs/src/em_usbdep.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_Silicon_Labs/src/em_usbdint.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_Silicon_Labs/src/em_usbhal.c Show annotated file Show diff for this revision Revisions of this file
targets/TARGET_Silicon_Labs/src/em_usbtimer.c Show annotated file Show diff for this revision Revisions of this file
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/inc/devdrv_usb_function_api.h
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/inc/devdrv_usb_function_api.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,365 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : devdrv_usb_function_api.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description  : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-#ifndef USB_FUNCTION_API_H
-#define USB_FUNCTION_API_H
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include <MBRZA1H.h>
-#include "r_typedefs.h"
-#include "usb0_function_api.h"
-#include "usb1_function_api.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-typedef struct
-{
-    uint32_t fifo;
-    uint32_t buffer;
-    uint32_t bytes;
-    uint32_t dir;
-    uint32_t size;
-} USB_FUNCTION_DMA_t;
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-#define USBFCLOCK_X1_48MHZ                          (0x0000u)       /* USB_X1_48MHz */
-#define USBFCLOCK_EXTAL_12MHZ                       (0x0004u)       /* EXTAL_12MHz  */
-
-#define DEVDRV_USBF_ON                              (1)
-#define DEVDRV_USBF_OFF                             (0)
-#define DEVDRV_USBF_YES                             (1)
-#define DEVDRV_USBF_NO                              (0)
-
-#define DEVDRV_USBF_STALL                           (-2)
-
-#define DEVDRV_USBF_WRITEEND                        (0)
-#define DEVDRV_USBF_WRITESHRT                       (1)
-#define DEVDRV_USBF_WRITING                         (2)
-#define DEVDRV_USBF_WRITEDMA                        (3)
-
-#define DEVDRV_USBF_FIFOERROR                       (0xffff)
-
-#define DEVDRV_USBF_PIPE_IDLE                       (0x00)
-#define DEVDRV_USBF_PIPE_WAIT                       (0x01)
-#define DEVDRV_USBF_PIPE_DONE                       (0x02)
-#define DEVDRV_USBF_PIPE_NORES                      (0x03)
-#define DEVDRV_USBF_PIPE_STALL                      (0x04)
-
-#define DEVDRV_USBF_PID_NAK                         (0x0000u)
-#define DEVDRV_USBF_PID_BUF                         (0x0001u)
-#define DEVDRV_USBF_PID_STALL                       (0x0002u)
-#define DEVDRV_USBF_PID_STALL2                      (0x0003u)
-
-#define USB_FUNCTION_NON_SPEED                      (0)
-#define USB_FUNCTION_LOW_SPEED                      (1)
-#define USB_FUNCTION_FULL_SPEED                     (2)
-#define USB_FUNCTION_HIGH_SPEED                     (3)
-
-#define USB_FUNCTION_READEND                        (0)
-#define USB_FUNCTION_READSHRT                       (1)
-#define USB_FUNCTION_READING                        (2)
-#define USB_FUNCTION_READOVER                       (3)
-#define USB_FUNCTION_READZERO                       (4)
-
-#define USB_FUNCTION_MAX_PIPE_NO                    (15u)
-#define USB_FUNCTION_PIPE0                          (0)
-#define USB_FUNCTION_PIPE1                          (1)
-#define USB_FUNCTION_PIPE2                          (2)
-#define USB_FUNCTION_PIPE3                          (3)
-#define USB_FUNCTION_PIPE4                          (4)
-#define USB_FUNCTION_PIPE5                          (5)
-#define USB_FUNCTION_PIPE6                          (6)
-#define USB_FUNCTION_PIPE7                          (7)
-#define USB_FUNCTION_PIPE8                          (8)
-#define USB_FUNCTION_PIPE9                          (9)
-#define USB_FUNCTION_PIPEA                          (10)
-#define USB_FUNCTION_PIPEB                          (11)
-#define USB_FUNCTION_PIPEC                          (12)
-#define USB_FUNCTION_PIPED                          (13)
-#define USB_FUNCTION_PIPEE                          (14)
-#define USB_FUNCTION_PIPEF                          (15)
-
-#define USB_FUNCTION_ISO                            (0xc000u)
-#define USB_FUNCTION_INTERRUPT                      (0x8000u)
-#define USB_FUNCTION_BULK                           (0x4000u)
-
-#define USB_FUNCTION_NONE                           (0x0000u)
-#define USB_FUNCTON_BFREFIELD                       (0x0400u)
-#define USB_FUNCTION_BFREON                         (0x0400u)
-#define USB_FUNCTION_BFREOFF                        (0x0000u)
-#define USB_FUNCTION_DBLBFIELD                      (0x0200u)
-#define USB_FUNCTION_DBLBON                         (0x0200u)
-#define USB_FUNCTION_DBLBOFF                        (0x0000u)
-#define USB_FUNCTION_CNTMDFIELD                     (0x0100u)
-#define USB_FUNCTION_CNTMDON                        (0x0100u)
-#define USB_FUNCTION_CNTMDOFF                       (0x0000u)
-#define USB_FUNCTION_SHTNAKON                       (0x0080u)
-#define USB_FUNCTION_SHTNAKOFF                      (0x0000u)
-#define USB_FUNCTION_DIRFIELD                       (0x0010u)
-#define USB_FUNCTION_DIR_P_OUT                      (0x0000u)
-#define USB_FUNCTION_DIR_P_IN                       (0x0010u)
-#define USB_FUNCTION_EPNUMFIELD                     (0x000fu)
-#define USB_FUNCTION_MAX_EP_NO                      (15u)
-#define USB_FUNCTION_EP0                            (0u)
-#define USB_FUNCTION_EP1                            (1u)
-#define USB_FUNCTION_EP2                            (2u)
-#define USB_FUNCTION_EP3                            (3u)
-#define USB_FUNCTION_EP4                            (4u)
-#define USB_FUNCTION_EP5                            (5u)
-#define USB_FUNCTION_EP6                            (6u)
-#define USB_FUNCTION_EP7                            (7u)
-#define USB_FUNCTION_EP8                            (8u)
-#define USB_FUNCTION_EP9                            (9u)
-#define USB_FUNCTION_EP10                           (10u)
-#define USB_FUNCTION_EP11                           (11u)
-#define USB_FUNCTION_EP12                           (12u)
-#define USB_FUNCTION_EP13                           (13u)
-#define USB_FUNCTION_EP14                           (14u)
-#define USB_FUNCTION_EP15                           (15u)
-
-#define USB_FUNCTION_EPTABLE_LENGTH                 (5u)
-
-#define USB_FUNCTION_CUSE                           (0)
-#define USB_FUNCTION_D0USE                          (1)
-#define USB_FUNCTION_D0DMA                          (2)
-#define USB_FUNCTION_D1USE                          (3)
-#define USB_FUNCTION_D1DMA                          (4)
-
-#define USB_FUNCTION_CFIFO_USE                      (0x0000)
-#define USB_FUNCTION_D0FIFO_USE                     (0x1000)
-#define USB_FUNCTION_D1FIFO_USE                     (0x2000)
-#define USB_FUNCTION_D0FIFO_DMA                     (0x5000)
-#define USB_FUNCTION_D1FIFO_DMA                     (0x6000)
-
-#define USB_FUNCTION_BUF2FIFO                       (0)
-#define USB_FUNCTION_FIFO2BUF                       (1)
-
-#define USB_FUNCTION_DVST_POWERED                   (0x0001)
-#define USB_FUNCTION_DVST_DEFAULT                   (0x0002)
-#define USB_FUNCTION_DVST_ADDRESS                   (0x0003)
-#define USB_FUNCTION_DVST_CONFIGURED                (0x0004)
-#define USB_FUNCTION_DVST_SUSPEND                   (0x0005)
-#define USB_FUNCTION_DVST_CONFIGURED_SUSPEND        (0x0006)
-
-#define USB_FUNCTION_FUNCTION_TEST_SELECT           (0xff00u)
-#define USB_FUNCTION_FUNCTION_TEST_J                (0x0100u)
-#define USB_FUNCTION_FUNCTION_TEST_K                (0x0200u)
-#define USB_FUNCTION_FUNCTION_TEST_SE0_NAK          (0x0300u)
-#define USB_FUNCTION_FUNCTION_TEST_PACKET           (0x0400u)
-#define USB_FUNCTION_FUNCTION_TEST_FORCE_ENABLE     (0x0500u)
-#define USB_FUNCTION_FUNCTION_TEST_STSelectors      (0x0600u)
-#define USB_FUNCTION_FUNCTION_TEST_Reserved         (0x4000u)
-#define USB_FUNCTION_FUNCTION_TEST_VSTModes         (0xc000u)
-
-#define USB_FUNCTION_DT_TYPE                        (0xff00u)
-#define USB_FUNCTION_DT_INDEX                       (0xff)
-#define USB_FUNCTION_DT_DEVICE                      (0x01)
-#define USB_FUNCTION_DT_CONFIGURATION               (0x02)
-#define USB_FUNCTION_DT_STRING                      (0x03)
-#define USB_FUNCTION_DT_INTERFACE                   (0x04)
-#define USB_FUNCTION_DT_ENDPOINT                    (0x05)
-#define USB_FUNCTION_DT_DEVICE_QUALIFIER            (0x06)
-#define USB_FUNCTION_DT_OTHER_SPEED_CONFIGURATION   (0x07)
-#define USB_FUNCTION_DT_INTERFACE_POWER             (0x08)
-
-#define USB_FUNCTION_CF_RESERVED                    (0x80)
-#define USB_FUNCTION_CF_SELF                        (0x40)
-#define USB_FUNCTION_CF_RWUP                        (0x20)
-#define USB_FUNCTION_CF_NORWUP                      (0x00)
-#define USB_FUNCTION_EP_ERROR                       (0xff)
-
-#define USB_FUNCTION_EP_OUT                         (0x00)
-#define USB_FUNCTION_EP_IN                          (0x80)
-#define USB_FUNCTION_EP_CNTRL                       (0x00)
-#define USB_FUNCTION_EP_ISO                         (0x01)
-#define USB_FUNCTION_EP_BULK                        (0x02)
-#define USB_FUNCTION_EP_INT                         (0x03)
-
-#define USB_FUNCTION_STANDARD_REQUEST               (0x0000u)
-#define USB_FUNCTION_CLASS_REQUEST                  (0x0020u)
-#define USB_FUNCTION_VENDOR_REQUEST                 (0x0040u)
-#define USB_FUNCTION_DEVICE_REQUEST                 (0x0000u)
-#define USB_FUNCTION_INTERFACE_REQUEST              (0x0001u)
-#define USB_FUNCTION_ENDPOINT_REQUEST               (0x0002u)
-
-#define USB_FUNCTION_GETSTATUS_BUSPOWERD            (0x0000u)
-#define USB_FUNCTION_GETSTATUS_SELFPOWERD           (0x0001u)
-#define USB_FUNCTION_GETSTATUS_REMOTEWAKEUP         (0x0002u)
-#define USB_FUNCTION_GETSTATUS_NOTHALT              (0x0000u)
-#define USB_FUNCTION_GETSTATUS_HALT                 (0x0001u)
-
-#define USB_FUNCTION_FEATURE_ENDPOINT_HALT          (0x0000u)
-#define USB_FUNCTION_FEATURE_REMOTE_WAKEUP          (0x0001u)
-#define USB_FUNCTION_FEATURE_TEST_MODE              (0x0002u)
-
-#define USB_FUNCTION_bRequest                       (0xff00u)       /* b15-8:bRequest */
-#define USB_FUNCTION_bmRequestType                  (0x00ffu)       /* b7-0: bmRequestType */
-#define USB_FUNCTION_bmRequestTypeDir               (0x0080u)       /* b7  : Data transfer direction */
-#define USB_FUNCTION_bmRequestTypeType              (0x0060u)       /* b6-5: Type */
-#define USB_FUNCTION_bmRequestTypeRecip             (0x001fu)       /* b4-0: Recipient */
-
-
-/*******************************************************************************
-Variable Externs
-*******************************************************************************/
-
-
-/*******************************************************************************
-Functions Prototypes
-*******************************************************************************/
-#if 0
-void     R_USB_api_function_init(uint16_t root, uint8_t int_level, uint16_t mode, uint16_t clockmode);
-uint16_t R_USB_api_function_IsConfigured(uint16_t root);
-uint16_t R_USB_api_function_CtrlReadStart(uint16_t root, uint32_t size, uint8_t *data);
-void     R_USB_api_function_CtrlWriteStart(uint16_t root, uint32_t size, uint8_t *data);
-uint16_t R_USB_api_function_start_send_transfer(uint16_t root, uint16_t pipe, uint32_t size, uint8_t *data);
-uint16_t R_USB_api_function_check_pipe_status(uint16_t root, uint16_t pipe, uint32_t *size);
-void     R_USB_api_function_clear_pipe_status(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_start_receive_transfer(uint16_t root, uint16_t pipe, uint32_t size, uint8_t *data);
-void     R_USB_api_function_set_pid_buf(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_set_pid_nak(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_set_pid_stall(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_clear_pid_stall(uint16_t root, uint16_t pipe);
-uint16_t R_USB_api_function_get_pid(uint16_t root, uint16_t pipe);
-int32_t  R_USB_api_function_check_stall(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_set_sqclr(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_set_sqset(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_set_csclr(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_set_curpipe(uint16_t root, uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
-void     R_USB_api_function_clear_brdy_sts(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_clear_bemp_sts(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_clear_nrdy_sts(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_enable_brdy_int(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_disable_brdy_int(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_enable_bemp_int(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_disable_bemp_int(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_enable_nrdy_int(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_disable_nrdy_int(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_stop_transfer(uint16_t root, uint16_t pipe);
-#endif
-
-#ifdef USB0_FUNCTION_API_H
-void     usb0_function_interrupt(uint32_t int_sense);
-void     usb0_function_dma_interrupt_d0fifo(uint32_t int_sense);
-void     usb0_function_dma_interrupt_d1fifo(uint32_t int_sense);
-
-void     usb0_function_Class0(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Class1(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Class2(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Class3(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Class4(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Class5(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Vendor0(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Vendor1(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Vendor2(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Vendor3(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Vendor4(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Vendor5(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_ResetDescriptor(uint16_t mode);
-
-IRQn_Type Userdef_USB_usb0_function_d0fifo_dmaintid(void);
-IRQn_Type Userdef_USB_usb0_function_d1fifo_dmaintid(void);
-void     Userdef_USB_usb0_function_attach(void);
-void     Userdef_USB_usb0_function_detach(void);
-void     Userdef_USB_usb0_function_delay_1ms(void);
-void     Userdef_USB_usb0_function_delay_xms(uint32_t msec);
-void     Userdef_USB_usb0_function_delay_10us(uint32_t usec);
-void     Userdef_USB_usb0_function_delay_500ns(void);
-void     Userdef_USB_usb0_function_start_dma(USB_FUNCTION_DMA_t *dma, uint16_t dfacc);
-uint32_t Userdef_USB_usb0_function_stop_dma0(void);
-uint32_t Userdef_USB_usb0_function_stop_dma1(void);
-
-void     usb0_function_stop_transfer(uint16_t pipe);
-void     usb0_function_enable_brdy_int(uint16_t pipe);
-void     usb0_function_disable_brdy_int(uint16_t pipe);
-void     usb0_function_enable_bemp_int(uint16_t pipe);
-void     usb0_function_disable_bemp_int(uint16_t pipe);
-void     usb0_function_enable_nrdy_int(uint16_t pipe);
-void     usb0_function_disable_nrdy_int(uint16_t pipe);
-#endif
-
-#ifdef  USB1_FUNCTION_API_H
-void     usb1_function_interrupt(uint32_t int_sense);
-void     usb1_function_dma_interrupt_d0fifo(uint32_t int_sense);
-void     usb1_function_dma_interrupt_d1fifo(uint32_t int_sense);
-
-void     usb1_function_Class0(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Class1(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Class2(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Class3(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Class4(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Class5(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Vendor0(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Vendor1(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Vendor2(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Vendor3(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Vendor4(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Vendor5(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_ResetDescriptor(uint16_t mode);
-
-IRQn_Type Userdef_USB_usb1_function_d0fifo_dmaintid(void);
-IRQn_Type Userdef_USB_usb1_function_d1fifo_dmaintid(void);
-void     Userdef_USB_usb1_function_attach(void);
-void     Userdef_USB_usb1_function_detach(void);
-void     Userdef_USB_usb1_function_delay_1ms(void);
-void     Userdef_USB_usb1_function_delay_xms(uint32_t msec);
-void     Userdef_USB_usb1_function_delay_10us(uint32_t usec);
-void     Userdef_USB_usb1_function_delay_500ns(void);
-void     Userdef_USB_usb1_function_start_dma(USB_FUNCTION_DMA_t *dma, uint16_t dfacc);
-uint32_t Userdef_USB_usb1_function_stop_dma0(void);
-uint32_t Userdef_USB_usb1_function_stop_dma1(void);
-
-void     usb1_function_stop_transfer(uint16_t pipe);
-void     usb1_function_enable_brdy_int(uint16_t pipe);
-void     usb1_function_disable_brdy_int(uint16_t pipe);
-void     usb1_function_enable_bemp_int(uint16_t pipe);
-void     usb1_function_disable_bemp_int(uint16_t pipe);
-void     usb1_function_enable_nrdy_int(uint16_t pipe);
-void     usb1_function_disable_nrdy_int(uint16_t pipe);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* USB_FUNCTION_API_H */
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/inc/usb_function.h
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/inc/usb_function.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,143 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb_function.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description  : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-#ifndef USB_FUNCTION_H
-#define USB_FUNCTION_H
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "r_typedefs.h"
-#include "iodefine.h"
-#include "rza_io_regrw.h"
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-#define USB_FUNCTION_ALT_NO         (255)
-#define USB_FUNCTION_ALT_SET        (0xff)
-
-#define USB_FUNCTION_BITUPLLE       (0x0002u)
-#define USB_FUNCTION_BITUCKSEL      (0x0004u)
-#define USB_FUNCTION_BITBWAIT       (0x003fu)
-
-#define USB_FUNCTION_BUSWAIT_02     (0x0000u)
-#define USB_FUNCTION_BUSWAIT_03     (0x0001u)
-#define USB_FUNCTION_BUSWAIT_04     (0x0002u)
-#define USB_FUNCTION_BUSWAIT_05     (0x0003u)
-#define USB_FUNCTION_BUSWAIT_06     (0x0004u)
-#define USB_FUNCTION_BUSWAIT_07     (0x0005u)
-#define USB_FUNCTION_BUSWAIT_08     (0x0006u)
-#define USB_FUNCTION_BUSWAIT_09     (0x0007u)
-#define USB_FUNCTION_BUSWAIT_10     (0x0008u)
-#define USB_FUNCTION_BUSWAIT_11     (0x0009u)
-#define USB_FUNCTION_BUSWAIT_12     (0x000au)
-#define USB_FUNCTION_BUSWAIT_13     (0x000bu)
-#define USB_FUNCTION_BUSWAIT_14     (0x000cu)
-#define USB_FUNCTION_BUSWAIT_15     (0x000du)
-#define USB_FUNCTION_BUSWAIT_16     (0x000eu)
-#define USB_FUNCTION_BUSWAIT_17     (0x000fu)
-
-#define USB_FUNCTION_BITRESUME      (0x0020u)
-#define USB_FUNCTION_BITUACT        (0x0010u)
-#define USB_FUNCTION_HSPROC         (0x0004u)
-#define USB_FUNCTION_HSMODE         (0x0003u)
-#define USB_FUNCTION_FSMODE         (0x0002u)
-#define USB_FUNCTION_LSMODE         (0x0001u)
-#define USB_FUNCTION_UNDECID        (0x0000u)
-
-#define USB_FUNCTION_BITRCNT        (0x8000u)
-#define USB_FUNCTION_BITDREQE       (0x1000u)
-#define USB_FUNCTION_BITMBW         (0x0c00u)
-#define USB_FUNCTION_BITMBW_8       (0x0000u)
-#define USB_FUNCTION_BITMBW_16      (0x0400u)
-#define USB_FUNCTION_BITMBW_32      (0x0800u)
-#define USB_FUNCTION_BITBYTE_LITTLE (0x0000u)
-#define USB_FUNCTION_BITBYTE_BIG    (0x0100u)
-#define USB_FUNCTION_BITISEL        (0x0020u)
-#define USB_FUNCTION_BITCURPIPE     (0x000fu)
-
-#define USB_FUNCTION_CFIFO_READ     (0x0000u)
-#define USB_FUNCTION_CFIFO_WRITE    (0x0020u)
-
-#define USB_FUNCTION_BITBVAL        (0x8000u)
-#define USB_FUNCTION_BITBCLR        (0x4000u)
-#define USB_FUNCTION_BITFRDY        (0x2000u)
-#define USB_FUNCTION_BITDTLN        (0x0fffu)
-
-#define USB_FUNCTION_BITVBSE        (0x8000u)
-#define USB_FUNCTION_BITRSME        (0x4000u)
-#define USB_FUNCTION_BITSOFE        (0x2000u)
-#define USB_FUNCTION_BITDVSE        (0x1000u)
-#define USB_FUNCTION_BITCTRE        (0x0800u)
-#define USB_FUNCTION_BITVBINT       (0x8000u)
-#define USB_FUNCTION_BITRESM        (0x4000u)
-#define USB_FUNCTION_BITSOFR        (0x2000u)
-#define USB_FUNCTION_BITDVST        (0x1000u)
-#define USB_FUNCTION_BITCTRT        (0x0800u)
-
-#define USB_FUNCTION_BITBEMPE       (0x0400u)
-#define USB_FUNCTION_BITNRDYE       (0x0200u)
-#define USB_FUNCTION_BITBRDYE       (0x0100u)
-#define USB_FUNCTION_BITBEMP        (0x0400u)
-#define USB_FUNCTION_BITNRDY        (0x0200u)
-#define USB_FUNCTION_BITBRDY        (0x0100u)
-
-#define USB_FUNCTION_BITDVSQ        (0x0070u)
-#define USB_FUNCTION_BITDVSQS       (0x0030u)
-#define USB_FUNCTION_DS_SPD_CNFG    (0x0070u)
-#define USB_FUNCTION_DS_SPD_ADDR    (0x0060u)
-#define USB_FUNCTION_DS_SPD_DFLT    (0x0050u)
-#define USB_FUNCTION_DS_SPD_POWR    (0x0040u)
-#define USB_FUNCTION_DS_CNFG        (0x0030u)
-#define USB_FUNCTION_DS_ADDS        (0x0020u)
-#define USB_FUNCTION_DS_DFLT        (0x0010u)
-#define USB_FUNCTION_DS_POWR        (0x0000u)
-#define USB_FUNCTION_BITVALID       (0x0008u)
-#define USB_FUNCTION_BITCTSQ        (0x0007u)
-#define USB_FUNCTION_CS_SQER        (0x0006u)
-#define USB_FUNCTION_CS_WRND        (0x0005u)
-#define USB_FUNCTION_CS_WRSS        (0x0004u)
-#define USB_FUNCTION_CS_WRDS        (0x0003u)
-#define USB_FUNCTION_CS_RDSS        (0x0002u)
-#define USB_FUNCTION_CS_RDDS        (0x0001u)
-#define USB_FUNCTION_CS_IDST        (0x0000u)
-
-#define USB_FUNCTION_PIPExBUF       (64u)
-
-#define USB_FUNCTION_D0FIFO         (0)
-#define USB_FUNCTION_D1FIFO         (1)
-#define USB_FUNCTION_DMA_READY      (0)
-#define USB_FUNCTION_DMA_BUSY       (1)
-#define USB_FUNCTION_DMA_BUSYEND    (2)
-
-#define USB_FUNCTION_FIFO_USE       (0x7000)
-
-#endif /* USB_FUNCTION_FUNCTION_H */
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/inc/usb_function_version.h
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/inc/usb_function_version.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb_function_version.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description  : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-
-#define USB_FUNCTION_LOCAL_Rev  "VER080_140709"
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function.h
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,171 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description  : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-#ifndef USB0_FUNCTION_H
-#define USB0_FUNCTION_H
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "devdrv_usb_function_api.h"
-#include "usb_function.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-extern const uint16_t       g_usb0_function_bit_set[];
-extern uint32_t             g_usb0_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
-extern uint8_t              *g_usb0_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-extern uint16_t             g_usb0_function_PipeIgnore[];
-extern uint16_t             g_usb0_function_PipeTbl[];
-extern uint16_t             g_usb0_function_pipe_status[];
-extern uint32_t             g_usb0_function_PipeDataSize[];
-
-extern USB_FUNCTION_DMA_t   g_usb0_function_DmaInfo[];
-extern uint16_t             g_usb0_function_DmaPipe[];
-extern uint16_t             g_usb0_function_DmaBval[];
-extern uint16_t             g_usb0_function_DmaStatus[];
-
-extern uint16_t             g_usb0_function_CtrZeroLengthFlag;
-
-extern uint16_t             g_usb0_function_ConfigNum;
-extern uint16_t             g_usb0_function_Alternate[USB_FUNCTION_ALT_NO];
-extern uint16_t             g_usb0_function_RemoteWakeupFlag;
-extern uint16_t             g_usb0_function_TestModeFlag;
-extern uint16_t             g_usb0_function_TestModeSelectors;
-
-extern uint16_t             g_usb0_function_ReqType;
-extern uint16_t             g_usb0_function_ReqTypeType;
-extern uint16_t             g_usb0_function_ReqTypeRecip;
-extern uint16_t             g_usb0_function_ReqRequest;
-extern uint16_t             g_usb0_function_ReqValue;
-extern uint16_t             g_usb0_function_ReqIndex;
-extern uint16_t             g_usb0_function_ReqLength;
-
-extern uint16_t             g_usb0_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
-
-extern uint16_t             g_usb0_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
-extern uint16_t             g_usb0_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
-extern uint16_t             g_usb0_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
-extern uint16_t             g_usb0_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-/* ==== common ==== */
-void     usb0_function_dma_stop_d0(uint16_t pipe, uint32_t remain);
-void     usb0_function_dma_stop_d1(uint16_t pipe, uint32_t remain);
-uint16_t usb0_function_is_hispeed(void);
-uint16_t usb0_function_is_hispeed_enable(void);
-uint16_t usb0_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
-uint16_t usb0_function_write_buffer(uint16_t pipe);
-uint16_t usb0_function_write_buffer_c(uint16_t pipe);
-uint16_t usb0_function_write_buffer_d0(uint16_t pipe);
-uint16_t usb0_function_write_buffer_d1(uint16_t pipe);
-void     usb0_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
-uint16_t usb0_function_read_buffer(uint16_t pipe);
-uint16_t usb0_function_read_buffer_c(uint16_t pipe);
-uint16_t usb0_function_read_buffer_d0(uint16_t pipe);
-uint16_t usb0_function_read_buffer_d1(uint16_t pipe);
-uint16_t usb0_function_change_fifo_port(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
-void     usb0_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
-void     usb0_function_set_curpipe2(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc);
-uint16_t usb0_function_get_mbw(uint32_t trncount, uint32_t dtptr);
-uint16_t usb0_function_read_dma(uint16_t pipe);
-void     usb0_function_brdy_int(uint16_t status, uint16_t int_enb);
-void     usb0_function_nrdy_int(uint16_t status, uint16_t int_enb);
-void     usb0_function_bemp_int(uint16_t status, uint16_t int_enb);
-void     usb0_function_setting_interrupt(uint8_t level);
-void     usb0_function_reset_module(uint16_t clockmode);
-uint16_t usb0_function_get_buf_size(uint16_t pipe);
-uint16_t usb0_function_get_mxps(uint16_t pipe);
-void     usb0_function_clear_brdy_sts(uint16_t pipe);
-void     usb0_function_clear_bemp_sts(uint16_t pipe);
-void     usb0_function_clear_nrdy_sts(uint16_t pipe);
-void     usb0_function_set_pid_buf(uint16_t pipe);
-void     usb0_function_set_pid_nak(uint16_t pipe);
-void     usb0_function_set_pid_stall(uint16_t pipe);
-void     usb0_function_clear_pid_stall(uint16_t pipe);
-uint16_t usb0_function_get_pid(uint16_t pipe);
-void     usb0_function_set_sqclr(uint16_t pipe);
-void     usb0_function_set_sqset(uint16_t pipe);
-void     usb0_function_set_csclr(uint16_t pipe);
-void     usb0_function_aclrm(uint16_t pipe);
-void     usb0_function_set_aclrm(uint16_t pipe);
-void     usb0_function_clr_aclrm(uint16_t pipe);
-uint16_t usb0_function_get_sqmon(uint16_t pipe);
-uint16_t usb0_function_get_inbuf(uint16_t pipe);
-
-/* ==== function ==== */
-void     usb0_function_init_status(void);
-void     usb0_function_InitModule(uint16_t mode);
-uint16_t usb0_function_CheckVBUStaus(void);
-void     usb0_function_USB_FUNCTION_Attach(void);
-void     usb0_function_USB_FUNCTION_Detach(void);
-void     usb0_function_USB_FUNCTION_BusReset(void);
-void     usb0_function_USB_FUNCTION_Resume(void);
-void     usb0_function_USB_FUNCTION_Suspend(void);
-void     usb0_function_USB_FUNCTION_TestMode(void);
-void     usb0_function_ResetDCP(void);
-void     usb0_function_ResetEP(uint16_t num);
-uint16_t usb0_function_EpToPipe(uint16_t ep);
-void     usb0_function_InitEPTable(uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num);
-uint16_t usb0_function_GetConfigNum(void);
-uint16_t usb0_function_GetAltNum(uint16_t Con_Num, uint16_t Int_Num);
-uint16_t usb0_function_CheckRemoteWakeup(void);
-void     usb0_function_clear_alt(void);
-void     usb0_function_clear_pipe_tbl(void);
-void     usb0_function_clear_ep_table_index(void);
-uint16_t usb0_function_GetInterfaceNum(uint16_t num);
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* USB0_FUNCTION_H */
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function_api.h
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function_api.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,104 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_api.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description  : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-#ifndef USB0_FUNCTION_API_H
-#define USB0_FUNCTION_API_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Variable Externs
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-void     usb0_api_function_init(uint8_t int_level, uint16_t mode, uint16_t clockmode);
-uint16_t usb0_api_function_IsConfigured(void);
-uint16_t usb0_function_GetDeviceState(void);
-uint16_t usb0_api_function_CtrlReadStart(uint32_t size, uint8_t *data);
-void     usb0_api_function_CtrlWriteStart(uint32_t size, uint8_t *data);
-uint16_t usb0_api_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
-uint16_t usb0_api_function_check_pipe_status(uint16_t pipe, uint32_t *size);
-void     usb0_api_function_clear_pipe_status(uint16_t pipe);
-void     usb0_api_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
-void     usb0_api_function_set_pid_buf(uint16_t pipe);
-void     usb0_api_function_set_pid_nak(uint16_t pipe);
-void     usb0_api_function_set_pid_stall(uint16_t pipe);
-void     usb0_api_function_clear_pid_stall(uint16_t pipe);
-uint16_t usb0_api_function_get_pid(uint16_t pipe);
-int32_t  usb0_api_function_check_stall(uint16_t pipe);
-void     usb0_api_function_set_sqclr(uint16_t pipe);
-void     usb0_api_function_set_sqset(uint16_t pipe);
-void     usb0_api_function_set_csclr(uint16_t pipe);
-void     usb0_api_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
-void     usb0_api_function_clear_brdy_sts(uint16_t pipe);
-void     usb0_api_function_clear_bemp_sts(uint16_t pipe);
-void     usb0_api_function_clear_nrdy_sts(uint16_t pipe);
-
-void     usb0_function_ClearFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_SetFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_SetAddress(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_SetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_SetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_SetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_SynchFrame(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_GetStatus(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_GetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_GetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_GetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Resrv_0(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Resrv_123(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Resrv_4(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Resrv_5(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* USB0_FUNCTION_API_H */
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function_dmacdrv.h
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function_dmacdrv.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_dmacdrv.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description  : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-#ifndef USB0_FUNCTION_DMACDRV_H
-#define USB0_FUNCTION_DMACDRV_H
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-typedef struct dmac_transinfo
-{
-    uint32_t src_addr;      /* Transfer source address                */
-    uint32_t dst_addr;      /* Transfer destination address           */
-    uint32_t count;         /* Transfer byte count                    */
-    uint32_t src_size;      /* Transfer source data size              */
-    uint32_t dst_size;      /* Transfer destination data size         */
-    uint32_t saddr_dir;     /* Transfer source address direction      */
-    uint32_t daddr_dir;     /* Transfer destination address direction */
-} dmac_transinfo_t;
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-/* ==== Transfer specification of the sample program ==== */
-#define DMAC_SAMPLE_SINGLE          (0)     /* Single transfer                   */
-#define DMAC_SAMPLE_CONTINUATION    (1)     /* Continuous transfer (use REN bit) */
-
-/* ==== DMA modes ==== */
-#define DMAC_MODE_REGISTER          (0)     /* Register mode */
-#define DMAC_MODE_LINK              (1)     /* Link mode     */
-
-/* ==== Transfer requests ==== */
-#define DMAC_REQ_MODE_EXT           (0)     /* External request                   */
-#define DMAC_REQ_MODE_PERI          (1)     /* On-chip peripheral module request  */
-#define DMAC_REQ_MODE_SOFT          (2)     /* Auto-request (request by software) */
-
-/* ==== DMAC transfer sizes ==== */
-#define DMAC_TRANS_SIZE_8           (0)     /* 8 bits    */
-#define DMAC_TRANS_SIZE_16          (1)     /* 16 bits   */
-#define DMAC_TRANS_SIZE_32          (2)     /* 32 bits   */
-#define DMAC_TRANS_SIZE_64          (3)     /* 64 bits   */
-#define DMAC_TRANS_SIZE_128         (4)     /* 128 bits  */
-#define DMAC_TRANS_SIZE_256         (5)     /* 256 bits  */
-#define DMAC_TRANS_SIZE_512         (6)     /* 512 bits  */
-#define DMAC_TRANS_SIZE_1024        (7)     /* 1024 bits */
-
-/* ==== Address increment for transferring ==== */
-#define DMAC_TRANS_ADR_NO_INC       (1)     /* Not increment */
-#define DMAC_TRANS_ADR_INC          (0)     /* Increment     */
-
-/* ==== Method for detecting DMA request ==== */
-#define DMAC_REQ_DET_FALL           (0)     /* Falling edge detection */
-#define DMAC_REQ_DET_RISE           (1)     /* Rising edge detection  */
-#define DMAC_REQ_DET_LOW            (2)     /* Low level detection    */
-#define DMAC_REQ_DET_HIGH           (3)     /* High level detection   */
-
-/* ==== Request Direction ==== */
-#define DMAC_REQ_DIR_SRC            (0)     /* DMAREQ is the source/ DMAACK is active when reading      */
-#define DMAC_REQ_DIR_DST            (1)     /* DMAREQ is the destination/ DMAACK is active when writing */
-
-/* ==== Descriptors ==== */
-#define DMAC_DESC_HEADER            (0)     /* Header              */
-#define DMAC_DESC_SRC_ADDR          (1)     /* Source Address      */
-#define DMAC_DESC_DST_ADDR          (2)     /* Destination Address */
-#define DMAC_DESC_COUNT             (3)     /* Transaction Byte    */
-#define DMAC_DESC_CHCFG             (4)     /* Channel Confg       */
-#define DMAC_DESC_CHITVL            (5)     /* Channel Interval    */
-#define DMAC_DESC_CHEXT             (6)     /* Channel Extension   */
-#define DMAC_DESC_LINK_ADDR         (7)     /* Link Address        */
-
-/* ==== On-chip peripheral module requests ===== */
-typedef enum dmac_request_factor
-{
-    DMAC_REQ_USB0_DMA0_TX,      /* USB_0 channel 0 transmit FIFO empty            */
-    DMAC_REQ_USB0_DMA0_RX,      /* USB_0 channel 0 receive FIFO full              */
-    DMAC_REQ_USB0_DMA1_TX,      /* USB_0 channel 1 transmit FIFO empty            */
-    DMAC_REQ_USB0_DMA1_RX,      /* USB_0 channel 1 receive FIFO full              */
-    DMAC_REQ_USB1_DMA0_TX,      /* USB_1 channel 0 transmit FIFO empty            */
-    DMAC_REQ_USB1_DMA0_RX,      /* USB_1 channel 0 receive FIFO full              */
-    DMAC_REQ_USB1_DMA1_TX,      /* USB_1 channel 1 transmit FIFO empty            */
-    DMAC_REQ_USB1_DMA1_RX,      /* USB_1 channel 1 receive FIFO full              */
-} dmac_request_factor_t;
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-void usb0_function_DMAC1_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
-                                        uint32_t request_factor, uint32_t req_direction);
-int32_t usb0_function_DMAC1_Open(uint32_t req);
-void usb0_function_DMAC1_Close(uint32_t *remain);
-void usb0_function_DMAC1_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
-
-void usb0_function_DMAC2_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
-                                        uint32_t request_factor, uint32_t req_direction);
-int32_t usb0_function_DMAC2_Open(uint32_t req);
-void usb0_function_DMAC2_Close(uint32_t *remain);
-void usb0_function_DMAC2_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* USB0_FUNCTION_DMACDRV_H */
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_dataio.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_dataio.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2933 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_dataio.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb0_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-static uint16_t g_usb0_function_mbw[(USB_FUNCTION_MAX_PIPE_NO + 1)];
-
-static void     usb0_function_start_receive_trns_c(uint16_t pipe, uint32_t size, uint8_t *data);
-static void     usb0_function_start_receive_trns_d0(uint16_t pipe, uint32_t size, uint8_t *data);
-static void     usb0_function_start_receive_trns_d1(uint16_t pipe, uint32_t size, uint8_t *data);
-static void     usb0_function_start_receive_dma_d0(uint16_t pipe, uint32_t size, uint8_t *data);
-static void     usb0_function_start_receive_dma_d1(uint16_t pipe, uint32_t size, uint8_t *data);
-static uint16_t usb0_function_read_dma_d0(uint16_t pipe);
-static uint16_t usb0_function_read_dma_d1(uint16_t pipe);
-static uint16_t usb0_function_write_dma_d0(uint16_t pipe);
-static uint16_t usb0_function_write_dma_d1(uint16_t pipe);
-
-static void     usb0_function_read_c_fifo(uint16_t pipe, uint16_t count);
-static void     usb0_function_write_c_fifo(uint16_t Pipe, uint16_t count);
-static void     usb0_function_read_d0_fifo(uint16_t pipe, uint16_t count);
-static void     usb0_function_write_d0_fifo(uint16_t pipe, uint16_t count);
-static void     usb0_function_read_d1_fifo(uint16_t pipe, uint16_t count);
-static void     usb0_function_write_d1_fifo(uint16_t pipe, uint16_t count);
-
-static void     usb0_function_clear_transaction_counter(uint16_t pipe);
-static void     usb0_function_set_transaction_counter(uint16_t pipe, uint32_t count);
-
-static uint32_t usb0_function_com_get_dmasize(uint32_t trncount, uint32_t dtptr);
-
-static uint16_t usb0_function_set_dfacc_d0(uint16_t mbw, uint32_t count);
-static uint16_t usb0_function_set_dfacc_d1(uint16_t mbw, uint32_t count);
-
-
-/*******************************************************************************
-* Function Name: usb0_function_start_send_transfer
-* Description  : Starts the USB data communication using pipe specified by the argument.
-* Arguments    : uint16_t  pipe    ; Pipe Number
-*              : uint32_t size     ; Data Size
-*              : uint8_t  *data    ; Data Address
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t status;
-    uint16_t usefifo;
-    uint16_t mbw;
-
-    g_usb0_function_data_count[pipe]   = size;
-    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    usb0_function_clear_bemp_sts(pipe);
-    usb0_function_clear_brdy_sts(pipe);
-    usb0_function_clear_nrdy_sts(pipe);
-
-    mbw = usb0_function_get_mbw(size, (uint32_t)data);
-
-    usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
-    switch (usefifo)
-    {
-        case USB_FUNCTION_D0FIFO_USE:
-        case USB_FUNCTION_D0FIFO_DMA:
-            usefifo = USB_FUNCTION_D0USE;
-        break;
-
-        case USB_FUNCTION_D1FIFO_USE:
-        case USB_FUNCTION_D1FIFO_DMA:
-            usefifo = USB_FUNCTION_D1USE;
-        break;
-
-        default:
-            usefifo = USB_FUNCTION_CUSE;
-        break;
-    };
-
-    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, usefifo, DEVDRV_USBF_NO, mbw);
-
-    usb0_function_clear_transaction_counter(pipe);
-
-    usb0_function_aclrm(pipe);
-
-    status = usb0_function_write_buffer(pipe);
-
-    if (status != DEVDRV_USBF_FIFOERROR)
-    {
-        usb0_function_set_pid_buf(pipe);
-    }
-
-    return status;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_buffer
-* Description  : Writes data in the buffer allocated in the pipe specified by
-*              : the argument. The FIFO for using is set in the pipe definition table.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_write_buffer (uint16_t pipe)
-{
-    uint16_t status;
-    uint16_t usefifo;
-
-    g_usb0_function_PipeIgnore[pipe] = 0;
-    usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
-    switch (usefifo)
-    {
-        case USB_FUNCTION_D0FIFO_USE:
-            status = usb0_function_write_buffer_d0(pipe);
-        break;
-
-        case USB_FUNCTION_D1FIFO_USE:
-            status = usb0_function_write_buffer_d1(pipe);
-        break;
-
-        case USB_FUNCTION_D0FIFO_DMA:
-            status = usb0_function_write_dma_d0(pipe);
-        break;
-
-        case USB_FUNCTION_D1FIFO_DMA:
-            status = usb0_function_write_dma_d1(pipe);
-        break;
-
-        default:
-            status = usb0_function_write_buffer_c(pipe);
-        break;
-    };
-
-    switch (status)
-    {
-        case DEVDRV_USBF_WRITING:                       /* Continue of data write */
-            usb0_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
-            usb0_function_enable_brdy_int(pipe);        /* Enable Ready Interrupt */
-        break;
-
-        case DEVDRV_USBF_WRITEEND:                      /* End of data write */
-        case DEVDRV_USBF_WRITESHRT:                     /* End of data write */
-            usb0_function_disable_brdy_int(pipe);       /* Disable Ready Interrupt */
-            usb0_function_clear_nrdy_sts(pipe);
-            usb0_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
-            /* for last transfer */
-            usb0_function_enable_bemp_int(pipe);        /* Enable Empty Interrupt */
-        break;
-
-        case DEVDRV_USBF_WRITEDMA:                      /* DMA write */
-            usb0_function_clear_nrdy_sts(pipe);
-            usb0_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
-        break;
-
-        case DEVDRV_USBF_FIFOERROR:                     /* FIFO access status */
-        default:
-            usb0_function_disable_brdy_int(pipe);       /* Disable Ready Interrupt */
-            usb0_function_disable_bemp_int(pipe);       /* Disable Empty Interrupt */
-            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
-        break;
-    }
-
-    return status;                      /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_buffer_c
-* Description  : Writes data in the buffer allocated in the pipe specified in
-*              : the argument. Writes data by CPU transfer using CFIFO.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_write_buffer_c (uint16_t pipe)
-{
-    uint32_t count;
-    uint16_t size;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-
-    if (g_usb0_function_CtrZeroLengthFlag == 1)
-    {
-        g_usb0_function_CtrZeroLengthFlag = 0;                  /* Zero Length Packet Flag CLR */
-        return DEVDRV_USBF_WRITEEND;
-    }
-
-    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-    if (pipe == USB_FUNCTION_PIPE0)
-    {
-        buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
-    }
-    else
-    {
-        buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
-    }
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    size = usb0_function_get_buf_size(pipe);                    /* Data buffer size */
-    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb0_function_data_count[pipe] <= (uint32_t)size)
-    {
-        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
-        count  = g_usb0_function_data_count[pipe];
-
-        if (count == 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
-        }
-    }
-    else
-    {
-        status = DEVDRV_USBF_WRITING;                           /* write continues */
-        count  = (uint32_t)size;
-    }
-
-    usb0_function_write_c_fifo(pipe, (uint16_t)count);
-
-    if (g_usb0_function_data_count[pipe] < (uint32_t)size)
-    {
-        g_usb0_function_data_count[pipe] = 0;
-
-        if (RZA_IO_RegRead_16(&USB200.CFIFOCTR, USB_CFIFOCTR_BVAL_SHIFT, USB_CFIFOCTR_BVAL) == 0)
-        {
-            USB200.CFIFOCTR = USB_FUNCTION_BITBVAL;             /* Short Packet */
-            g_usb0_function_CtrZeroLengthFlag = 1;              /* Zero Length Packet Flag */
-        }
-    }
-    else
-    {
-        g_usb0_function_data_count[pipe] -= count;
-    }
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_buffer_d0
-* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
-*              : Writes data by CPU transfer using D0FIFO.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_write_buffer_d0 (uint16_t pipe)
-{
-    uint32_t count;
-    uint16_t size;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-
-    mbw    = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    size = usb0_function_get_buf_size(pipe);                    /* Data buffer size */
-    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb0_function_data_count[pipe] <= (uint32_t)size)
-    {
-        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
-        count  = g_usb0_function_data_count[pipe];
-
-        if (count == 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
-        }
-    }
-    else
-    {
-        status = DEVDRV_USBF_WRITING;                           /* write continues */
-        count  = (uint32_t)size;
-    }
-
-    usb0_function_write_d0_fifo(pipe, (uint16_t)count);
-
-    if (g_usb0_function_data_count[pipe] < (uint32_t)size)
-    {
-        g_usb0_function_data_count[pipe] = 0;
-        if (RZA_IO_RegRead_16(&USB200.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
-        {
-            USB200.D0FIFOCTR = USB_FUNCTION_BITBVAL;            /* Short Packet */
-        }
-    }
-    else
-    {
-        g_usb0_function_data_count[pipe] -= count;
-    }
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_buffer_d1
-* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
-*              : Writes data by CPU transfer using D1FIFO.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_write_buffer_d1 (uint16_t pipe)
-{
-    uint32_t count;
-    uint16_t size;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-
-    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    size = usb0_function_get_buf_size(pipe);                    /* Data buffer size */
-    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb0_function_data_count[pipe] <= (uint32_t)size)
-    {
-        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
-        count  = g_usb0_function_data_count[pipe];
-
-        if (count == 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
-        }
-    }
-    else
-    {
-        status = DEVDRV_USBF_WRITING;                           /* write continues */
-        count  = (uint32_t)size;
-    }
-
-    usb0_function_write_d1_fifo(pipe, (uint16_t)count);
-
-    if (g_usb0_function_data_count[pipe] < (uint32_t)size)
-    {
-        g_usb0_function_data_count[pipe] = 0;
-
-        if (RZA_IO_RegRead_16(&USB200.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
-        {
-            USB200.D1FIFOCTR = USB_FUNCTION_BITBVAL;            /* Short Packet */
-        }
-    }
-    else
-    {
-        g_usb0_function_data_count[pipe] -= count;
-    }
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_dma_d0
-* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
-*              : Writes data by DMA transfer using D0FIFO.
-*              : The DMA-ch for using is specified by Userdef_USB_usb0_function_start_dma().
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           : Write end
-*              : DEVDRV_USBF_WRITESHRT          : short data
-*              : DEVDRV_USBF_WRITING            : Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           : Write DMA
-*              : DEVDRV_USBF_FIFOERROR          : FIFO status
-*******************************************************************************/
-static uint16_t usb0_function_write_dma_d0 (uint16_t pipe)
-{
-    uint32_t count;
-    uint16_t size;
-    uint16_t buffer;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t dfacc = 0;
-
-    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                            /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    size  = usb0_function_get_buf_size(pipe);                       /* Data buffer size */
-    count = g_usb0_function_data_count[pipe];
-
-    if (count != 0)
-    {
-        g_usb0_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe;
-
-        if ((count % size) != 0)
-        {
-            g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] = 1;
-        }
-        else
-        {
-            g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] = 0;
-        }
-
-        dfacc = usb0_function_set_dfacc_d0(mbw, count);
-
-        if (mbw == USB_FUNCTION_BITMBW_32)
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2;  /* 32bit transfer */
-        }
-        else if (mbw == USB_FUNCTION_BITMBW_16)
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1;  /* 16bit transfer */
-        }
-        else
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0;  /* 8bit transfer */
-        }
-
-        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo   = USB_FUNCTION_D0FIFO_DMA;
-        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].dir    = USB_FUNCTION_BUF2FIFO;
-        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
-        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes  = count;
-
-        Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
-
-        usb0_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
-
-        RZA_IO_RegWrite_16(&USB200.D0FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
-
-        g_usb0_function_data_count[pipe]    = 0;
-        g_usb0_function_data_pointer[pipe] += count;
-        status = DEVDRV_USBF_WRITEDMA;                              /* DMA write  */
-    }
-    else
-    {
-        if (RZA_IO_RegRead_16(&USB200.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
-        {
-            RZA_IO_RegWrite_16(&USB200.D0FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
-        }
-        status = DEVDRV_USBF_WRITESHRT;                             /* Short Packet is end of write */
-    }
-
-    return status;                                                  /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_dma_d1
-* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
-*              : Writes data by DMA transfer using D1FIFO.
-*              : The DMA-ch for using is specified by Userdef_USB_usb0_function_start_dma().
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           : Write end
-*              : DEVDRV_USBF_WRITESHRT          : short data
-*              : DEVDRV_USBF_WRITING            : Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           : Write DMA
-*              : DEVDRV_USBF_FIFOERROR          : FIFO status
-*******************************************************************************/
-static uint16_t usb0_function_write_dma_d1 (uint16_t pipe)
-{
-    uint32_t count;
-    uint16_t size;
-    uint16_t buffer;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t dfacc=0;
-
-    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                            /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    size  = usb0_function_get_buf_size(pipe);                       /* Data buffer size */
-    count = g_usb0_function_data_count[pipe];
-
-    if (count != 0)
-    {
-        g_usb0_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe;
-        if ((count % size) != 0)
-        {
-            g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] = 1;
-        }
-        else
-        {
-            g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] = 0;
-        }
-
-        dfacc = usb0_function_set_dfacc_d1(mbw, count);
-
-        if (mbw == USB_FUNCTION_BITMBW_32)
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2;  /* 32bit transfer */
-        }
-        else if (mbw == USB_FUNCTION_BITMBW_16)
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1;  /* 16bit transfer */
-        }
-        else
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0;  /* 8bit transfer */
-        }
-
-        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo   = USB_FUNCTION_D1FIFO_DMA;
-        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].dir    = USB_FUNCTION_BUF2FIFO;
-        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
-        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes  = count;
-
-        Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
-
-        usb0_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
-
-        RZA_IO_RegWrite_16(&USB200.D1FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
-
-        g_usb0_function_data_count[pipe]    = 0;
-        g_usb0_function_data_pointer[pipe] += count;
-
-        status = DEVDRV_USBF_WRITEDMA;                             /* DMA write  */
-    }
-    else
-    {
-        if (RZA_IO_RegRead_16(&USB200.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
-        {
-            RZA_IO_RegWrite_16(&USB200.D1FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
-        }
-        status = DEVDRV_USBF_WRITESHRT;                             /* Short Packet is end of write */
-    }
-
-    return status;                                                  /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_start_receive_transfer
-* Description  : Starts USB data reception using the pipe specified in the argument.
-*              : The FIFO for using is set in the pipe definition table.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-void usb0_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t usefifo;
-
-    usb0_function_clear_bemp_sts(pipe);
-    usb0_function_clear_brdy_sts(pipe);
-    usb0_function_clear_nrdy_sts(pipe);
-
-    usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
-    switch (usefifo)
-    {
-        case USB_FUNCTION_D0FIFO_USE:
-            usb0_function_start_receive_trns_d0(pipe, size, data);
-        break;
-
-        case USB_FUNCTION_D1FIFO_USE:
-            usb0_function_start_receive_trns_d1(pipe, size, data);
-        break;
-
-        case USB_FUNCTION_D0FIFO_DMA:
-            usb0_function_start_receive_dma_d0(pipe, size, data);
-        break;
-
-        case USB_FUNCTION_D1FIFO_DMA:
-            usb0_function_start_receive_dma_d1(pipe, size, data);
-        break;
-
-        default:
-            usb0_function_start_receive_trns_c(pipe, size, data);
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_start_receive_trns_c
-* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by CPU transfer using CFIFO.
-*              : When storing data in the buffer allocated in the pipe specified in the
-*              : argument, BRDY interrupt is generated to read data
-*              : in the interrupt.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_start_receive_trns_c (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb0_function_set_pid_nak(pipe);
-    g_usb0_function_data_count[pipe]   = size;
-    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb0_function_PipeIgnore[pipe]   = 0;
-
-    g_usb0_function_PipeDataSize[pipe] = size;
-    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    mbw = usb0_function_get_mbw(size, (uint32_t)data);
-    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_READ, mbw);
-    USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;
-
-    usb0_function_set_transaction_counter(pipe, size);
-
-    usb0_function_aclrm(pipe);
-
-    usb0_function_enable_nrdy_int(pipe);
-    usb0_function_enable_brdy_int(pipe);
-
-    usb0_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_start_receive_trns_d0
-* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by CPU transfer using D0FIFO.
-*              : This function does not read data from the buffer.
-*              : When storing data in the buffer allocated in the pipe specified
-*              : in the argument, BRDY interrupt is generated to read data in the
-*              : interrupt.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_start_receive_trns_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb0_function_set_pid_nak(pipe);
-    g_usb0_function_data_count[pipe]   = size;
-    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb0_function_PipeIgnore[pipe]   = 0;
-
-    g_usb0_function_PipeDataSize[pipe] = size;
-    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    mbw = usb0_function_get_mbw(size, (uint32_t)data);
-    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
-
-    usb0_function_set_transaction_counter(pipe, size);
-
-    usb0_function_aclrm(pipe);
-
-    usb0_function_enable_nrdy_int(pipe);
-    usb0_function_enable_brdy_int(pipe);
-
-    usb0_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_start_receive_trns_d1
-* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by CPU transfer using D1FIFO.
-*              : This function does not read data from the buffer.
-*              : When storing data in the buffer allocated in the pipe specified
-*              : in the argument, BRDY interrupt is generated to read data.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_start_receive_trns_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb0_function_set_pid_nak(pipe);
-    g_usb0_function_data_count[pipe]   = size;
-    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb0_function_PipeIgnore[pipe]   = 0;
-
-    g_usb0_function_PipeDataSize[pipe] = size;
-    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    mbw = usb0_function_get_mbw(size, (uint32_t)data);
-    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
-
-    usb0_function_set_transaction_counter(pipe, size);
-
-    usb0_function_aclrm(pipe);
-
-    usb0_function_enable_nrdy_int(pipe);
-    usb0_function_enable_brdy_int(pipe);
-
-    usb0_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_start_receive_dma_d0
-* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by DMA transfer using D0FIFO.
-*              : This function does not read data from the buffer.
-*              : When storing data in the buffer allocated in the pipe specified
-*              : in the argument, delivered read request to DMAC to read data from
-*              : the buffer by DMAC.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_start_receive_dma_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb0_function_set_pid_nak(pipe);
-    g_usb0_function_data_count[pipe]   = size;
-    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb0_function_PipeIgnore[pipe]   = 0;
-
-    g_usb0_function_PipeDataSize[pipe] = 0;
-    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    mbw = usb0_function_get_mbw(size, (uint32_t)data);
-    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
-
-    usb0_function_set_transaction_counter(pipe, size);
-
-    usb0_function_aclrm(pipe);
-
-    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        usb0_function_read_dma(pipe);
-
-        usb0_function_enable_nrdy_int(pipe);
-        usb0_function_enable_brdy_int(pipe);
-    }
-    else
-    {
-        usb0_function_enable_nrdy_int(pipe);
-        usb0_function_enable_brdy_int(pipe);
-    }
-
-    usb0_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_start_receive_dma_d1
-* Description  : Read data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by DMA transfer using D0FIFO.
-*              : This function does not read data from the buffer.
-*              : When storing data in the buffer allocated in the pipe specified
-*              : in the argument, delivered read request to DMAC to read data from
-*              : the buffer by DMAC.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_start_receive_dma_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb0_function_set_pid_nak(pipe);
-    g_usb0_function_data_count[pipe]   = size;
-    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb0_function_PipeIgnore[pipe]   = 0;
-
-    g_usb0_function_PipeDataSize[pipe] = 0;
-    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    mbw = usb0_function_get_mbw(size, (uint32_t)data);
-    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
-
-    usb0_function_set_transaction_counter(pipe, size);
-
-    usb0_function_aclrm(pipe);
-
-    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        usb0_function_read_dma(pipe);
-
-        usb0_function_enable_nrdy_int(pipe);
-        usb0_function_enable_brdy_int(pipe);
-    }
-    else
-    {
-        usb0_function_enable_nrdy_int(pipe);
-        usb0_function_enable_brdy_int(pipe);
-    }
-
-    usb0_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_buffer
-* Description  : Reads data from the buffer allocated in the pipe specified
-*              : in the argument.
-*              : Uses FIF0 set in the pipe definition table.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_read_buffer (uint16_t pipe)
-{
-    uint16_t status;
-
-    g_usb0_function_PipeIgnore[pipe] = 0;
-
-    if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
-    {
-        status = usb0_function_read_buffer_d0(pipe);
-    }
-    else if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
-    {
-        status = usb0_function_read_buffer_d1(pipe);
-    }
-    else
-    {
-        status = usb0_function_read_buffer_c(pipe);
-    }
-
-    switch (status)
-    {
-        case USB_FUNCTION_READING:                                      /* Continue of data read */
-        break;
-
-        case USB_FUNCTION_READEND:                                      /* End of data read */
-        case USB_FUNCTION_READSHRT:                                     /* End of data read */
-            usb0_function_disable_brdy_int(pipe);
-            g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
-            g_usb0_function_pipe_status[pipe]   = DEVDRV_USBF_PIPE_DONE;
-        break;
-
-        case USB_FUNCTION_READOVER:                                     /* buffer over */
-            if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
-            {
-                USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-            }
-            else if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
-            {
-                USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-            }
-            else
-            {
-                USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;                 /* Clear BCLR */
-            }
-            usb0_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
-            g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
-            g_usb0_function_pipe_status[pipe]   = DEVDRV_USBF_FIFOERROR;
-        break;
-
-        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access status */
-        default:
-            usb0_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
-            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
-        break;
-    }
-
-    return status;                                                      /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_buffer_c
-* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by CPU transfer using CFIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_read_buffer_c (uint16_t pipe)
-{
-    uint32_t count;
-    uint32_t dtln;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-
-    mbw    = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
-    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb0_function_data_count[pipe] < dtln)                /* Buffer Over ? */
-    {
-        status = USB_FUNCTION_READOVER;
-        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = g_usb0_function_data_count[pipe];
-    }
-    else if (g_usb0_function_data_count[pipe] == dtln)          /* just Receive Size */
-    {
-        status = USB_FUNCTION_READEND;
-        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = dtln;
-
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-        }
-    }
-    else                                                        /* continue Receive data */
-    {
-        status = USB_FUNCTION_READING;
-        count  = dtln;
-
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-    }
-
-    if (count == 0)                                             /* 0 length packet */
-    {
-        USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;                 /* Clear BCLR */
-    }
-    else
-    {
-        usb0_function_read_c_fifo(pipe, (uint16_t)count);
-    }
-
-    g_usb0_function_data_count[pipe] -= count;
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_buffer_d0
-* Description  : Reads data from the buffer allocated in the pipe specified in
-*              : the argument.
-*              : Reads data by CPU transfer using D0FIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_read_buffer_d0 (uint16_t pipe)
-{
-    uint32_t count;
-    uint32_t dtln;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t pipebuf_size;
-
-    mbw    = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
-    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb0_function_data_count[pipe] < dtln)                /* Buffer Over ? */
-    {
-        status = USB_FUNCTION_READOVER;
-        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = g_usb0_function_data_count[pipe];
-    }
-    else if (g_usb0_function_data_count[pipe] == dtln)          /* just Receive Size */
-    {
-        status = USB_FUNCTION_READEND;
-        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = dtln;
-
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-        }
-    }
-    else                                                        /* continue Receive data */
-    {
-        status = USB_FUNCTION_READING;
-        count  = dtln;
-
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-        else
-        {
-            pipebuf_size = usb0_function_get_buf_size(pipe);    /* Data buffer size */
-
-            if (count != pipebuf_size)
-            {
-                status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
-                usb0_function_set_pid_nak(pipe);                /* Set NAK */
-            }
-        }
-    }
-
-    if (count == 0)                                             /* 0 length packet */
-    {
-        USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-    }
-    else
-    {
-        usb0_function_read_d0_fifo(pipe, (uint16_t)count);
-    }
-
-    g_usb0_function_data_count[pipe] -= count;
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_buffer_d1
-* Description  : Reads data from the buffer allocated in the pipe specified
-*              : in the argument.
-*              : Reads data by CPU transfer using D1FIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_read_buffer_d1 (uint16_t pipe)
-{
-    uint32_t count;
-    uint32_t dtln;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t pipebuf_size;
-
-    mbw    = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
-    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb0_function_data_count[pipe] < dtln)                /* Buffer Over ? */
-    {
-        status = USB_FUNCTION_READOVER;
-        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = g_usb0_function_data_count[pipe];
-    }
-    else if (g_usb0_function_data_count[pipe] == dtln)          /* just Receive Size */
-    {
-        status = USB_FUNCTION_READEND;
-        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = dtln;
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-        }
-    }
-    else                                                        /* continue Receive data */
-    {
-        status = USB_FUNCTION_READING;
-        count  = dtln;
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-        else
-        {
-            pipebuf_size = usb0_function_get_buf_size(pipe);    /* Data buffer size */
-
-            if (count != pipebuf_size)
-            {
-                status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
-                usb0_function_set_pid_nak(pipe);                /* Set NAK */
-            }
-        }
-    }
-
-    if (count == 0)                                             /* 0 length packet */
-    {
-        USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-    }
-    else
-    {
-        usb0_function_read_d1_fifo(pipe, (uint16_t)count);
-    }
-
-    g_usb0_function_data_count[pipe] -= count;
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_dma
-* Description  : Reads data from the buffer allocated in the pipe specified
-*              : in the argument.
-*              : Reads data by DMA transfer using D0FIFO or D1FIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_read_dma (uint16_t pipe)
-{
-    uint16_t status;
-
-    g_usb0_function_PipeIgnore[pipe] = 0;
-    if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
-    {
-        status = usb0_function_read_dma_d0(pipe);
-    }
-    else
-    {
-        status = usb0_function_read_dma_d1(pipe);
-    }
-
-    switch (status)
-    {
-        case USB_FUNCTION_READING:                                      /* Continue of data read */
-        break;
-
-        case USB_FUNCTION_READZERO:                                     /* End of data read */
-            usb0_function_disable_brdy_int(pipe);
-            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-        break;
-
-        case USB_FUNCTION_READEND:                                      /* End of data read */
-        case USB_FUNCTION_READSHRT:                                     /* End of data read */
-            usb0_function_disable_brdy_int(pipe);
-
-            if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-            {
-                g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
-            }
-        break;
-
-        case USB_FUNCTION_READOVER:                                     /* buffer over */
-            usb0_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
-
-            if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-            {
-                g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
-            }
-            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
-        break;
-
-        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access status */
-        default:
-            usb0_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
-            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
-        break;
-    }
-
-    return status;                                                      /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_dma_d0
-* Description  : Writes data in the buffer allocated in the pipe specified
-*              : in the argument.
-*              : Reads data by DMA transfer using D0FIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READZERO         ; zero data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-static uint16_t usb0_function_read_dma_d0 (uint16_t pipe)
-{
-    uint32_t count;
-    uint32_t dtln;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t dfacc = 0;
-    uint16_t pipebuf_size;
-
-    g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
-
-    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-
-    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        count  = g_usb0_function_data_count[pipe];
-        status = USB_FUNCTION_READING;
-    }
-    else
-    {
-        buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
-
-        if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-        {
-            return DEVDRV_USBF_FIFOERROR;
-        }
-
-        dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
-        mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
-
-        if (g_usb0_function_data_count[pipe] < dtln)                /* Buffer Over ? */
-        {
-            status = USB_FUNCTION_READOVER;
-            count  = g_usb0_function_data_count[pipe];
-        }
-        else if (g_usb0_function_data_count[pipe] == dtln)          /* just Receive Size */
-        {
-            status = USB_FUNCTION_READEND;
-            count  = dtln;
-            if (count == 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            }
-
-            if ((count % mxps) != 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            }
-        }
-        else                                                        /* continue Receive data */
-        {
-            status = USB_FUNCTION_READING;
-            count  = dtln;
-
-            if (count == 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            }
-
-            if ((count % mxps) != 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            }
-            else
-            {
-                pipebuf_size = usb0_function_get_buf_size(pipe);    /* Data buffer size */
-                if (count != pipebuf_size)
-                {
-                    status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
-                }
-            }
-        }
-    }
-
-    if (count == 0)                                                 /* 0 length packet */
-    {
-        if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-        {
-            USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-            status = USB_FUNCTION_READZERO;                         /* Null Packet receive */
-        }
-        else
-        {
-            usb0_function_set_curpipe(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
-                                                                    /* transaction counter No set */
-                                                                    /* FRDY = 1, DTLN = 0 -> BRDY */
-        }
-    }
-    else
-    {
-        dfacc = usb0_function_set_dfacc_d0(mbw, count);
-
-        if (mbw == USB_FUNCTION_BITMBW_32)
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2;  /* 32bit transfer */
-        }
-        else if (mbw == USB_FUNCTION_BITMBW_16)
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1;  /* 16bit transfer */
-        }
-        else
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0;  /* 8bit transfer */
-        }
-
-        g_usb0_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe;        /* not use in read operation */
-        g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] = 0;           /* not use in read operation */
-
-        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo   = USB_FUNCTION_D0FIFO_DMA;
-        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].dir    = USB_FUNCTION_FIFO2BUF;
-        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
-        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes  = count;
-
-        if (status == USB_FUNCTION_READING)
-        {
-            g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSY;
-        }
-        else
-        {
-            g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSYEND;
-        }
-
-        Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
-
-        usb0_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
-
-        RZA_IO_RegWrite_16(&USB200.D0FIFOSEL,
-                            1,
-                            USB_DnFIFOSEL_DREQE_SHIFT,
-                            USB_DnFIFOSEL_DREQE);
-    }
-
-    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-    {
-        g_usb0_function_data_count[pipe]   -= count;
-        g_usb0_function_data_pointer[pipe] += count;
-        g_usb0_function_PipeDataSize[pipe] += count;
-    }
-
-    return status;                                                  /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_dma_d1
-* Description  : Reads data from the buffer allocated in the pipe specified in
-*              : the argument.
-*              : Reads data by DMA transfer using D1FIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READZERO         ; zero data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-static uint16_t usb0_function_read_dma_d1 (uint16_t pipe)
-{
-    uint32_t count;
-    uint32_t dtln;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t dfacc=0;
-    uint16_t pipebuf_size;
-
-    g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
-
-    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-
-    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        count  = g_usb0_function_data_count[pipe];
-        status = USB_FUNCTION_READING;
-    }
-    else
-    {
-        buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
-        if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-        {
-            return DEVDRV_USBF_FIFOERROR;
-        }
-
-        dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
-        mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
-
-        if (g_usb0_function_data_count[pipe] < dtln)                /* Buffer Over ? */
-        {
-            status = USB_FUNCTION_READOVER;
-            count  = g_usb0_function_data_count[pipe];
-        }
-        else if (g_usb0_function_data_count[pipe] == dtln)          /* just Receive Size */
-        {
-            status = USB_FUNCTION_READEND;
-            count  = dtln;
-            if (count == 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            }
-
-            if ((count % mxps) != 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            }
-        }
-        else                                                        /* continue Receive data */
-        {
-            status = USB_FUNCTION_READING;
-            count  = dtln;
-            if (count == 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            }
-
-            if ((count % mxps) != 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            }
-            else
-            {
-                pipebuf_size = usb0_function_get_buf_size(pipe);    /* Data buffer size */
-                if (count != pipebuf_size)
-                {
-                    status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
-                }
-            }
-        }
-    }
-
-    if (count == 0)                                                 /* 0 length packet */
-    {
-        if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-        {
-            USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-            status = USB_FUNCTION_READZERO;                         /* Null Packet receive */
-        }
-        else
-        {
-            usb0_function_set_curpipe(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
-                                                                    /* transaction counter No set */
-                                                                    /* FRDY = 1, DTLN = 0 -> BRDY */
-        }
-    }
-    else
-    {
-        dfacc = usb0_function_set_dfacc_d1(mbw, count);
-
-        if (mbw == USB_FUNCTION_BITMBW_32)
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2;  /* 32bit transfer */
-        }
-        else if (mbw == USB_FUNCTION_BITMBW_16)
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1;  /* 16bit transfer */
-        }
-        else
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0;  /* 8bit transfer */
-        }
-
-        g_usb0_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe;        /* not use in read operation */
-        g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] = 0;           /* not use in read operation */
-
-        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo   = USB_FUNCTION_D1FIFO_DMA;
-        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].dir    = USB_FUNCTION_FIFO2BUF;
-        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
-        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes  = count;
-
-        if (status == USB_FUNCTION_READING)
-        {
-            g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSY;
-        }
-        else
-        {
-            g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSYEND;
-        }
-
-        Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
-
-        usb0_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
-
-        RZA_IO_RegWrite_16(&USB200.D1FIFOSEL,
-                            1,
-                            USB_DnFIFOSEL_DREQE_SHIFT,
-                            USB_DnFIFOSEL_DREQE);
-    }
-
-    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-    {
-        g_usb0_function_data_count[pipe]   -= count;
-        g_usb0_function_data_pointer[pipe] += count;
-        g_usb0_function_PipeDataSize[pipe] += count;
-    }
-
-    return status;                                                  /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_change_fifo_port
-* Description  : Allocates FIF0 specified by the argument in the pipe assigned
-*              : by the argument. After allocating FIF0, waits in the software
-*              : till the corresponding pipe becomes ready.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t fifosel   ; Select FIFO
-*              : uint16_t isel      ; FIFO Access Direction
-*              : uint16_t mbw       ; FIFO Port Access Bit Width
-* Return Value : DEVDRV_USBF_FIFOERROR         ; Error
-*              : Others            ; CFIFOCTR/D0FIFOCTR/D1FIFOCTR Register Value
-*******************************************************************************/
-uint16_t usb0_function_change_fifo_port (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
-{
-    uint16_t buffer;
-    uint32_t loop;
-    volatile uint32_t loop2;
-
-    usb0_function_set_curpipe(pipe, fifosel, isel, mbw);
-
-    for (loop = 0; loop < 4; loop++)
-    {
-        switch (fifosel)
-        {
-            case USB_FUNCTION_CUSE:
-                buffer = USB200.CFIFOCTR;
-            break;
-
-            case USB_FUNCTION_D0USE:
-            case USB_FUNCTION_D0DMA:
-                buffer = USB200.D0FIFOCTR;
-            break;
-
-            case USB_FUNCTION_D1USE:
-            case USB_FUNCTION_D1DMA:
-                buffer = USB200.D1FIFOCTR;
-            break;
-
-            default:
-                buffer = 0;
-            break;
-        }
-
-        if ((buffer & USB_FUNCTION_BITFRDY) == USB_FUNCTION_BITFRDY)
-        {
-            return buffer;
-        }
-
-        loop2 = 25;
-        while (loop2-- > 0)
-        {
-            /* wait */
-        }
-    }
-
-    return DEVDRV_USBF_FIFOERROR;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_curpipe
-* Description  : Allocates FIF0 specified by the argument in the pipe assigned
-*              : by the argument.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t fifosel   ; Select FIFO
-*              : uint16_t isel      ; FIFO Access Direction
-*              : uint16_t mbw       ; FIFO Port Access Bit Width
-* Return Value : none
-*******************************************************************************/
-void usb0_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
-{
-    uint16_t buffer;
-    uint32_t loop;
-    volatile uint32_t loop2;
-
-    g_usb0_function_mbw[pipe] = mbw;
-
-    switch (fifosel)
-    {
-        case USB_FUNCTION_CUSE:
-            buffer  = USB200.CFIFOSEL;
-            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
-            buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
-            USB200.CFIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
-                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(isel | pipe | mbw);
-            USB200.CFIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
-                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        case USB_FUNCTION_D0DMA:
-        case USB_FUNCTION_D0USE:
-            buffer  = USB200.D0FIFOSEL;
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
-            USB200.D0FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
-                        (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(pipe | mbw);
-            USB200.D0FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
-                        (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        case USB_FUNCTION_D1DMA:
-        case USB_FUNCTION_D1USE:
-            buffer  = USB200.D1FIFOSEL;
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
-            USB200.D1FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
-                        (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(pipe | mbw);
-            USB200.D1FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
-                        (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        default:
-        break;
-    }
-
-    /* Cautions !!!
-     * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
-     * For details, please look at the data sheet.   */
-    loop2 = 100;
-
-    while (loop2-- > 0)
-    {
-        /* wait */
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_curpipe2
-* Description  : Allocates FIF0 specified by the argument in the pipe assigned
-*              : by the argument.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t fifosel   ; Select FIFO
-*              : uint16_t isel      ; FIFO Access Direction
-*              : uint16_t mbw       ; FIFO Port Access Bit Width
-*              : uint16_t dfacc     ; DFACC Access mode
-* Return Value : none
-*******************************************************************************/
-void usb0_function_set_curpipe2 (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc)
-{
-    uint16_t buffer;
-    uint32_t loop;
-#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
-    uint32_t dummy;
-#endif
-    volatile uint32_t loop2;
-
-    g_usb0_function_mbw[pipe] = mbw;
-
-    switch (fifosel)
-    {
-        case USB_FUNCTION_CUSE:
-            buffer  = USB200.CFIFOSEL;
-            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
-            buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
-            USB200.CFIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
-                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(isel | pipe | mbw);
-            USB200.CFIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
-                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        case USB_FUNCTION_D0DMA:
-        case USB_FUNCTION_D0USE:
-            buffer  = USB200.D0FIFOSEL;
-#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-
-            if (dfacc != 0)
-            {
-                buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
-            }
-#else
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
-#endif
-            USB200.D0FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-
-#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
-            if (dfacc != 0)
-            {
-                dummy = USB200.D0FIFO.UINT32;
-            }
-#endif
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(pipe | mbw);
-            USB200.D0FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        case USB_FUNCTION_D1DMA:
-        case USB_FUNCTION_D1USE:
-            buffer  = USB200.D1FIFOSEL;
-#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-
-            if (dfacc != 0)
-            {
-                buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
-            }
-#else
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
-#endif
-            USB200.D1FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
-            if (dfacc != 0)
-            {
-                dummy = USB200.D1FIFO.UINT32;
-                loop = dummy;                   // avoid warning.
-            }
-#endif
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(pipe | mbw);
-            USB200.D1FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        default:
-        break;
-    }
-
-    /* Cautions !!!
-     * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
-     * For details, please look at the data sheet.   */
-    loop2 = 100;
-
-    while (loop2-- > 0)
-    {
-        /* wait */
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_c_fifo
-* Description  : Writes data in CFIFO.
-*              : Writes data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating CFIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb0_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_write_c_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            USB200.CFIFO.UINT8[HH] = *g_usb0_function_data_pointer[pipe];
-            g_usb0_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)(count / 2); even; --even)
-        {
-            USB200.CFIFO.UINT16[H] = *((uint16_t *)g_usb0_function_data_pointer[pipe]);
-            g_usb0_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)(count / 4); even; --even)
-        {
-            USB200.CFIFO.UINT32 = *((uint32_t *)g_usb0_function_data_pointer[pipe]);
-            g_usb0_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_c_fifo
-* Description  : Reads data from CFIFO.
-*              : Reads data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating CFIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb0_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_read_c_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            *g_usb0_function_data_pointer[pipe] = USB200.CFIFO.UINT8[HH];
-            g_usb0_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)((count + 1) / 2); even; --even)
-        {
-            *((uint16_t *)g_usb0_function_data_pointer[pipe]) = USB200.CFIFO.UINT16[H];
-            g_usb0_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)((count + 3) / 4); even; --even)
-        {
-            *((uint32_t *)g_usb0_function_data_pointer[pipe]) = USB200.CFIFO.UINT32;
-            g_usb0_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_d0_fifo
-* Description  : Writes data in D0FIFO.
-*              : Writes data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating CFIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb0_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_write_d0_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            USB200.D0FIFO.UINT8[HH] = *g_usb0_function_data_pointer[pipe];
-            g_usb0_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)(count / 2); even; --even)
-        {
-            USB200.D0FIFO.UINT16[H] = *((uint16_t *)g_usb0_function_data_pointer[pipe]);
-            g_usb0_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)(count / 4); even; --even)
-        {
-            USB200.D0FIFO.UINT32 = *((uint32_t *)g_usb0_function_data_pointer[pipe]);
-            g_usb0_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_d0_fifo
-* Description  : Reads data from D0FIFO.
-*              : Reads data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating DOFIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb0_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_read_d0_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            *g_usb0_function_data_pointer[pipe] = USB200.D0FIFO.UINT8[HH];
-            g_usb0_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)((count + 1) / 2); even; --even)
-        {
-            *((uint16_t *)g_usb0_function_data_pointer[pipe]) = USB200.D0FIFO.UINT16[H];
-            g_usb0_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)((count + 3) / 4); even; --even)
-        {
-            *((uint32_t *)g_usb0_function_data_pointer[pipe]) = USB200.D0FIFO.UINT32;
-            g_usb0_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_d1_fifo
-* Description  : Writes data in D1FIFO.
-*              : Writes data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating D1FIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb0_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_write_d1_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            USB200.D1FIFO.UINT8[HH] = *g_usb0_function_data_pointer[pipe];
-            g_usb0_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)(count / 2); even; --even)
-        {
-            USB200.D1FIFO.UINT16[H] = *((uint16_t *)g_usb0_function_data_pointer[pipe]);
-            g_usb0_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)(count / 4); even; --even)
-        {
-            USB200.D1FIFO.UINT32 = *((uint32_t *)g_usb0_function_data_pointer[pipe]);
-            g_usb0_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_d1_fifo
-* Description  : Reads data from D1FIFO.
-*              : Reads data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating D1FIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb0_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_read_d1_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            *g_usb0_function_data_pointer[pipe] = USB200.D1FIFO.UINT8[HH];
-            g_usb0_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)((count + 1) / 2); even; --even)
-        {
-            *((uint16_t *)g_usb0_function_data_pointer[pipe]) = USB200.D1FIFO.UINT16[H];
-            g_usb0_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)((count + 3) / 4); even; --even)
-        {
-            *((uint32_t *)g_usb0_function_data_pointer[pipe]) = USB200.D1FIFO.UINT32;
-            g_usb0_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_com_get_dmasize
-* Description  : Calculates access width of DMA transfer by the argument to
-*              : return as the Return Value.
-* Arguments    : uint32_t trncount   : transfer byte
-*              : uint32_t dtptr      : transfer data pointer
-* Return Value : DMA transfer size    : 0   8bit
-*              :                      : 1  16bit
-*              :                      : 2  32bit
-*******************************************************************************/
-static uint32_t usb0_function_com_get_dmasize (uint32_t trncount, uint32_t dtptr)
-{
-    uint32_t size;
-
-    if (((trncount & 0x0001) != 0) || ((dtptr & 0x00000001) != 0))
-    {
-        /*  When transfer byte count is odd         */
-        /* or transfer data area is 8-bit alignment */
-        size = 0;           /* 8bit */
-    }
-    else if (((trncount & 0x0003) != 0) || ((dtptr & 0x00000003) != 0))
-    {
-        /* When the transfer byte count is multiples of 2 */
-        /* or the transfer data area is 16-bit alignment */
-        size = 1;           /* 16bit */
-    }
-    else
-    {
-        /* When the transfer byte count is multiples of 4 */
-        /* or the transfer data area is 32-bit alignment */
-        size = 2;           /* 32bit */
-    }
-
-    return size;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_get_mbw
-* Description  : Calculates access width of DMA to return the value set in MBW.
-* Arguments    : uint32_t trncount   : transfer byte
-*              : uint32_t dtptr      : transfer data pointer
-* Return Value : FIFO transfer size   : USB_FUNCTION_BITMBW_8    8bit
-*              :                      : USB_FUNCTION_BITMBW_16  16bit
-*              :                      : USB_FUNCTION_BITMBW_32  32bit
-*******************************************************************************/
-uint16_t usb0_function_get_mbw (uint32_t trncount, uint32_t dtptr)
-{
-    uint32_t size;
-    uint16_t mbw;
-
-    size = usb0_function_com_get_dmasize(trncount, dtptr);
-
-    if (size == 0)
-    {
-        /* 8bit */
-        mbw = USB_FUNCTION_BITMBW_8;
-    }
-    else if (size == 1)
-    {
-        /* 16bit */
-        mbw = USB_FUNCTION_BITMBW_16;
-    }
-    else
-    {
-        /* 32bit */
-        mbw = USB_FUNCTION_BITMBW_32;
-    }
-
-    return mbw;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_transaction_counter
-* Description  : Sets transaction counter by the argument(PIPEnTRN).
-*              : Clears transaction before setting to enable transaction counter setting.
-* Arguments    : uint16_t pipe     ; Pipe number
-*              : uint32_t bsize    : Data transfer size
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_set_transaction_counter (uint16_t pipe, uint32_t bsize)
-{
-    uint16_t mxps;
-    uint16_t cnt;
-
-    if (bsize  == 0)
-    {
-        return;
-    }
-
-    mxps = usb0_function_get_mxps(pipe);            /* Max Packet Size */
-
-    if ((bsize % mxps) == 0)
-    {
-        cnt = (uint16_t)(bsize / mxps);
-    }
-    else
-    {
-        cnt = (uint16_t)((bsize / mxps) + 1);
-    }
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPE1TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPE2TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPE3TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPE4TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPE5TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPE9TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB200.PIPEATRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPEATRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPEATRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPEBTRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB200.PIPECTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPECTRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPECTRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPEDTRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB200.PIPEETRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPEETRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPEETRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPEFTRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_clear_transaction_counter
-* Description  : Clears the transaction counter by the argument.
-*              : After executing this function, the transaction counter is invalid.
-* Arguments    : uint16_t pipe     ; Pipe number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_clear_transaction_counter (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB200.PIPEATRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPEATRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB200.PIPECTRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPECTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB200.PIPEETRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPEETRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_stop_transfer
-* Description  : Stops the USB transfer in the pipe specified by the argument.
-*              : After stopping the USB transfer, clears the buffer allocated in
-*              : the pipe.
-*              : After executing this function, allocation in FIF0 becomes USB_FUNCTION_PIPE0;
-*              : invalid. After executing this function, BRDY/NRDY/BEMP interrupt
-*              : in the corresponding pipe becomes invalid. Sequence bit is also
-*              : cleared.
-* Arguments    : uint16_t  pipe     ; Pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_stop_transfer (uint16_t pipe)
-{
-    uint16_t usefifo;
-    uint32_t remain;
-    uint16_t fifo;
-
-    usb0_function_set_pid_nak(pipe);
-
-    usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-    switch (usefifo)
-    {
-        case USB_FUNCTION_D0FIFO_USE:
-            usb0_function_clear_transaction_counter(pipe);
-            USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
-            fifo = USB_FUNCTION_D0USE;
-        break;
-
-        case USB_FUNCTION_D1FIFO_USE:
-            usb0_function_clear_transaction_counter(pipe);
-            USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
-            fifo = USB_FUNCTION_D1USE;
-        break;
-
-        case USB_FUNCTION_D0FIFO_DMA:
-            remain = Userdef_USB_usb0_function_stop_dma0();
-            usb0_function_dma_stop_d0(pipe, remain);
-            usb0_function_clear_transaction_counter(pipe);
-            USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
-            fifo = USB_FUNCTION_D0DMA;
-        break;
-
-        case USB_FUNCTION_D1FIFO_DMA:
-            remain = Userdef_USB_usb0_function_stop_dma1();
-            usb0_function_dma_stop_d1(pipe, remain);
-            usb0_function_clear_transaction_counter(pipe);
-            USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
-            fifo = USB_FUNCTION_D1DMA;
-        break;
-
-        default:
-            usb0_function_clear_transaction_counter(pipe);
-            USB200.CFIFOCTR =  USB_FUNCTION_BITBCLR;        /* Buffer Clear */
-            fifo = USB_FUNCTION_CUSE;
-        break;
-    }
-
-    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, fifo, DEVDRV_USBF_NO, USB_FUNCTION_BITMBW_16);
-
-    /* Interrupt of pipe set is disabled */
-    usb0_function_disable_brdy_int(pipe);
-    usb0_function_disable_nrdy_int(pipe);
-    usb0_function_disable_bemp_int(pipe);
-
-    usb0_function_aclrm(pipe);
-    usb0_function_set_csclr(pipe);
-
-    if ( g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT )
-    {
-        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
-    }
-
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_dfacc_d0
-* Description  : Sets the DFACC setting value in D0FIFO using the transfer size.
-* Arguments    : uint16_t mbw     ; MBW
-*              : uint16_t count   ; data count
-* Return Value : DFACC Access mode
-*******************************************************************************/
-static uint16_t usb0_function_set_dfacc_d0 (uint16_t mbw, uint32_t count)
-{
-    uint16_t dfacc = 0;
-
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-    RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                        0,
-                        USB_DnFBCFG_DFACC_SHIFT,
-                        USB_DnFBCFG_DFACC);
-    RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                        0,
-                        USB_DnFBCFG_TENDE_SHIFT,
-                        USB_DnFBCFG_TENDE);
-    dfacc = 0;
-#else
-    if (mbw == USB_FUNCTION_BITMBW_32)
-    {
-        if ((count % 32) == 0)
-        {
-            /* 32byte transfer */
-            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                                2,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 2;
-        }
-        else if ((count % 16) == 0)
-        {
-            /* 16byte transfer */
-            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                                1,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 1;
-        }
-        else
-        {
-            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                                0,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 0;
-        }
-    }
-    else if (mbw == USB_FUNCTION_BITMBW_16)
-    {
-        RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                            0,
-                            USB_DnFBCFG_DFACC_SHIFT,
-                            USB_DnFBCFG_DFACC);
-        RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                            0,
-                            USB_DnFBCFG_TENDE_SHIFT,
-                            USB_DnFBCFG_TENDE);
-        dfacc = 0;
-    }
-    else
-    {
-        RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                            0,
-                            USB_DnFBCFG_DFACC_SHIFT,
-                            USB_DnFBCFG_DFACC);
-        RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                            0,
-                            USB_DnFBCFG_TENDE_SHIFT,
-                            USB_DnFBCFG_TENDE);
-        dfacc = 0;
-    }
-#endif
-    return dfacc;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_dfacc_d1
-* Description  : Set the DFACC setting value in D1FIFO using the transfer size.
-* Arguments    : uint16_t mbw     ; MBW
-*              : uint16_t count   ; data count
-* Return Value : DFACC Access mode
-*******************************************************************************/
-static uint16_t usb0_function_set_dfacc_d1 (uint16_t mbw, uint32_t count)
-{
-    uint16_t dfacc = 0;
-
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-    RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                        0,
-                        USB_DnFBCFG_DFACC_SHIFT,
-                        USB_DnFBCFG_DFACC);
-    RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                        0,
-                        USB_DnFBCFG_TENDE_SHIFT,
-                        USB_DnFBCFG_TENDE);
-    dfacc = 0;
-#else
-    if (mbw == USB_FUNCTION_BITMBW_32)
-    {
-        if ((count % 32) == 0)
-        {
-            /* 32byte transfer */
-            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                                2,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 2;
-        }
-        else if ((count % 16) == 0)
-        {
-            /* 16byte transfer */
-            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                                1,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 1;
-        }
-        else
-        {
-            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                                0,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 0;
-        }
-    }
-    else if (mbw == USB_FUNCTION_BITMBW_16)
-    {
-        RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                            0,
-                            USB_DnFBCFG_DFACC_SHIFT,
-                            USB_DnFBCFG_DFACC);
-        RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                            0,
-                            USB_DnFBCFG_TENDE_SHIFT,
-                            USB_DnFBCFG_TENDE);
-        dfacc = 0;
-    }
-    else
-    {
-        RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                            0,
-                            USB_DnFBCFG_DFACC_SHIFT,
-                            USB_DnFBCFG_DFACC);
-        RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                            0,
-                            USB_DnFBCFG_TENDE_SHIFT,
-                            USB_DnFBCFG_TENDE);
-        dfacc = 0;
-    }
-#endif
-
-    return dfacc;
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_dma.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_dma.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,346 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_dma.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb0_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-static void usb0_function_dmaint(uint16_t fifo);
-static void usb0_function_dmaint_buf2fifo(uint16_t pipe);
-static void usb0_function_dmaint_fifo2buf(uint16_t pipe);
-
-
-/*******************************************************************************
-* Function Name: usb0_function_dma_stop_d0
-* Description  : D0FIFO DMA stop
-* Arguments    : uint16_t pipe      : pipe number
-*              : uint32_t remain    : transfer byte
-* Return Value : none
-*******************************************************************************/
-void usb0_function_dma_stop_d0 (uint16_t pipe, uint32_t remain)
-{
-    uint16_t dtln;
-    uint16_t dfacc;
-    uint16_t buffer;
-    uint16_t sds_b = 1;
-
-    dfacc = RZA_IO_RegRead_16(&USB200.D0FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
-
-    if (dfacc == 2)
-    {
-        sds_b = 32;
-    }
-    else if (dfacc == 1)
-    {
-        sds_b = 16;
-    }
-    else
-    {
-        if (g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 2)
-        {
-            sds_b = 4;
-        }
-        else if (g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 1)
-        {
-            sds_b = 2;
-        }
-        else
-        {
-            sds_b = 1;
-        }
-    }
-
-    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
-        {
-            buffer = USB200.D0FIFOCTR;
-            dtln   = (buffer & USB_FUNCTION_BITDTLN);
-
-            if ((dtln % sds_b) != 0)
-            {
-                remain += (sds_b - (dtln % sds_b));
-            }
-            g_usb0_function_PipeDataSize[pipe] = (g_usb0_function_data_count[pipe] - remain);
-            g_usb0_function_data_count[pipe]   = remain;
-        }
-    }
-
-    RZA_IO_RegWrite_16(&USB200.D0FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_dma_stop_d1
-* Description  : D1FIFO DMA stop
-* Arguments    : uint16_t pipe      : pipe number
-*              : uint32_t remain    : transfer byte
-* Return Value : none
-*******************************************************************************/
-void usb0_function_dma_stop_d1 (uint16_t pipe, uint32_t remain)
-{
-    uint16_t dtln;
-    uint16_t dfacc;
-    uint16_t buffer;
-    uint16_t sds_b = 1;
-
-    dfacc = RZA_IO_RegRead_16(&USB200.D1FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
-
-    if (dfacc == 2)
-    {
-        sds_b = 32;
-    }
-    else if (dfacc == 1)
-    {
-        sds_b = 16;
-    }
-    else
-    {
-        if (g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 2)
-        {
-            sds_b = 4;
-        }
-        else if (g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 1)
-        {
-            sds_b = 2;
-        }
-        else
-        {
-            sds_b = 1;
-        }
-    }
-
-    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
-        {
-            buffer = USB200.D1FIFOCTR;
-            dtln   = (buffer & USB_FUNCTION_BITDTLN);
-
-            if ((dtln % sds_b) != 0)
-            {
-                remain += (sds_b - (dtln % sds_b));
-            }
-            g_usb0_function_PipeDataSize[pipe] = (g_usb0_function_data_count[pipe] - remain);
-            g_usb0_function_data_count[pipe]   = remain;
-        }
-    }
-
-    RZA_IO_RegWrite_16(&USB200.D1FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_dma_interrupt_d0fifo
-* Description  : This function is DMA interrupt handler entry.
-*              : Execute usb0_function_dmaint() after disabling DMA interrupt in this function.
-*              : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D0FIFO_DMA is
-*              : specified by dma->fifo.
-*              : Register this function as DMA complete interrupt.
-* Arguments    : uint32_t int_sense ; Interrupts detection mode
-*              :                    ;  INTC_LEVEL_SENSITIVE : Level sense
-*              :                    ;  INTC_EDGE_TRIGGER : Edge trigger
-* Return Value : none
-*******************************************************************************/
-void usb0_function_dma_interrupt_d0fifo (uint32_t int_sense)
-{
-    usb0_function_dmaint(USB_FUNCTION_D0FIFO);
-    g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_dma_interrupt_d1fifo
-* Description  : This function is DMA interrupt handler entry.
-*              : Execute usb0_function_dmaint() after disabling DMA interrupt in this function.
-*              : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D1FIFO_DMA is
-*              : specified by dma->fifo.
-*              : Register this function as DMA complete interrupt.
-* Arguments    : uint32_t int_sense ; Interrupts detection mode
-*              :                    ;  INTC_LEVEL_SENSITIVE : Level sense
-*              :                    ;  INTC_EDGE_TRIGGER : Edge trigger
-* Return Value : none
-*******************************************************************************/
-void usb0_function_dma_interrupt_d1fifo (uint32_t int_sense)
-{
-    usb0_function_dmaint(USB_FUNCTION_D1FIFO);
-    g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_dmaint
-* Description  : This function is DMA transfer end interrupt
-* Arguments    : uint16_t fifo  ; fifo number
-*              :                ;  USB_FUNCTION_D0FIFO
-*              :                ;  USB_FUNCTION_D1FIFO
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_dmaint (uint16_t fifo)
-{
-    uint16_t pipe;
-
-    pipe = g_usb0_function_DmaPipe[fifo];
-
-    if (g_usb0_function_DmaInfo[fifo].dir == USB_FUNCTION_BUF2FIFO)
-    {
-        usb0_function_dmaint_buf2fifo(pipe);
-    }
-    else
-    {
-        usb0_function_dmaint_fifo2buf(pipe);
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_dmaint_fifo2buf
-* Description  : Executes read completion from FIFO by DMAC.
-* Arguments    : uint16_t pipe      : pipe number
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_dmaint_fifo2buf (uint16_t pipe)
-{
-    uint32_t remain;
-    uint16_t useport;
-
-    if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
-    {
-        useport = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
-        if (useport == USB_FUNCTION_D0FIFO_DMA)
-        {
-            remain = Userdef_USB_usb0_function_stop_dma0();
-            usb0_function_dma_stop_d0(pipe, remain);
-
-            if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-            {
-                if (g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] == USB_FUNCTION_DMA_BUSYEND)
-                {
-                    USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;
-                    g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                }
-                else
-                {
-                    usb0_function_enable_brdy_int(pipe);
-                }
-            }
-        }
-        else
-        {
-            remain = Userdef_USB_usb0_function_stop_dma1();
-            usb0_function_dma_stop_d1(pipe, remain);
-
-            if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-            {
-                if (g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] == USB_FUNCTION_DMA_BUSYEND)
-                {
-                    USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;
-                    g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                }
-                else
-                {
-                    usb0_function_enable_brdy_int(pipe);
-                }
-            }
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_dmaint_buf2fifo
-* Description  : Executes write completion in FIFO by DMAC.
-* Arguments    : uint16_t pipe      : pipe number
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_dmaint_buf2fifo (uint16_t pipe)
-{
-    uint32_t remain;
-    uint16_t useport;
-
-    useport = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
-    if (useport == USB_FUNCTION_D0FIFO_DMA)
-    {
-        remain = Userdef_USB_usb0_function_stop_dma0();
-        usb0_function_dma_stop_d0(pipe, remain);
-
-        if (g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] != 0)
-        {
-            RZA_IO_RegWrite_16(&USB200.D0FIFOCTR,
-                                1,
-                                USB_DnFIFOCTR_BVAL_SHIFT,
-                                USB_DnFIFOCTR_BVAL);
-        }
-    }
-    else
-    {
-        remain = Userdef_USB_usb0_function_stop_dma1();
-        usb0_function_dma_stop_d1(pipe, remain);
-
-        if (g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] != 0)
-        {
-            RZA_IO_RegWrite_16(&USB200.D1FIFOCTR,
-                                1,
-                                USB_DnFIFOCTR_BVAL_SHIFT,
-                                USB_DnFIFOCTR_BVAL);
-        }
-    }
-
-    usb0_function_enable_bemp_int(pipe);
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_intrn.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_intrn.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,249 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_intrn.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb0_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb0_function_brdy_int
-* Description  : Executes BRDY interrupt(USB_FUNCTION_PIPE1-9).
-*              : According to the pipe that interrupt is generated in,
-*              : reads/writes buffer allocated in the pipe.
-*              : This function is executed in the BRDY interrupt handler.
-*              : This function clears BRDY interrupt status and BEMP interrupt
-*              : status.
-* Arguments    : uint16_t Status       ; BRDYSTS Register Value
-*              : uint16_t Int_enbl     ; BRDYENB Register Value
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb0_function_brdy_int (uint16_t status, uint16_t int_enb)
-{
-    uint32_t int_sense = 0;
-    uint16_t pipe;
-    uint16_t pipebit;
-
-    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
-    {
-        pipebit = g_usb0_function_bit_set[pipe];
-
-        if ((status & pipebit) && (int_enb & pipebit))
-        {
-            USB200.BRDYSTS = (uint16_t)~pipebit;
-            USB200.BEMPSTS = (uint16_t)~pipebit;
-            if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
-            {
-                if (g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] != USB_FUNCTION_DMA_READY)
-                {
-                    usb0_function_dma_interrupt_d0fifo(int_sense);
-                }
-
-                if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-                {
-                    usb0_function_read_dma(pipe);
-                    usb0_function_disable_brdy_int(pipe);
-                }
-                else
-                {
-                    USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;
-                    g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                }
-            }
-            else if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA)
-            {
-                if (g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] != USB_FUNCTION_DMA_READY)
-                {
-                    usb0_function_dma_interrupt_d1fifo(int_sense);
-                }
-
-                if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-                {
-                    usb0_function_read_dma(pipe);
-                    usb0_function_disable_brdy_int(pipe);
-                }
-                else
-                {
-                    USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;
-                    g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                }
-            }
-            else
-            {
-                if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0)
-                {
-                    usb0_function_read_buffer(pipe);
-                }
-                else
-                {
-                    usb0_function_write_buffer(pipe);
-                }
-            }
-        }
-    }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_nrdy_int
-* Description  : Executes NRDY interrupt(USB_FUNCTION_PIPE1-9).
-*              : Checks NRDY interrupt cause by PID. When the cause if STALL,
-*              : regards the pipe state as STALL and ends the processing.
-*              : Then the cause is not STALL, increments the error count to
-*              : communicate again. When the error count is 3, determines
-*              : the pipe state as DEVDRV_USBF_PIPE_NORES and ends the processing.
-*              : This function is executed in the NRDY interrupt handler.
-*              : This function clears NRDY interrupt status.
-* Arguments    : uint16_t status       ; NRDYSTS Register Value
-*              : uint16_t int_enb      ; NRDYENB Register Value
-* Return Value : none
-*******************************************************************************/
-void usb0_function_nrdy_int (uint16_t status, uint16_t int_enb)
-{
-    uint16_t pid;
-    uint16_t pipe;
-    uint16_t bitcheck;
-
-    bitcheck = (uint16_t)(status & int_enb);
-
-    USB200.NRDYSTS = (uint16_t)~status;
-
-    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
-    {
-        if ((bitcheck&g_usb0_function_bit_set[pipe]) == g_usb0_function_bit_set[pipe])
-        {
-            if (RZA_IO_RegRead_16(&USB200.SYSCFG0, USB_SYSCFG_DCFM_SHIFT, USB_SYSCFG_DCFM) == 1)
-            {
-                if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT)
-                {
-                    pid = usb0_function_get_pid(pipe);
-                    if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
-                    {
-                        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
-                    }
-                    else
-                    {
-                        g_usb0_function_PipeIgnore[pipe]++;
-                        if (g_usb0_function_PipeIgnore[pipe] == 3)
-                        {
-                            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
-                        }
-                        else
-                        {
-                            usb0_function_set_pid_buf(pipe);
-                        }
-                    }
-                }
-            }
-            else
-            {
-                /* USB Function */
-            }
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_bemp_int
-* Description  : Executes BEMP interrupt(USB_FUNCTION_PIPE1-9).
-* Arguments    : uint16_t status       ; BEMPSTS Register Value
-*              : uint16_t int_enb      ; BEMPENB Register Value
-* Return Value : none
-*******************************************************************************/
-void usb0_function_bemp_int (uint16_t status, uint16_t int_enb)
-{
-    uint16_t pid;
-    uint16_t pipe;
-    uint16_t bitcheck;
-    uint16_t inbuf;
-
-    bitcheck = (uint16_t)(status & int_enb);
-
-    USB200.BEMPSTS = (uint16_t)~status;
-
-    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
-    {
-        if ((bitcheck&g_usb0_function_bit_set[pipe]) == g_usb0_function_bit_set[pipe])
-        {
-            pid = usb0_function_get_pid(pipe);
-
-            if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
-            {
-                g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
-            }
-            else
-            {
-                inbuf = usb0_function_get_inbuf(pipe);
-
-                if (inbuf == 0)
-                {
-                    usb0_function_disable_bemp_int(pipe);
-                    usb0_function_set_pid_nak(pipe);
-                    g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                }
-            }
-        }
-    }
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_lib.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_lib.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2026 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_lib.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb0_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb0_function_enable_brdy_int
-* Description  : Enables BRDY interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
-*              : BRDY. Enables BRDY interrupt in the pipe specified by the argument
-*              : in the disabled status. After enabling BRDY, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe           ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_enable_brdy_int (uint16_t pipe)
-{
-    /* enable brdy interrupt */
-    USB200.BRDYENB |= (uint16_t)g_usb0_function_bit_set[pipe];
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_disable_brdy_int
-* Description  : Disables BRDY interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
-*              : BRDY. Enables BRDY interrupt in the pipe specified by the argument
-*              : in the disabled status. After disabling BRDY, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_disable_brdy_int (uint16_t pipe)
-{
-    /* disable brdy interrupt */
-    USB200.BRDYENB &= (uint16_t)~(g_usb0_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_clear_brdy_sts
-* Description  : Clear BRDY interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_clear_brdy_sts (uint16_t pipe)
-{
-    /* clear brdy status */
-    USB200.BRDYSTS = (uint16_t)~(g_usb0_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_enable_bemp_int
-* Description  : Enables BEMP interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
-*              : BEMP. Enables BEMP interrupt in the pipe specified by the argument
-*              : in the disabled status. After enabling BEMP, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe           ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_enable_bemp_int (uint16_t pipe)
-{
-    /* enable bemp interrupt */
-    USB200.BEMPENB |= (uint16_t)g_usb0_function_bit_set[pipe];
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_disable_bemp_int
-* Description  : Disables BEMP interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
-*              : BEMP. Enables BEMP interrupt in the pipe specified by the argument
-*              : in the disabled status. After enabling BEMP, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe           ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_disable_bemp_int (uint16_t pipe)
-{
-    /* disable bemp interrupt */
-    USB200.BEMPENB &= (uint16_t)~(g_usb0_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_clear_bemp_sts
-* Description  : Clear BEMP interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_clear_bemp_sts (uint16_t pipe)
-{
-    /* clear bemp status */
-    USB200.BEMPSTS = (uint16_t)~(g_usb0_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_enable_nrdy_int
-* Description  : Enables NRDY interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
-*              : NRDY. Enables NRDY interrupt in the pipe specified by the argument
-*              : in the disabled status. After enabling NRDY, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe             ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_enable_nrdy_int (uint16_t pipe)
-{
-    /* enable nrdy interrupt */
-    USB200.NRDYENB |= (uint16_t)g_usb0_function_bit_set[pipe];
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_disable_nrdy_int
-* Description  : Disables NRDY interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
-*              : NRDY. Disables NRDY interrupt in the pipe specified by the argument
-*              : in the disabled status. After disabling NRDY, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_disable_nrdy_int (uint16_t pipe)
-{
-    /* disable nrdy interrupt */
-    USB200.NRDYENB &= (uint16_t)~(g_usb0_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_clear_nrdy_sts
-* Description  : Clear NRDY interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_clear_nrdy_sts (uint16_t pipe)
-{
-    /* clear nrdy status */
-    USB200.NRDYSTS = (uint16_t)~(g_usb0_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_is_hispeed
-* Description  : Returns the result of USB reset hand shake (RHST) as
-*              : return value.
-* Arguments    : none
-* Return Value : USB_FUNCTION_HIGH_SPEED    ; Hi-Speed
-*              : USB_FUNCTION_FULL_SPEED    ; Full-Speed
-*              : LOW_SPEED                  ; Low-Speed
-*              : USB_FUNCTION_NON_SPEED     ; error
-*******************************************************************************/
-uint16_t usb0_function_is_hispeed (void)
-{
-    uint16_t rhst;
-    uint16_t speed;
-
-    rhst = RZA_IO_RegRead_16(&USB200.DVSTCTR0, USB_DVSTCTR0_RHST_SHIFT, USB_DVSTCTR0_RHST);
-
-    if (rhst == USB_FUNCTION_HSMODE)
-    {
-        speed = USB_FUNCTION_HIGH_SPEED;
-    }
-    else if (rhst == USB_FUNCTION_FSMODE)
-    {
-        speed = USB_FUNCTION_FULL_SPEED;
-    }
-    else if (rhst == USB_FUNCTION_LSMODE)
-    {
-        speed = USB_FUNCTION_LOW_SPEED;
-    }
-    else
-    {
-        speed = USB_FUNCTION_NON_SPEED;
-    }
-
-    return speed;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_is_hispeed_enable
-* Description  : Returns the USB High-Speed connection enabled status as
-*              : return value.
-* Arguments    : none
-* Return Value : DEVDRV_USBF_YES  : Hi-Speed Enable
-*              : DEVDRV_USBF_NO   : Hi-Speed Disable
-*******************************************************************************/
-uint16_t usb0_function_is_hispeed_enable (void)
-{
-    uint16_t ret;
-
-    ret = DEVDRV_USBF_NO;
-
-    if (RZA_IO_RegRead_16(&USB200.SYSCFG0, USB_SYSCFG_HSE_SHIFT, USB_SYSCFG_HSE) == 1)
-    {
-        ret = DEVDRV_USBF_YES;
-    }
-
-    return ret;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_pid_buf
-* Description  : Enables communicaqtion in the pipe specified by the argument
-*              : (BUF).
-* Arguments    : uint16_t pipe             ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_set_pid_buf (uint16_t pipe)
-{
-    uint16_t pid;
-
-    pid = usb0_function_get_pid(pipe);
-
-    if (pid == DEVDRV_USBF_PID_STALL2)
-    {
-        usb0_function_set_pid_nak(pipe);
-    }
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            RZA_IO_RegWrite_16(&USB200.DCPCTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_DCPCTR_PID_SHIFT,
-                                USB_DCPCTR_PID);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_9_PID_SHIFT,
-                                USB_PIPEnCTR_9_PID);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_pid_nak
-* Description  : Disables communication (NAK) in the pipe specified by the argument.
-*              : When the pipe status was enabling communication (BUF) before
-*              : executing before executing this function, waits in the software
-*              : until the pipe becomes ready after setting disabled.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_set_pid_nak (uint16_t pipe)
-{
-    uint16_t pid;
-    uint16_t pbusy;
-    uint32_t loop;
-
-    pid = usb0_function_get_pid(pipe);
-
-    if (pid == DEVDRV_USBF_PID_STALL2)
-    {
-        usb0_function_set_pid_stall(pipe);
-    }
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            RZA_IO_RegWrite_16(&USB200.DCPCTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_DCPCTR_PID_SHIFT,
-                                USB_DCPCTR_PID);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_9_PID_SHIFT,
-                                USB_PIPEnCTR_9_PID);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        default:
-        break;
-    }
-
-    if (pid == DEVDRV_USBF_PID_BUF)
-    {
-        for (loop = 0; loop < 200; loop++)
-        {
-            switch (pipe)
-            {
-                case USB_FUNCTION_PIPE0:
-                    pbusy = RZA_IO_RegRead_16(&USB200.DCPCTR,
-                                                USB_DCPCTR_PBUSY_SHIFT,
-                                                USB_DCPCTR_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE1:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
-                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_1_5_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE2:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
-                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_1_5_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE3:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
-                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_1_5_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE4:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
-                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_1_5_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE5:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
-                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_1_5_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE6:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE6CTR,
-                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_6_8_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE7:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE7CTR,
-                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_6_8_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE8:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE8CTR,
-                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_6_8_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE9:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
-                                                USB_PIPEnCTR_9_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_9_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPEA:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEACTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPEB:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPEC:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPECCTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPED:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPEE:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEECTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPEF:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                default:
-                    pbusy   = 1;
-                break;
-            }
-
-            if (pbusy == 0)
-            {
-                break;
-            }
-            Userdef_USB_usb0_function_delay_500ns();
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_pid_stall
-* Description  : Disables communication (STALL) in the pipe specified by the
-*              : argument.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_set_pid_stall (uint16_t pipe)
-{
-    uint16_t pid;
-
-    pid = usb0_function_get_pid(pipe);
-    if (pid == DEVDRV_USBF_PID_BUF)
-    {
-        switch (pipe)
-        {
-            case USB_FUNCTION_PIPE0:
-                RZA_IO_RegWrite_16(&USB200.DCPCTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_DCPCTR_PID_SHIFT,
-                                    USB_DCPCTR_PID);
-            break;
-
-            case USB_FUNCTION_PIPE1:
-                RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE2:
-                RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE3:
-                RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE4:
-                RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE5:
-                RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE6:
-                RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE7:
-                RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE8:
-                RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE9:
-                RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_9_PID_SHIFT,
-                                    USB_PIPEnCTR_9_PID);
-            break;
-
-            case USB_FUNCTION_PIPEA:
-                RZA_IO_RegWrite_16(&USB200.PIPEACTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEB:
-                RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEC:
-                RZA_IO_RegWrite_16(&USB200.PIPECCTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPED:
-                RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEE:
-                RZA_IO_RegWrite_16(&USB200.PIPEECTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEF:
-                RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            default:
-            break;
-        }
-    }
-    else
-    {
-        switch (pipe)
-        {
-            case USB_FUNCTION_PIPE0:
-                RZA_IO_RegWrite_16(&USB200.DCPCTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_DCPCTR_PID_SHIFT,
-                                    USB_DCPCTR_PID);
-            break;
-
-            case USB_FUNCTION_PIPE1:
-                RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE2:
-                RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE3:
-                RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE4:
-                RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE5:
-                RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE6:
-                RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE7:
-                RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE8:
-                RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE9:
-                RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_9_PID_SHIFT,
-                                    USB_PIPEnCTR_9_PID);
-            break;
-
-            case USB_FUNCTION_PIPEA:
-                RZA_IO_RegWrite_16(&USB200.PIPEACTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEB:
-                RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEC:
-                RZA_IO_RegWrite_16(&USB200.PIPECCTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPED:
-                RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEE:
-                RZA_IO_RegWrite_16(&USB200.PIPEECTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEF:
-                RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            default:
-            break;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_clear_pid_stall
-* Description  : Disables communication (NAK) in the pipe specified by the argument.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_clear_pid_stall (uint16_t pipe)
-{
-    usb0_function_set_pid_nak(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_get_pid
-* Description  : Returns the pipe state specified by the argument.
-* Arguments    : uint16_t pipe          ; Pipe Number
-* Return Value : PID
-*******************************************************************************/
-uint16_t usb0_function_get_pid (uint16_t pipe)
-{
-    uint16_t pid;
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            pid = RZA_IO_RegRead_16(&USB200.DCPCTR,
-                                    USB_DCPCTR_PID_SHIFT,
-                                    USB_DCPCTR_PID);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            pid = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            pid = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            pid = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            pid = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            pid = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            pid = RZA_IO_RegRead_16(&USB200.PIPE6CTR,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            pid = RZA_IO_RegRead_16(&USB200.PIPE7CTR,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            pid = RZA_IO_RegRead_16(&USB200.PIPE8CTR,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            pid = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
-                                    USB_PIPEnCTR_9_PID_SHIFT,
-                                    USB_PIPEnCTR_9_PID);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            pid = RZA_IO_RegRead_16(&USB200.PIPEACTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            pid = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            pid = RZA_IO_RegRead_16(&USB200.PIPECCTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            pid = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            pid = RZA_IO_RegRead_16(&USB200.PIPEECTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            pid = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        default:
-            pid = 0;
-        break;
-    }
-
-    return pid;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_csclr
-* Description  : CSPLIT status clear setting of sprit transaction in specified
-*              : pipe is performed.
-*              : When SQSET bit or SQCLR bit, and SQSET bit or SQCLR bit
-*              : in DCPCTR register are continuously changed (when the sequence
-*              : toggle bit of data PID is continuously changed over two or more pipes),
-*              : the access cycle with 120 ns and more than 5 cycle bus clock is necessary.
-*              : Do not set both SQCLR bit and SQSET bit to 1 at the same time.
-*              : In addition, both bits should be operated after PID is set to NAK.
-*              : However, when it is set to the isochronous transfer as the transfer type
-*              : (TYPE=11), writing in SQSET bit is disabled.
-* Arguments    : uint16_t pipe     ; Pipe number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_set_csclr (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            RZA_IO_RegWrite_16(&USB200.DCPCTR,
-                                1,
-                                USB_DCPCTR_CSCLR_SHIFT,
-                                USB_DCPCTR_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
-                                1,
-                                USB_PIPEnCTR_9_CSCLR_SHIFT,
-                                USB_PIPEnCTR_9_CSCLR);
-        break;
-
-        default:
-            /* PIPEA-F have not CSCLR */
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_sqclr
-* Description  : Sets the sequence bit of the pipe specified by the argument to
-*              : DATA0.
-* Arguments    : uint16_t pipe              ; Pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_set_sqclr (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            RZA_IO_RegWrite_16(&USB200.DCPCTR,
-                                1,
-                                USB_DCPCTR_SQCLR_SHIFT,
-                                USB_DCPCTR_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
-                                1,
-                                USB_PIPEnCTR_9_SQCLR_SHIFT,
-                                USB_PIPEnCTR_9_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_sqset
-* Description  : Sets the sequence bit of the pipe specified by the argument to
-*              : DATA1.
-* Arguments    : uint16_t pipe   ; Pipe number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_set_sqset (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            RZA_IO_RegWrite_16(&USB200.DCPCTR,
-                                1,
-                                USB_DCPCTR_SQSET_SHIFT,
-                                USB_DCPCTR_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
-                                USB_PIPEnCTR_1_5_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
-                                USB_PIPEnCTR_1_5_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
-                                USB_PIPEnCTR_1_5_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
-                                USB_PIPEnCTR_1_5_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
-                                USB_PIPEnCTR_1_5_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
-                                USB_PIPEnCTR_6_8_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
-                                USB_PIPEnCTR_6_8_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
-                                USB_PIPEnCTR_6_8_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
-                                1,
-                                USB_PIPEnCTR_9_SQSET_SHIFT,
-                                USB_PIPEnCTR_9_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_get_sqmon
-* Description  : Toggle bit of specified pipe is obtained
-* Arguments    : uint16_t pipe   ; Pipe number
-* Return Value : sqmon
-*******************************************************************************/
-uint16_t usb0_function_get_sqmon (uint16_t pipe)
-{
-    uint16_t sqmon;
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            sqmon = RZA_IO_RegRead_16(&USB200.DCPCTR,
-                                        USB_DCPCTR_SQMON_SHIFT,
-                                        USB_DCPCTR_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
-                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
-                                        USB_PIPEnCTR_1_5_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
-                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
-                                        USB_PIPEnCTR_1_5_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
-                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
-                                        USB_PIPEnCTR_1_5_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
-                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
-                                        USB_PIPEnCTR_1_5_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
-                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
-                                        USB_PIPEnCTR_1_5_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPE6CTR,
-                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
-                                        USB_PIPEnCTR_6_8_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPE7CTR,
-                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
-                                        USB_PIPEnCTR_6_8_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPE8CTR,
-                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
-                                        USB_PIPEnCTR_6_8_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
-                                        USB_PIPEnCTR_9_SQMON_SHIFT,
-                                        USB_PIPEnCTR_9_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPEACTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPECCTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPEECTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        default:
-            sqmon = 0;
-        break;
-    }
-
-    return sqmon;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_aclrm
-* Description  : The buffer of specified pipe is initialized
-* Arguments    : uint16_t pipe    : Pipe
-* Return Value : none
-*******************************************************************************/
-void usb0_function_aclrm (uint16_t pipe)
-{
-    usb0_function_set_aclrm(pipe);
-    usb0_function_clr_aclrm(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_aclrm
-* Description  : The auto buffer clear mode of specified pipe is enabled
-* Arguments    : uint16_t pipe    : Pipe
-* Return Value : none
-*******************************************************************************/
-void usb0_function_set_aclrm (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
-                                1,
-                                USB_PIPEnCTR_9_ACLRM_SHIFT,
-                                USB_PIPEnCTR_9_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_clr_aclrm
-* Description  : The auto buffer clear mode of specified pipe is enabled
-* Arguments    : uint16_t pipe    : Pipe
-* Return Value : none
-*******************************************************************************/
-void usb0_function_clr_aclrm (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
-                                0,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
-                                0,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
-                                0,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
-                                0,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
-                                0,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
-                                0,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
-                                0,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
-                                0,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
-                                0,
-                                USB_PIPEnCTR_9_ACLRM_SHIFT,
-                                USB_PIPEnCTR_9_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_get_inbuf
-* Description  : Returns INBUFM of the pipe specified by the argument.
-* Arguments    : uint16_t pipe             ; Pipe Number
-* Return Value : inbuf
-*******************************************************************************/
-uint16_t usb0_function_get_inbuf (uint16_t pipe)
-{
-    uint16_t inbuf;
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            inbuf = 0;
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
-                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_1_5_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
-                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_1_5_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
-                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_1_5_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
-                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_1_5_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
-                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_1_5_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            inbuf = 0;
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            inbuf = 0;
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            inbuf = 0;
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
-                                    USB_PIPEnCTR_9_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_9_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPEACTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPECCTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPEECTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        default:
-            inbuf = 0;
-        break;
-    }
-
-    return inbuf;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_setting_interrupt
-* Description  : Sets the USB module interrupt level.
-* Arguments    : uint8_t level ;interrupt level
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb0_function_setting_interrupt (uint8_t level)
-{
-    uint16_t d0fifo_dmaintid;
-    uint16_t d1fifo_dmaintid;
-
-    R_INTC_RegistIntFunc(INTC_ID_USBI0, usb0_function_interrupt);
-    R_INTC_SetPriority(INTC_ID_USBI0, level);
-    R_INTC_Enable(INTC_ID_USBI0);
-
-    d0fifo_dmaintid = Userdef_USB_usb0_function_d0fifo_dmaintid();
-
-    if (d0fifo_dmaintid != 0xFFFF)
-    {
-        R_INTC_RegistIntFunc(d0fifo_dmaintid, usb0_function_dma_interrupt_d0fifo);
-        R_INTC_SetPriority(d0fifo_dmaintid, level);
-        R_INTC_Enable(d0fifo_dmaintid);
-    }
-
-    d1fifo_dmaintid = Userdef_USB_usb0_function_d1fifo_dmaintid();
-
-    if (d1fifo_dmaintid != 0xFFFF)
-    {
-        R_INTC_RegistIntFunc(d1fifo_dmaintid, usb0_function_dma_interrupt_d1fifo);
-        R_INTC_SetPriority(d1fifo_dmaintid, level);
-        R_INTC_Enable(d1fifo_dmaintid);
-    }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_reset_module
-* Description  : Initializes the USB module.
-*              : Enables providing clock to the USB module.
-*              : Sets USB bus wait register.
-* Arguments    : uint16_t clockmode ; 48MHz ; USBFCLOCK_X1_48MHZ
-*              :                    ; 12MHz ; USBFCLOCK_EXTAL_12MHZ
-* Return Value : none
-*******************************************************************************/
-void usb0_function_reset_module (uint16_t clockmode)
-{
-    /* UPLLE bit is only USB0 */
-    if (RZA_IO_RegRead_16(&USB200.SYSCFG0,
-                                USB_SYSCFG_UPLLE_SHIFT,
-                                USB_SYSCFG_UPLLE) == 1)
-    {
-        if ((USB200.SYSCFG0 & USB_FUNCTION_BITUCKSEL) != clockmode)
-        {
-            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
-                                0,
-                                USB_SUSPMODE_SUSPM_SHIFT,
-                                USB_SUSPMODE_SUSPM);
-            USB200.SYSCFG0 = 0;
-            USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
-            Userdef_USB_usb0_function_delay_xms(1);
-            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
-                                1,
-                                USB_SUSPMODE_SUSPM_SHIFT,
-                                USB_SUSPMODE_SUSPM);
-        }
-        else
-        {
-            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
-                                0,
-                                USB_SUSPMODE_SUSPM_SHIFT,
-                                USB_SUSPMODE_SUSPM);
-            Userdef_USB_usb0_function_delay_xms(1);
-            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
-                                1,
-                                USB_SUSPMODE_SUSPM_SHIFT,
-                                USB_SUSPMODE_SUSPM);
-        }
-    }
-    else
-    {
-        RZA_IO_RegWrite_16(&USB200.SUSPMODE,
-                            0,
-                            USB_SUSPMODE_SUSPM_SHIFT,
-                            USB_SUSPMODE_SUSPM);
-        USB200.SYSCFG0 = 0;
-        USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
-        Userdef_USB_usb0_function_delay_xms(1);
-        RZA_IO_RegWrite_16(&USB200.SUSPMODE,
-                            1,
-                            USB_SUSPMODE_SUSPM_SHIFT,
-                            USB_SUSPMODE_SUSPM);
-    }
-
-    USB200.BUSWAIT = (uint16_t)(USB_FUNCTION_BUSWAIT_05 & USB_FUNCTION_BITBWAIT);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_get_buf_size
-* Description  : Obtains pipe buffer size specified by the argument and
-*              : maximum packet size of the USB device in use.
-*              : When USB_FUNCTION_PIPE0 is specified by the argument, obtains the maximum
-*              : packet size of the USB device using the corresponding pipe.
-*              : For the case that USB_FUNCTION_PIPE0 is not assigned by the argument, when the
-*              : corresponding pipe is in continuous transfer mode,
-*              : obtains the buffer size allocated in the corresponcing pipe,
-*              : when incontinuous transfer, obtains maximum packet size.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : Maximum packet size or buffer size
-*******************************************************************************/
-uint16_t usb0_function_get_buf_size (uint16_t pipe)
-{
-    uint16_t size;
-    uint16_t bufsize;
-
-    if (pipe == USB_FUNCTION_PIPE0)
-    {
-        size = RZA_IO_RegRead_16(&USB200.DCPMAXP,
-                                USB_DCPMAXP_MXPS_SHIFT,
-                                USB_DCPMAXP_MXPS);
-    }
-    else
-    {
-        if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_CNTMD_SHIFT, USB_PIPECFG_CNTMD) == 1)
-        {
-            bufsize = RZA_IO_RegRead_16(&g_usb0_function_pipebuf[pipe], USB_PIPEBUF_BUFSIZE_SHIFT, USB_PIPEBUF_BUFSIZE);
-            size = (uint16_t)((bufsize + 1) * USB_FUNCTION_PIPExBUF);
-        }
-        else
-        {
-            size = RZA_IO_RegRead_16(&g_usb0_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
-        }
-    }
-    return size;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_get_mxps
-* Description  : Obtains maximum packet size of the USB device using the pipe
-*              : specified by the argument.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : Max Packet Size
-*******************************************************************************/
-uint16_t usb0_function_get_mxps (uint16_t pipe)
-{
-    uint16_t size;
-
-    if (pipe == USB_FUNCTION_PIPE0)
-    {
-        size = RZA_IO_RegRead_16(&USB200.DCPMAXP,
-                                USB_DCPMAXP_MXPS_SHIFT,
-                                USB_DCPMAXP_MXPS);
-    }
-    else
-    {
-        size = RZA_IO_RegRead_16(&g_usb0_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
-    }
-    return size;
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_api.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_api.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,441 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_api.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb0_function.h"
-#include "dev_drv.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb0_api_function_init
-* Description  : Initializes the USB module in the USB function mode.
-* Arguments    : uint8_t  int_level ; interruput level
-*              : uint16_t mode      : Speed modes
-*              :                    :  USB_FUCNTION_HIGH_SPEED: High-speed device
-*              :                    :  USB_FUCNTION_FULL_SPEED: Full-speed device
-*              : uint16_t clockmode ; 48MHz ; USBFCLOCK_X1_48MHZ
-*              :                    ; 12MHz ; USBFCLOCK_EXTAL_12MHZ
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb0_api_function_init (uint8_t int_level, uint16_t mode, uint16_t clockmode)
-{
-    volatile uint8_t dummy_buf;
-
-    CPG.STBCR7  &= 0xfd;                        /* The clock of USB0 modules is permitted */
-    dummy_buf   = CPG.STBCR7;                   /* (Dummy read) */
-
-    usb0_function_setting_interrupt(int_level);
-
-    usb0_function_reset_module(clockmode);      /* reset USB module with setting tranciever */
-                                                /* and HSE=1                                */
-
-    usb0_function_init_status();                /* clear variables                          */
-
-    usb0_function_InitModule(mode);             /* select USB Function and Interrupt Enable */
-                                                /* Detect USB Device to attach or detach    */
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_api_function_IsConfigured
-* Description  : Checks if the USB device is configured to return the result as
-*              : the return value.
-* Arguments    : none
-* Return Value : DEVDRV_USBF_YES  : Configured & Configured Suspend
-*              : DEVDRV_USBF_NO   : not Configured
-*******************************************************************************/
-uint16_t usb0_api_function_IsConfigured (void)
-{
-    uint16_t dvst;
-
-    dvst = usb0_function_GetDeviceState();
-
-    if ((dvst == USB_FUNCTION_DVST_CONFIGURED) ||
-        (dvst == USB_FUNCTION_DVST_CONFIGURED_SUSPEND))
-    {
-        return DEVDRV_USBF_YES;
-    }
-
-    return DEVDRV_USBF_NO;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_GetDeviceState
-* Description  : Returns the state of USB device.
-* Arguments    : none
-* Return Value : Device States
-*******************************************************************************/
-uint16_t usb0_function_GetDeviceState (void)
-{
-    uint16_t dvsq;
-    uint16_t dvst;
-
-    dvsq = USB200.INTSTS0;
-    switch(dvsq & USB_FUNCTION_BITDVSQ)
-    {
-        case USB_FUNCTION_DS_POWR:                      /* Power state *//* power-on */
-            dvst = USB_FUNCTION_DVST_POWERED;
-        break;
-
-        case USB_FUNCTION_DS_DFLT:                      /* Default state *//* bus-reset */
-            dvst = USB_FUNCTION_DVST_DEFAULT;
-        break;
-
-        case USB_FUNCTION_DS_ADDS:                      /* Address state */
-            dvst = USB_FUNCTION_DVST_ADDRESS;
-        break;
-
-        case USB_FUNCTION_DS_CNFG:                      /* Configured state */
-            dvst = USB_FUNCTION_DVST_CONFIGURED;
-        break;
-
-        case USB_FUNCTION_DS_SPD_CNFG:                  /* Configured Suspend state */
-            dvst = USB_FUNCTION_DVST_CONFIGURED_SUSPEND;
-        break;
-
-        case USB_FUNCTION_DS_SPD_POWR:                  /* Power      Suspend state */
-        case USB_FUNCTION_DS_SPD_DFLT:                  /* Default    Suspend state */
-        case USB_FUNCTION_DS_SPD_ADDR:                  /* Address    Suspend state */
-            dvst = USB_FUNCTION_DVST_SUSPEND;
-        break;
-
-        default:                                        /* error */
-            dvst = USB_FUNCTION_DVST_SUSPEND;
-        break;
-    }
-
-    return dvst;
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_start_receive_transfer
-* Description  : Starts USB data reception using the pipe specified in the argument.
-*              : The FIFO for using is set in the pipe definition table.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data data Address
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    usb0_function_start_receive_transfer(pipe, size, data);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_start_send_transfer
-* Description  : Starts the USB data communication using pipe specified by the argument.
-* Arguments    : uint16_t pipe     ; Pipe Number
-*              : uint32_t size     ; Data Size
-*              : uint8_t *data     ; Data data Address
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb0_api_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t status;
-
-    status = usb0_function_start_send_transfer(pipe, size, data);
-
-    return status;
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_check_pipe_status
-* Description  : Starts USB data reception using the pipe specified in the argument.
-*              : The FIFO for using is set in the pipe definition table.
-* Arguments    : uint16_t  pipe     ; Pipe Number
-*              : uint32_t *size     ; Data Size
-* Return Value : Pipe Status
-*******************************************************************************/
-uint16_t usb0_api_function_check_pipe_status (uint16_t pipe, uint32_t * size)
-{
-    if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_DONE)
-    {
-        *size = g_usb0_function_PipeDataSize[pipe];
-        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
-
-        return DEVDRV_USBF_PIPE_DONE;
-    }
-    else if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_NORES)
-    {
-        *size = 0;
-        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
-
-        return DEVDRV_USBF_PIPE_NORES;
-    }
-    else if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_STALL)
-    {
-        *size = 0;
-        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
-
-        return DEVDRV_USBF_PIPE_STALL;
-    }
-    else if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_FIFOERROR)
-    {
-        *size = 0;
-        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
-
-        return DEVDRV_USBF_FIFOERROR;
-    }
-    else
-    {
-        /* Do Nothing */
-    }
-
-    return g_usb0_function_pipe_status[pipe];
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_clear_pipe_status
-* Description  : Starts USB data reception using the pipe specified in the argument.
-*              : The FIFO for using is set in the pipe definition table.
-* Arguments    : uint16_t  pipe     ; Pipe Number
-* Return Value : Pipe Status
-*******************************************************************************/
-void usb0_api_function_clear_pipe_status (uint16_t pipe)
-{
-    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
-    g_usb0_function_PipeDataSize[pipe] = 0;
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_set_pid_buf
-* Description  : Enables communicaqtion in the pipe specified by the argument
-*              : (BUF).
-* Arguments    : uint16_t pipe             ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_set_pid_buf (uint16_t pipe)
-{
-    usb0_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_set_pid_nak
-* Description  : Disables communication (NAK) in the pipe specified by the argument.
-*              : When the pipe status was enabling communication (BUF) before
-*              : executing before executing this function, waits in the software
-*              : until the pipe becomes ready after setting disabled.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_set_pid_nak (uint16_t pipe)
-{
-    usb0_function_set_pid_nak(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_set_pid_stall
-* Description  : Disables communication (STALL) in the pipe specified by the
-*              : argument.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_set_pid_stall (uint16_t pipe)
-{
-    usb0_function_set_pid_stall(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_clear_pid_stall
-* Description  : Disables communication (NAK) in the pipe specified by the argument.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_clear_pid_stall (uint16_t pipe)
-{
-    usb0_function_clear_pid_stall(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_get_pid
-* Description  : Returns the pipe state specified by the argument.
-* Arguments    : uint16_t pipe          ; Pipe Number
-* Return Value : PID
-*******************************************************************************/
-uint16_t usb0_api_function_get_pid (uint16_t pipe)
-{
-    uint16_t pid;
-
-    pid = usb0_function_get_pid(pipe);
-
-    return pid;
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_check_stall
-* Description  :
-* Arguments    : uint16_t pipe          ; Pipe Number
-* Return Value : PID
-*******************************************************************************/
-int32_t usb0_api_function_check_stall (uint16_t pipe)
-{
-    uint16_t pid;
-
-    pid = usb0_function_get_pid(pipe);
-
-    if ((pid & DEVDRV_USBF_PID_STALL) == DEVDRV_USBF_PID_STALL)
-    {
-        return DEVDRV_USBF_STALL;
-    }
-
-    return DEVDRV_SUCCESS;
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_set_sqclr
-* Description  : Sets the sequence bit of the pipe specified by the argument to
-*              : DATA0.
-* Arguments    : uint16_t pipe              ; Pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_set_sqclr (uint16_t pipe)
-{
-    usb0_function_set_sqclr(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_set_sqset
-* Description  : Sets the sequence bit of the pipe specified by the argument to
-*              : DATA1.
-* Arguments    : uint16_t pipe   ; Pipe number
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_set_sqset (uint16_t pipe)
-{
-    usb0_function_set_sqset(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_set_csclr
-* Description  : CSPLIT status clear setting of sprit transaction in specified
-*              : pipe is performed.
-*              : When SQSET bit or SQCLR bit, and SQSET bit or SQCLR bit
-*              : in DCPCTR register are continuously changed (when the sequence
-*              : toggle bit of data PID is continuously changed over two or more pipes),
-*              : the access cycle with 120 ns and more than 5 cycle bus clock is necessary.
-*              : Do not set both SQCLR bit and SQSET bit to 1 at the same time.
-*              : In addition, both bits should be operated after PID is set to NAK.
-*              : However, when it is set to the isochronous transfer as the transfer type
-*              : (TYPE=11), writing in SQSET bit is disabled.
-* Arguments    : uint16_t pipe     ; Pipe number
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_set_csclr (uint16_t pipe)
-{
-    usb0_function_set_csclr(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_set_curpipe
-* Description  : Allocates FIF0 specifed by the argument in the pipe assigned
-*              : by the argument.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t fifosel   ; Select FIFO
-*              : uint16_t isel      ; FIFO Access Direction
-*              : uint16_t mbw       ; FIFO Port Access Bit Width
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
-{
-    usb0_function_set_curpipe(pipe, fifosel, isel, mbw);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_clear_brdy_sts
-* Description  : Clear BRDY interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_clear_brdy_sts (uint16_t pipe)
-{
-    usb0_function_clear_brdy_sts(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_clear_bemp_sts
-* Description  : Clear BEMP interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_clear_bemp_sts (uint16_t pipe)
-{
-    usb0_function_clear_bemp_sts(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_clear_nrdy_sts
-* Description  : Clear NRDY interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_clear_nrdy_sts (uint16_t pipe)
-{
-    usb0_function_clear_nrdy_sts(pipe);
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_controlrw.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_controlrw.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_controlrw.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb0_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb0_api_function_CtrlReadStart
-* Description  : Executes the USB control read transfer.
-*              : USB host controller <- USB device
-* Arguments    : uint16_t size     ; Data Size
-*              : uint8_t  *data    ; Data Address
-* Return Value : DEVDRV_USBF_WRITEEND          ; End of data write
-*              : DEVDRV_USBF_WRITESHRT         ; End of short data write
-*              : DEVDRV_USBF_WRITING           ; Continue of data write
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO access error
-*******************************************************************************/
-uint16_t usb0_api_function_CtrlReadStart (uint32_t size, uint8_t * data)
-{
-    uint16_t status;
-    uint16_t mbw;
-
-    usb0_function_set_pid_nak(USB_FUNCTION_PIPE0);
-
-    g_usb0_function_data_count[USB_FUNCTION_PIPE0]   = size;
-    g_usb0_function_data_pointer[USB_FUNCTION_PIPE0] = data;
-
-    mbw = usb0_function_get_mbw(g_usb0_function_data_count[USB_FUNCTION_PIPE0],
-                                 (uint32_t)g_usb0_function_data_pointer[USB_FUNCTION_PIPE0]);
-    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
-    USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;
-
-    status = usb0_function_write_buffer_c(USB_FUNCTION_PIPE0);
-
-    /* Peripheral Control sequence */
-    switch (status)
-    {
-        case DEVDRV_USBF_WRITESHRT:                                     /* End of data write */
-        case DEVDRV_USBF_WRITEEND:                                      /* End of data write (not null) */
-        case DEVDRV_USBF_WRITING:                                       /* Continue of data write */
-            usb0_function_enable_bemp_int(USB_FUNCTION_PIPE0);          /* Enable Empty Interrupt */
-            usb0_function_set_pid_buf(USB_FUNCTION_PIPE0);              /* Set BUF */
-        break;
-
-        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access error */
-        break;
-
-        default:
-        break;
-    }
-
-    return status;                                                      /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_CtrlWriteStart
-* Description  : Executes the USB control write transfer.
-*              : USB host controller -> USB device
-* Arguments    : uint16_t  size         ; Data Size
-*              : uint8_t  *data         ; Data Address
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_CtrlWriteStart (uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb0_function_set_pid_nak(USB_FUNCTION_PIPE0);
-
-    g_usb0_function_data_count[USB_FUNCTION_PIPE0]   = size;
-    g_usb0_function_data_pointer[USB_FUNCTION_PIPE0] = data;
-
-    mbw = usb0_function_get_mbw(g_usb0_function_data_count[USB_FUNCTION_PIPE0],
-                                (uint32_t)g_usb0_function_data_pointer[USB_FUNCTION_PIPE0]);
-    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
-    USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;
-
-    usb0_function_enable_brdy_int(USB_FUNCTION_PIPE0);
-    usb0_function_set_pid_buf(USB_FUNCTION_PIPE0);
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_global.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_global.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_global.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb0_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-const uint16_t g_usb0_function_bit_set[16] =
-{
-    0x0001, 0x0002, 0x0004, 0x0008,
-    0x0010, 0x0020, 0x0040, 0x0080,
-    0x0100, 0x0200, 0x0400, 0x0800,
-    0x1000, 0x2000, 0x4000, 0x8000
-};
-
-uint32_t g_usb0_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint8_t  * g_usb0_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-uint16_t g_usb0_function_PipeIgnore[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb0_function_PipeTbl[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb0_function_pipe_status[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint32_t g_usb0_function_PipeDataSize[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-USB_FUNCTION_DMA_t g_usb0_function_DmaInfo[2];
-uint16_t g_usb0_function_DmaPipe[2];
-uint16_t g_usb0_function_DmaBval[2];
-uint16_t g_usb0_function_DmaStatus[2];
-
-uint16_t g_usb0_function_CtrZeroLengthFlag;
-
-//uint16_t g_usb0_function_ConfigNum;
-//uint16_t g_usb0_function_Alternate[USB_FUNCTION_ALT_NO];
-//uint16_t g_usb0_function_RemoteWakeupFlag;
-uint16_t g_usb0_function_TestModeFlag;
-uint16_t g_usb0_function_TestModeSelectors;
-
-//uint16_t g_usb0_function_ReqType;
-//uint16_t g_usb0_function_ReqTypeType;
-//uint16_t g_usb0_function_ReqTypeRecip;
-//uint16_t g_usb0_function_ReqRequest;
-//uint16_t g_usb0_function_ReqValue;
-//uint16_t g_usb0_function_ReqIndex;
-//uint16_t g_usb0_function_ReqLength;
-
-//uint16_t g_usb0_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
-
-uint16_t g_usb0_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb0_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb0_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb0_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-
-/*******************************************************************************
-* Function Name: usb0_function_init_status
-* Description  : Initialization USB Sample Driver Variable.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb0_function_init_status (void)
-{
-    uint16_t pipe;
-
-    //g_usb0_function_ConfigNum         = 0;
-    //g_usb0_function_RemoteWakeupFlag  = DEVDRV_USBF_OFF;
-    g_usb0_function_TestModeFlag      = DEVDRV_USBF_OFF;
-    g_usb0_function_CtrZeroLengthFlag = 0;
-
-#if 0
-    usb0_function_clear_alt();
-#endif
-
-    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
-    {
-        g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
-        g_usb0_function_PipeDataSize[pipe] = 0;
-        g_usb0_function_data_count[pipe]   = 0;
-
-        /* pipe configuration in usb0_function_ResetEP() */
-        g_usb0_function_pipecfg[pipe]  = 0;
-        g_usb0_function_pipebuf[pipe]  = 0;
-        g_usb0_function_pipemaxp[pipe] = 0;
-        g_usb0_function_pipeperi[pipe] = 0;
-    }
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_sig.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_sig.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,330 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_sig.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb0_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-static void usb0_function_EnableINTModule(void);
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb0_function_InitModule
-* Description  : Initializes the USB module in the USB function mode.
-* Arguments    : uint16_t mode  ; USB_FUNCTION_HIGH_SPEED ; Hi-Speed Mode
-*              :                ; other                   ; Full-speed Mode
-* Return Value : none
-*******************************************************************************/
-void usb0_function_InitModule (uint16_t mode)
-{
-    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
-                        0,
-                        USB_SYSCFG_DCFM_SHIFT,
-                        USB_SYSCFG_DCFM);           /* USB function */
-
-    /* USB module operation enabled     */
-    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
-                        1,
-                        USB_SYSCFG_USBE_SHIFT,
-                        USB_SYSCFG_USBE);
-
-    if (mode == USB_FUNCTION_HIGH_SPEED)
-    {
-        RZA_IO_RegWrite_16(&USB200.SYSCFG0,
-                            1,
-                            USB_SYSCFG_HSE_SHIFT,
-                            USB_SYSCFG_HSE);        /* Hi-Speed Mode */
-    }
-    else
-    {
-        RZA_IO_RegWrite_16(&USB200.SYSCFG0,
-                            0,
-                            USB_SYSCFG_HSE_SHIFT,
-                            USB_SYSCFG_HSE);
-    }
-
-    /* for power-on                     */
-    if (usb0_function_CheckVBUStaus() == DEVDRV_USBF_ON)
-    {
-        usb0_function_EnableINTModule();            /* Interrupt Enable         */
-        usb0_function_USB_FUNCTION_Attach();        /* pull-up D+ and open D-   */
-    }
-    else
-    {
-        usb0_function_USB_FUNCTION_Detach();        /* USB Detach               */
-                                                    /* with Interrupt Enable    */
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_CheckVBUStaus
-* Description  : Checks the USB-VBUS state to returns the connection state to
-*              : the USB host.
-* Arguments    : none
-* Return Value : DEVDRV_USBF_ON     :   VBUS ON
-*              : DEVDRV_USBF_OFF    :   VBUS OFF
-*******************************************************************************/
-uint16_t usb0_function_CheckVBUStaus (void)
-{
-    uint16_t buf1;
-    uint16_t buf2;
-    uint16_t buf3;
-
-    /* monitor VBUS pins */
-    do
-    {
-        buf1 = RZA_IO_RegRead_16(&USB200.INTSTS0,
-                                USB_INTSTS0_VBSTS_SHIFT,
-                                USB_INTSTS0_VBSTS);
-        Userdef_USB_usb0_function_delay_10us(1);
-        buf2 = RZA_IO_RegRead_16(&USB200.INTSTS0,
-                                USB_INTSTS0_VBSTS_SHIFT,
-                                USB_INTSTS0_VBSTS);
-        Userdef_USB_usb0_function_delay_10us(1);
-        buf3 = RZA_IO_RegRead_16(&USB200.INTSTS0,
-                                USB_INTSTS0_VBSTS_SHIFT,
-                                USB_INTSTS0_VBSTS);
-    } while ((buf1 != buf2) || (buf2 != buf3));
-
-    if (buf1 == DEVDRV_USBF_OFF)
-    {
-        return DEVDRV_USBF_OFF;         /* detach */
-    }
-
-    return DEVDRV_USBF_ON;              /* attach */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_USB_FUNCTION_Attach
-* Description  : Connects to the USB host controller.
-*              : This function pulls up D+.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb0_function_USB_FUNCTION_Attach (void)
-{
-    Userdef_USB_usb0_function_attach();
-
-    Userdef_USB_usb0_function_delay_xms(10);
-
-    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
-                        1,
-                        USB_SYSCFG_DPRPU_SHIFT,
-                        USB_SYSCFG_DPRPU);      /* Pull-up D+ and open D- */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_USB_FUNCTION_Detach
-* Description  : Disconnects from the USB host controller.
-*              : This function opens D+/D-.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb0_function_USB_FUNCTION_Detach (void)
-{
-    uint16_t pipe;
-
-    Userdef_USB_usb0_function_detach();
-
-    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
-    {
-        if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_IDLE)
-        {
-            usb0_function_stop_transfer(pipe);
-        }
-    }
-
-    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
-                        0,
-                        USB_SYSCFG_DPRPU_SHIFT,
-                        USB_SYSCFG_DPRPU);                  /* open D+ and D- */
-
-    /* Detach Recovery */
-    Userdef_USB_usb0_function_delay_500ns();                /* need 1us=500ns * 2 wait */
-    Userdef_USB_usb0_function_delay_500ns();
-
-    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
-                        1,
-                        USB_SYSCFG_DCFM_SHIFT,
-                        USB_SYSCFG_DCFM);
-    Userdef_USB_usb0_function_delay_500ns();                /* need 100ns wait but 500ns S/W wait */
-
-    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
-                        0,
-                        USB_SYSCFG_DCFM_SHIFT,
-                        USB_SYSCFG_DCFM);
-
-    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
-                        0,
-                        USB_SYSCFG_USBE_SHIFT,
-                        USB_SYSCFG_USBE);       /* soft reset module */
-    Userdef_USB_usb0_function_delay_500ns();
-
-    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
-                        1,
-                        USB_SYSCFG_USBE_SHIFT,
-                        USB_SYSCFG_USBE);
-
-    usb0_function_EnableINTModule();            /* Interrupt Enable */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_USB_FUNCTION_BusReset
-* Description  : This function is executed when the USB device is transitioned
-*              : to POWERD_STATE. Sets the device descriptor according to the
-*              : connection speed determined by the USB reset hand shake.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-#if 0	/*The USBHAL in mbed does not need this function*/
-void usb0_function_USB_FUNCTION_BusReset (void)
-{
-    usb0_function_init_status();                                    /* memory clear */
-
-    if (usb0_function_is_hispeed() == USB_FUNCTION_HIGH_SPEED)
-    {
-        usb0_function_ResetDescriptor(USB_FUNCTION_HIGH_SPEED);     /* Device Descriptor reset */
-    }
-    else
-    {
-        usb0_function_ResetDescriptor(USB_FUNCTION_FULL_SPEED);     /* Device Descriptor reset */
-    }
-
-    usb0_function_ResetDCP();                                       /* Default Control PIPE reset */
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_USB_FUNCTION_Resume
-* Description  : This function is executed when the USB device detects a resume
-*              : signal.
-*              : The USB sample driver does not operate for this function.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-#if 0	/*The USBHAL in mbed does not need this function*/
-void usb0_function_USB_FUNCTION_Resume (void)
-{
-    /* NOP */
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_USB_FUNCTION_Suspend
-* Description  : This function is executed when the USB device detects a suspend
-*              : signal.
-*              : The USB sample driver does not operate for this function.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-#if 0	/*The USBHAL in mbed does not need this function*/
-void usb0_function_USB_FUNCTION_Suspend (void)
-{
-    /* NOP */
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_USB_FUNCTION_TestMode
-* Description  : This function is executed when the USB device is transitioned U
-*              : to TEST_MODE by the USB standard request.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb0_function_USB_FUNCTION_TestMode (void)
-{
-    switch (g_usb0_function_TestModeSelectors & USB_FUNCTION_FUNCTION_TEST_SELECT)
-    {
-        case USB_FUNCTION_FUNCTION_TEST_J:
-        case USB_FUNCTION_FUNCTION_TEST_K:
-        case USB_FUNCTION_FUNCTION_TEST_SE0_NAK:
-        case USB_FUNCTION_FUNCTION_TEST_PACKET:
-            RZA_IO_RegWrite_16(&USB200.TESTMODE,
-                                (g_usb0_function_TestModeSelectors >> 8),
-                                USB_TESTMODE_UTST_SHIFT,
-                                USB_TESTMODE_UTST);
-        break;
-
-        case USB_FUNCTION_FUNCTION_TEST_FORCE_ENABLE:
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_EnableINTModule
-* Description  : Enables USB interrupt.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_EnableINTModule (void)
-{
-    uint16_t buf;
-
-    buf  = USB200.INTENB0;
-    buf |= (USB_FUNCTION_BITVBSE | USB_FUNCTION_BITDVSE | USB_FUNCTION_BITCTRE |
-             USB_FUNCTION_BITBEMPE | USB_FUNCTION_BITNRDYE | USB_FUNCTION_BITBRDYE);
-    USB200.INTENB0 = buf;
-
-    usb0_function_enable_bemp_int(USB_FUNCTION_PIPE0);
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_sub.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_sub.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,453 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_sub.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb0_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-#if 0
-extern const uint16_t *g_usb0_function_EndPntPtr[];
-extern uint8_t         g_usb0_function_DeviceDescriptor[];
-extern uint8_t        *g_usb0_function_ConfigurationPtr[];
-#endif
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb0_function_ResetDCP
-* Description  : Initializes the default control pipe(DCP).
-* Outline      : Reset default control pipe
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb0_function_ResetDCP (void)
-{
-    USB200.DCPCFG  = 0;
-#if 0
-    USB200.DCPMAXP = g_usb0_function_DeviceDescriptor[7];
-#else
-    USB200.DCPMAXP = 64;
-#endif
-
-    USB200.CFIFOSEL  = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
-    USB200.D0FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
-    USB200.D1FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_ResetEP
-* Description  : Initializes the end point.
-* Arguments    : uint16_t num          ; Configuration Number
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb0_function_ResetEP (uint16_t num)
-{
-    uint16_t   pipe;
-    uint16_t   ep;
-    uint16_t   index;
-    uint16_t   buf;
-    uint16_t * tbl;
-
-    tbl = (uint16_t *)(g_usb0_function_EndPntPtr[num - 1]);
-
-    for (ep = 1; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
-    {
-        if (g_usb0_function_EPTableIndex[ep] != USB_FUNCTION_EP_ERROR)
-        {
-            index = (uint16_t)(USB_FUNCTION_EPTABLE_LENGTH * g_usb0_function_EPTableIndex[ep]);
-            pipe  = (uint16_t)(tbl[index + 0] & USB_FUNCTION_BITCURPIPE);
-
-            g_usb0_function_PipeTbl[pipe] = (uint16_t)( ((tbl[index + 1] & USB_FUNCTION_DIRFIELD) << 3) |
-                                                         ep                                             |
-                                                         (tbl[index + 0] & USB_FUNCTION_FIFO_USE)          );
-
-            if ((tbl[index + 1] & USB_FUNCTION_DIRFIELD) == USB_FUNCTION_DIR_P_OUT)
-            {
-                tbl[index + 1] |= USB_FUNCTION_SHTNAKON;
-#ifdef  __USB_DMA_BFRE_ENABLE__
-                /* this routine cannnot be perfomred if read operation is executed in buffer size */
-                if (((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA) ||
-                    ((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA))
-                {
-                    tbl[index + 1] |= USB_FUNCTION_BFREON;
-                }
-#endif
-            }
-
-            /* Interrupt Disable */
-            buf  = USB200.BRDYENB;
-            buf &= (uint16_t)~g_usb0_function_bit_set[pipe];
-            USB200.BRDYENB = buf;
-            buf  = USB200.NRDYENB;
-            buf &= (uint16_t)~g_usb0_function_bit_set[pipe];
-            USB200.NRDYENB = buf;
-            buf  = USB200.BEMPENB;
-            buf &= (uint16_t)~g_usb0_function_bit_set[pipe];
-            USB200.BEMPENB = buf;
-
-            usb0_function_set_pid_nak(pipe);
-
-            /* CurrentPIPE Clear */
-            if (RZA_IO_RegRead_16(&USB200.CFIFOSEL,
-                                    USB_CFIFOSEL_CURPIPE_SHIFT,
-                                    USB_CFIFOSEL_CURPIPE) == pipe)
-            {
-                RZA_IO_RegWrite_16(&USB200.CFIFOSEL,
-                                    0,
-                                    USB_CFIFOSEL_CURPIPE_SHIFT,
-                                    USB_CFIFOSEL_CURPIPE);
-            }
-
-            if (RZA_IO_RegRead_16(&USB200.D0FIFOSEL,
-                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
-                                    USB_DnFIFOSEL_CURPIPE) == pipe)
-            {
-                RZA_IO_RegWrite_16(&USB200.D0FIFOSEL,
-                                    0,
-                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
-                                    USB_DnFIFOSEL_CURPIPE);
-            }
-
-            if (RZA_IO_RegRead_16(&USB200.D1FIFOSEL,
-                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
-                                    USB_DnFIFOSEL_CURPIPE) == pipe)
-            {
-                RZA_IO_RegWrite_16(&USB200.D1FIFOSEL,
-                                    0,
-                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
-                                    USB_DnFIFOSEL_CURPIPE);
-            }
-
-            /* PIPE Configuration */
-            USB200.PIPESEL  = pipe;
-            USB200.PIPECFG  = tbl[index + 1];
-            USB200.PIPEBUF  = tbl[index + 2];
-            USB200.PIPEMAXP = tbl[index + 3];
-            USB200.PIPEPERI = tbl[index + 4];
-
-            g_usb0_function_pipecfg[pipe]  = tbl[index + 1];
-            g_usb0_function_pipebuf[pipe]  = tbl[index + 2];
-            g_usb0_function_pipemaxp[pipe] = tbl[index + 3];
-            g_usb0_function_pipeperi[pipe] = tbl[index + 4];
-
-            /* Buffer Clear */
-            usb0_function_set_sqclr(pipe);
-            usb0_function_aclrm(pipe);
-
-            /* init Global */
-            g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
-            g_usb0_function_PipeDataSize[pipe] = 0;
-        }
-    }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_EpToPipe
-* Description  : Returns the pipe which end point specified by the argument is
-*              : allocated to.
-* Arguments    : uint16_t ep       ; Direction + Endpoint Number
-* Return Value : USB_FUNCTION_EP_ERROR         : Error
-*              : Others           : Pipe Number
-*******************************************************************************/
-uint16_t usb0_function_EpToPipe (uint16_t ep)
-{
-    uint16_t pipe;
-
-    for (pipe = 1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
-    {
-        if ((g_usb0_function_PipeTbl[pipe] & 0x00ff) == ep)
-        {
-            return pipe;
-        }
-    }
-
-    return USB_FUNCTION_EP_ERROR;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_InitEPTable
-* Description  : Sets the end point by the Alternate setting value of the
-*              : configuration number and the interface number specified by the
-*              : argument.
-* Arguments    : uint16_t Con_Num       ; Configuration Number
-*              : uint16_t Int_Num       ; Interface Number
-*              : uint16_t Alt_Num       ; Alternate Setting
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb0_function_InitEPTable (uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num)
-{
-    uint8_t  * ptr;
-    uint16_t   point_interface;
-    uint16_t   point_endpoint;
-    uint16_t   length;
-    uint16_t   start;
-    uint16_t   numbers;
-    uint16_t   endpoint;
-
-    ptr = (uint8_t *)g_usb0_function_ConfigurationPtr[Con_Num - 1];
-    point_interface = *ptr;
-    length = (uint16_t)((uint16_t)*(ptr + 3) << 8 | (uint16_t)*(ptr + 2));
-    ptr  += *ptr;
-    start   = 0;
-    numbers = 0;
-    point_endpoint = 0;
-
-    for (; point_interface < length;)
-    {
-        switch (*(ptr + 1))                                     /* Descriptor Type ? */
-        {
-            case USB_FUNCTION_DT_INTERFACE:                     /* Interface */
-                if ((*(ptr + 2) == Int_Num) && (*(ptr + 3) == Alt_Num))
-                {
-                    numbers = *(ptr + 4);
-                }
-                else
-                {
-                    start  += *(ptr + 4);
-                }
-                point_interface += *ptr;
-                ptr += *ptr;
-            break;
-
-            case USB_FUNCTION_DT_ENDPOINT:                      /* Endpoint */
-                if (point_endpoint < numbers)
-                {
-                    endpoint = (uint16_t)(*(ptr + 2) & 0x0f);
-                    g_usb0_function_EPTableIndex[endpoint] = (uint16_t)(start + point_endpoint);
-                    ++point_endpoint;
-                }
-                point_interface += *ptr;
-                ptr += *ptr;
-            break;
-
-            case USB_FUNCTION_DT_DEVICE:                        /* Device */
-            case USB_FUNCTION_DT_CONFIGURATION:                 /* Configuration */
-            case USB_FUNCTION_DT_STRING:                        /* String */
-            default:                                            /* Class, Vendor, else */
-                point_interface += *ptr;
-                ptr += *ptr;
-            break;
-        }
-    }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_GetConfigNum
-* Description  : Returns the number of configuration referring to the number of
-*              : configuration described in the device descriptor.
-* Arguments    : none
-* Return Value : Number of possible configurations (bNumConfigurations).
-*******************************************************************************/
-#if 0
-uint16_t usb0_function_GetConfigNum (void)
-{
-    return (uint16_t)g_usb0_function_DeviceDescriptor[17];
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_GetInterfaceNum
-* Description  : Returns the number of interface referring to the number of
-*              : interface described in the configuration descriptor.
-* Arguments    : uint16_t num       ; Configuration Number
-* Return Value : Number of this interface (bNumInterfaces).
-*******************************************************************************/
-#if 0
-uint16_t usb0_function_GetInterfaceNum (uint16_t num)
-{
-    return (uint16_t)(*(g_usb0_function_ConfigurationPtr[num - 1] + 4));
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_GetAltNum
-* Description  : Returns the Alternate setting value of the configuration number
-*              : and the interface number specified by the argument.
-* Arguments    : uint16_t Con_Num       ; Configuration Number
-*              : uint16_t Int_Num       ; Interface Number
-* Return Value : Value used to select this alternate setting(bAlternateSetting).
-*******************************************************************************/
-#if 0
-uint16_t usb0_function_GetAltNum (uint16_t Con_Num, uint16_t Int_Num)
-{
-    uint8_t  * ptr;
-    uint16_t   point;
-    uint16_t   alt_num = 0;
-    uint16_t   length;
-
-    ptr = (uint8_t *)(g_usb0_function_ConfigurationPtr[Con_Num - 1]);
-    point = ptr[0];
-    ptr  += ptr[0];                                 /* InterfaceDescriptor[0] */
-    length  = (uint16_t)(*(g_usb0_function_ConfigurationPtr[Con_Num - 1] + 2));
-    length |= (uint16_t)((uint16_t)(*(g_usb0_function_ConfigurationPtr[Con_Num - 1] + 3)) << 8);
-
-    for (; point < length;)                                 /* Search Descriptor Table size */
-    {
-        switch (ptr[1])                                     /* Descriptor Type ? */
-        {
-            case USB_FUNCTION_DT_INTERFACE:                 /* Interface */
-                if (Int_Num == ptr[2])
-                {
-                    alt_num = (uint16_t)ptr[3];             /* Alternate Number count */
-                }
-                point += ptr[0];
-                ptr += ptr[0];
-            break;
-
-            case USB_FUNCTION_DT_DEVICE:                    /* Device */
-            case USB_FUNCTION_DT_CONFIGURATION:             /* Configuration */
-            case USB_FUNCTION_DT_STRING:                    /* String */
-            case USB_FUNCTION_DT_ENDPOINT:                  /* Endpoint */
-            default:                                        /* Class, Vendor, else */
-                point += ptr[0];
-                ptr   += ptr[0];
-            break;
-        }
-    }
-    return alt_num;
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_CheckRemoteWakeup
-* Description  : Returns the result of the remote wake up function is supported
-*              : or not referring to the configuration descriptor.
-* Arguments    : none
-* Return Value : DEVDRV_USBF_ON     :   Support Remote Wakeup
-*              : DEVDRV_USBF_OFF    :   not Support Remote Wakeup
-*******************************************************************************/
-#if 0
-uint16_t usb0_function_CheckRemoteWakeup (void)
-{
-    uint8_t atr;
-
-    if (g_usb0_function_ConfigNum == 0)
-    {
-        return DEVDRV_USBF_OFF;
-    }
-
-    atr = *(g_usb0_function_ConfigurationPtr[g_usb0_function_ConfigNum - 1] + 7);
-
-    if (atr & USB_FUNCTION_CF_RWUP)
-    {
-        return DEVDRV_USBF_ON;
-    }
-
-    return DEVDRV_USBF_OFF;
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_clear_alt
-* Description  : Initializes the Alternate setting area.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb0_function_clear_alt (void)
-{
-    int i;
-
-    for (i = 0; i < USB_FUNCTION_ALT_NO; ++i)
-    {
-        g_usb0_function_Alternate[i] = 0;                           /* Alternate */
-    }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_clear_pipe_tbl
-* Description  : Initializes pipe definition table.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb0_function_clear_pipe_tbl (void)
-{
-    int pipe;
-
-    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
-    {
-        g_usb0_function_PipeTbl[pipe] = 0;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_clear_ep_table_index
-* Description  : Initializes the end point table index.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb0_function_clear_ep_table_index (void)
-{
-    int ep;
-
-    for (ep = 0; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
-    {
-        g_usb0_function_EPTableIndex[ep] = USB_FUNCTION_EP_ERROR;
-    }
-}
-#endif
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/userdef/usb0_function_dmacdrv.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/userdef/usb0_function_dmacdrv.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,698 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_dmacdrv.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include <stdio.h>
-#include "r_typedefs.h"
-#include "iodefine.h"
-#include "rza_io_regrw.h"
-#include "usb0_function_dmacdrv.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-#define DMAC_INDEFINE   (255)       /* Macro definition when REQD bit is not used */
-
-/* ==== Request setting information for on-chip peripheral module ==== */
-typedef enum dmac_peri_req_reg_type
-{
-    DMAC_REQ_MID,
-    DMAC_REQ_RID,
-    DMAC_REQ_AM,
-    DMAC_REQ_LVL,
-    DMAC_REQ_REQD
-} dmac_peri_req_reg_type_t;
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-/* ==== Prototype declaration ==== */
-
-/* ==== Global variable ==== */
-/* On-chip peripheral module request setting table */
-static const uint8_t usb0_function_dmac_peri_req_init_table[8][5] =
-{
-    /* MID,RID,AM,LVL,REQD */
-    {32, 3, 2, 1, 1},    /* USB_0 channel 0 transmit FIFO empty */
-    {32, 3, 2, 1, 0},    /* USB_0 channel 0 receive FIFO full   */
-    {33, 3, 2, 1, 1},    /* USB_0 channel 1 transmit FIFO empty */
-    {33, 3, 2, 1, 0},    /* USB_0 channel 1 receive FIFO full   */
-    {34, 3, 2, 1, 1},    /* USB_1 channel 0 transmit FIFO empty */
-    {34, 3, 2, 1, 0},    /* USB_1 channel 0 receive FIFO full   */
-    {35, 3, 2, 1, 1},    /* USB_1 channel 1 transmit FIFO empty */
-    {35, 3, 2, 1, 0},    /* USB_1 channel 1 receive FIFO full   */
-};
-
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC1_PeriReqInit
-* Description  : Sets the register mode for DMA mode and the on-chip peripheral
-*              : module request for transfer request for DMAC channel 1.
-*              : Executes DMAC initial setting using the DMA information
-*              : specified by the argument *trans_info and the enabled/disabled
-*              : continuous transfer specified by the argument continuation.
-*              : Registers DMAC channel 1 interrupt handler function and sets
-*              : the interrupt priority level. Then enables transfer completion
-*              : interrupt.
-* Arguments    : dmac_transinfo_t *trans_info   : Setting information to DMAC register
-*              : uint32_t          dmamode      : DMA mode (only for DMAC_MODE_REGISTER)
-*              : uint32_t          continuation : Set continuous transfer to be valid
-*              :                                  after DMA transfer has been completed
-*              :             DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
-*              :             DMAC_SAMPLE_SINGLE       : Do not execute continuous transfer
-*              : uint32_t request_factor        : Factor for on-chip peripheral module request
-*              :             DMAC_REQ_OSTM0TINT       : OSTM_0 compare match
-*              :             DMAC_REQ_OSTM1TINT       : OSTM_1 compare match
-*              :             DMAC_REQ_TGI0A           : MTU2_0 input capture/compare match
-*              :                  :
-*              : uint32_t          req_direction: Setting value of CHCFG_n register REQD bit
-* Return Value : none
-*******************************************************************************/
-void usb0_function_DMAC1_PeriReqInit (const dmac_transinfo_t * trans_info,
-                                      uint32_t dmamode, uint32_t continuation,
-                                      uint32_t request_factor, uint32_t req_direction)
-{
-    /* ==== Register mode ==== */
-    if (DMAC_MODE_REGISTER == dmamode)
-    {
-        /* ==== Next0 register set ==== */
-        DMAC1.N0SA_n = trans_info->src_addr;        /* Start address of transfer source      */
-        DMAC1.N0DA_n = trans_info->dst_addr;        /* Start address of transfer destination */
-        DMAC1.N0TB_n = trans_info->count;           /* Total transfer byte count             */
-
-        /* DAD : Transfer destination address counting direction */
-        /* SAD : Transfer source address counting direction      */
-        /* DDS : Transfer destination transfer size              */
-        /* SDS : Transfer source transfer size                   */
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            trans_info->daddr_dir,
-                            DMAC1_CHCFG_n_DAD_SHIFT,
-                            DMAC1_CHCFG_n_DAD);
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            trans_info->saddr_dir,
-                            DMAC1_CHCFG_n_SAD_SHIFT,
-                            DMAC1_CHCFG_n_SAD);
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            trans_info->dst_size,
-                            DMAC1_CHCFG_n_DDS_SHIFT,
-                            DMAC1_CHCFG_n_DDS);
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            trans_info->src_size,
-                            DMAC1_CHCFG_n_SDS_SHIFT,
-                            DMAC1_CHCFG_n_SDS);
-
-        /* DMS  : Register mode                            */
-        /* RSEL : Select Next0 register set                */
-        /* SBE  : No discharge of buffer data when aborted */
-        /* DEM  : No DMA interrupt mask                    */
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            0,
-                            DMAC1_CHCFG_n_DMS_SHIFT,
-                            DMAC1_CHCFG_n_DMS);
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            0,
-                            DMAC1_CHCFG_n_RSEL_SHIFT,
-                            DMAC1_CHCFG_n_RSEL);
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            0,
-                            DMAC1_CHCFG_n_SBE_SHIFT,
-                            DMAC1_CHCFG_n_SBE);
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            0,
-                            DMAC1_CHCFG_n_DEM_SHIFT,
-                            DMAC1_CHCFG_n_DEM);
-
-        /* ---- Continuous transfer ---- */
-        if (DMAC_SAMPLE_CONTINUATION == continuation)
-        {
-            /* REN : Execute continuous transfer                         */
-            /* RSW : Change register set when DMA transfer is completed. */
-            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                                1,
-                                DMAC1_CHCFG_n_REN_SHIFT,
-                                DMAC1_CHCFG_n_REN);
-            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                                1,
-                                DMAC1_CHCFG_n_RSW_SHIFT,
-                                DMAC1_CHCFG_n_RSW);
-        }
-        /* ---- Single transfer ---- */
-        else
-        {
-            /* REN : Do not execute continuous transfer                         */
-            /* RSW : Do not change register set when DMA transfer is completed. */
-            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                                0,
-                                DMAC1_CHCFG_n_REN_SHIFT,
-                                DMAC1_CHCFG_n_REN);
-            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                                0,
-                                DMAC1_CHCFG_n_RSW_SHIFT,
-                                DMAC1_CHCFG_n_RSW);
-        }
-
-        /* TM  : Single transfer                          */
-        /* SEL : Channel setting                          */
-        /* HIEN, LOEN : On-chip peripheral module request */
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            0,
-                            DMAC1_CHCFG_n_TM_SHIFT,
-                            DMAC1_CHCFG_n_TM);
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            1,
-                            DMAC1_CHCFG_n_SEL_SHIFT,
-                            DMAC1_CHCFG_n_SEL);
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            1,
-                            DMAC1_CHCFG_n_HIEN_SHIFT,
-                            DMAC1_CHCFG_n_HIEN);
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            0,
-                            DMAC1_CHCFG_n_LOEN_SHIFT,
-                            DMAC1_CHCFG_n_LOEN);
-
-        /* ---- Set factor by specified on-chip peripheral module request ---- */
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
-                            DMAC1_CHCFG_n_AM_SHIFT,
-                            DMAC1_CHCFG_n_AM);
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
-                            DMAC1_CHCFG_n_LVL_SHIFT,
-                            DMAC1_CHCFG_n_LVL);
-
-        if (usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
-        {
-            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                                usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
-                                DMAC1_CHCFG_n_REQD_SHIFT,
-                                DMAC1_CHCFG_n_REQD);
-        }
-        else
-        {
-            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                                req_direction,
-                                DMAC1_CHCFG_n_REQD_SHIFT,
-                                DMAC1_CHCFG_n_REQD);
-        }
-
-        RZA_IO_RegWrite_32(&DMAC01.DMARS,
-                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
-                            DMAC01_DMARS_CH1_RID_SHIFT,
-                            DMAC01_DMARS_CH1_RID);
-        RZA_IO_RegWrite_32(&DMAC01.DMARS,
-                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
-                            DMAC01_DMARS_CH1_MID_SHIFT,
-                            DMAC01_DMARS_CH1_MID);
-
-        /* PR : Round robin mode */
-        RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
-                            1,
-                            DMAC07_DCTRL_0_7_PR_SHIFT,
-                            DMAC07_DCTRL_0_7_PR);
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC1_Open
-* Description  : Enables DMAC channel 1 transfer.
-* Arguments    : uint32_t req : DMAC request mode
-* Return Value :  0 : Succeeded in enabling DMA transfer
-*              : -1 : Failed to enable DMA transfer (due to DMA operation)
-*******************************************************************************/
-int32_t usb0_function_DMAC1_Open (uint32_t req)
-{
-    int32_t ret;
-    volatile uint8_t dummy;
-
-    /* Transferable? */
-    if ((0 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
-                                DMAC1_CHSTAT_n_EN_SHIFT,
-                                DMAC1_CHSTAT_n_EN)) &&
-        (0 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
-                                DMAC1_CHSTAT_n_TACT_SHIFT,
-                                DMAC1_CHSTAT_n_TACT)))
-    {
-        /* Clear Channel Status Register */
-        RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
-                            1,
-                            DMAC1_CHCTRL_n_SWRST_SHIFT,
-                            DMAC1_CHCTRL_n_SWRST);
-        dummy = RZA_IO_RegRead_32(&DMAC1.CHCTRL_n,
-                                DMAC1_CHCTRL_n_SWRST_SHIFT,
-                                DMAC1_CHCTRL_n_SWRST);
-        /* Enable DMA transfer */
-        RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
-                            1,
-                            DMAC1_CHCTRL_n_SETEN_SHIFT,
-                            DMAC1_CHCTRL_n_SETEN);
-
-        /* ---- Request by software ---- */
-        if (DMAC_REQ_MODE_SOFT == req)
-        {
-            /* DMA transfer Request by software */
-            RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
-                                1,
-                                DMAC1_CHCTRL_n_STG_SHIFT,
-                                DMAC1_CHCTRL_n_STG);
-        }
-
-        ret = 0;
-    }
-    else
-    {
-        ret = -1;
-    }
-
-    return ret;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC1_Close
-* Description  : Aborts DMAC channel 1 transfer. Returns the remaining transfer
-*              : byte count at the time of DMA transfer abort to the argument
-*              : *remain.
-* Arguments    : uint32_t * remain : Remaining transfer byte count when
-*              :                   : DMA transfer is aborted
-* Return Value : none
-*******************************************************************************/
-void usb0_function_DMAC1_Close (uint32_t * remain)
-{
-
-    /* ==== Abort transfer ==== */
-    RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
-                        1,
-                        DMAC1_CHCTRL_n_CLREN_SHIFT,
-                        DMAC1_CHCTRL_n_CLREN);
-
-    while (1 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
-                                DMAC1_CHSTAT_n_TACT_SHIFT,
-                                DMAC1_CHSTAT_n_TACT))
-    {
-        /* Loop until transfer is aborted */
-    }
-
-    while (1 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
-                                DMAC1_CHSTAT_n_EN_SHIFT,
-                                DMAC1_CHSTAT_n_EN))
-    {
-        /* Loop until 0 is set in EN before checking the remaining transfer byte count */
-    }
-    /* ==== Obtain remaining transfer byte count ==== */
-    *remain = DMAC1.CRTB_n;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC1_Load_Set
-* Description  : Sets the transfer source address, transfer destination
-*              : address, and total transfer byte count respectively
-*              : specified by the argument src_addr, dst_addr, and count to
-*              : DMAC channel 1 as DMA transfer information.
-*              : Sets the register set selected by the CHCFG_n register
-*              : RSEL bit from the Next0 or Next1 register set.
-*              : This function should be called when DMA transfer of DMAC
-*              : channel 1 is aboted.
-* Arguments    : uint32_t src_addr : Transfer source address
-*              : uint32_t dst_addr : Transfer destination address
-*              : uint32_t count    : Total transfer byte count
-* Return Value : none
-*******************************************************************************/
-void usb0_function_DMAC1_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
-{
-    uint8_t reg_set;
-
-    /* Obtain register set in use */
-    reg_set = RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
-                                DMAC1_CHSTAT_n_SR_SHIFT,
-                                DMAC1_CHSTAT_n_SR);
-
-    /* ==== Load ==== */
-    if (0 == reg_set)
-    {
-        /* ---- Next0 Register Set ---- */
-        DMAC1.N0SA_n = src_addr;    /* Start address of transfer source      */
-        DMAC1.N0DA_n = dst_addr;    /* Start address of transfer destination */
-        DMAC1.N0TB_n = count;       /* Total transfer byte count             */
-    }
-    else
-    {
-        /* ---- Next1 Register Set ---- */
-        DMAC1.N1SA_n = src_addr;    /* Start address of transfer source      */
-        DMAC1.N1DA_n = dst_addr;    /* Start address of transfer destination */
-        DMAC1.N1TB_n = count;       /* Total transfer byte count             */
-     }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC2_PeriReqInit
-* Description  : Sets the register mode for DMA mode and the on-chip peripheral
-*              : module request for transfer request for DMAC channel 2.
-*              : Executes DMAC initial setting using the DMA information
-*              : specified by the argument *trans_info and the enabled/disabled
-*              : continuous transfer specified by the argument continuation.
-*              : Registers DMAC channel 2 interrupt handler function and sets
-*              : the interrupt priority level. Then enables transfer completion
-*              : interrupt.
-* Arguments    : dmac_transinfo_t * trans_info : Setting information to DMAC
-*              :                               : register
-*              : uint32_t dmamode      : DMA mode (only for DMAC_MODE_REGISTER)
-*              : uint32_t continuation : Set continuous transfer to be valid
-*              :                       : after DMA transfer has been completed
-*              :         DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
-*              :         DMAC_SAMPLE_SINGLE       : Do not execute continuous
-*              :                                  : transfer
-*              : uint32_t request_factor : Factor for on-chip peripheral module
-*              :                         : request
-*              :         DMAC_REQ_OSTM0TINT : OSTM_0 compare match
-*              :         DMAC_REQ_OSTM1TINT : OSTM_1 compare match
-*              :         DMAC_REQ_TGI0A     : MTU2_0 input capture/compare match
-*              :                 :
-*              : uint32_t req_direction : Setting value of CHCFG_n register
-*              :                        : REQD bit
-*******************************************************************************/
-void usb0_function_DMAC2_PeriReqInit (const dmac_transinfo_t * trans_info,
-                                      uint32_t dmamode, uint32_t continuation,
-                                      uint32_t request_factor, uint32_t req_direction)
-{
-    /* ==== Register mode ==== */
-    if (DMAC_MODE_REGISTER == dmamode)
-    {
-        /* ==== Next0 register set ==== */
-        DMAC2.N0SA_n = trans_info->src_addr;        /* Start address of transfer source      */
-        DMAC2.N0DA_n = trans_info->dst_addr;        /* Start address of transfer destination */
-        DMAC2.N0TB_n = trans_info->count;           /* Total transfer byte count             */
-
-        /* DAD : Transfer destination address counting direction */
-        /* SAD : Transfer source address counting direction      */
-        /* DDS : Transfer destination transfer size              */
-        /* SDS : Transfer source transfer size                   */
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            trans_info->daddr_dir,
-                            DMAC2_CHCFG_n_DAD_SHIFT,
-                            DMAC2_CHCFG_n_DAD);
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            trans_info->saddr_dir,
-                            DMAC2_CHCFG_n_SAD_SHIFT,
-                            DMAC2_CHCFG_n_SAD);
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            trans_info->dst_size,
-                            DMAC2_CHCFG_n_DDS_SHIFT,
-                            DMAC2_CHCFG_n_DDS);
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            trans_info->src_size,
-                            DMAC2_CHCFG_n_SDS_SHIFT,
-                            DMAC2_CHCFG_n_SDS);
-
-        /* DMS  : Register mode                            */
-        /* RSEL : Select Next0 register set                */
-        /* SBE  : No discharge of buffer data when aborted */
-        /* DEM  : No DMA interrupt mask                    */
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            0,
-                            DMAC2_CHCFG_n_DMS_SHIFT,
-                            DMAC2_CHCFG_n_DMS);
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            0,
-                            DMAC2_CHCFG_n_RSEL_SHIFT,
-                            DMAC2_CHCFG_n_RSEL);
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            0,
-                            DMAC2_CHCFG_n_SBE_SHIFT,
-                            DMAC2_CHCFG_n_SBE);
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            0,
-                            DMAC2_CHCFG_n_DEM_SHIFT,
-                            DMAC2_CHCFG_n_DEM);
-
-        /* ---- Continuous transfer ---- */
-        if (DMAC_SAMPLE_CONTINUATION == continuation)
-        {
-            /* REN : Execute continuous transfer                         */
-            /* RSW : Change register set when DMA transfer is completed. */
-            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                                1,
-                                DMAC2_CHCFG_n_REN_SHIFT,
-                                DMAC2_CHCFG_n_REN);
-            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                                1,
-                                DMAC2_CHCFG_n_RSW_SHIFT,
-                                DMAC2_CHCFG_n_RSW);
-        }
-        /* ---- Single transfer ---- */
-        else
-        {
-            /* REN : Do not execute continuous transfer                         */
-            /* RSW : Do not change register set when DMA transfer is completed. */
-            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                                0,
-                                DMAC2_CHCFG_n_REN_SHIFT,
-                                DMAC2_CHCFG_n_REN);
-            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                                0,
-                                DMAC2_CHCFG_n_RSW_SHIFT,
-                                DMAC2_CHCFG_n_RSW);
-        }
-
-        /* TM  : Single transfer                          */
-        /* SEL : Channel setting                          */
-        /* HIEN, LOEN : On-chip peripheral module request */
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            0,
-                            DMAC2_CHCFG_n_TM_SHIFT,
-                            DMAC2_CHCFG_n_TM);
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            2,
-                            DMAC2_CHCFG_n_SEL_SHIFT,
-                            DMAC2_CHCFG_n_SEL);
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            1,
-                            DMAC2_CHCFG_n_HIEN_SHIFT,
-                            DMAC2_CHCFG_n_HIEN);
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            0,
-                            DMAC2_CHCFG_n_LOEN_SHIFT,
-                            DMAC2_CHCFG_n_LOEN);
-
-        /* ---- Set factor by specified on-chip peripheral module request ---- */
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
-                            DMAC2_CHCFG_n_AM_SHIFT,
-                            DMAC2_CHCFG_n_AM);
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
-                            DMAC2_CHCFG_n_LVL_SHIFT,
-                            DMAC2_CHCFG_n_LVL);
-        if (usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
-        {
-            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                                usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
-                                DMAC2_CHCFG_n_REQD_SHIFT,
-                                DMAC2_CHCFG_n_REQD);
-        }
-        else
-        {
-            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                                req_direction,
-                                DMAC2_CHCFG_n_REQD_SHIFT,
-                                DMAC2_CHCFG_n_REQD);
-        }
-        RZA_IO_RegWrite_32(&DMAC23.DMARS,
-                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
-                            DMAC23_DMARS_CH2_RID_SHIFT,
-                            DMAC23_DMARS_CH2_RID);
-        RZA_IO_RegWrite_32(&DMAC23.DMARS,
-                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
-                            DMAC23_DMARS_CH2_MID_SHIFT,
-                            DMAC23_DMARS_CH2_MID);
-
-        /* PR : Round robin mode */
-        RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
-                            1,
-                            DMAC07_DCTRL_0_7_PR_SHIFT,
-                            DMAC07_DCTRL_0_7_PR);
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC2_Open
-* Description  : Enables DMAC channel 2 transfer.
-* Arguments    : uint32_t req : DMAC request mode
-* Return Value :  0 : Succeeded in enabling DMA transfer
-*              : -1 : Failed to enable DMA transfer (due to DMA operation)
-*******************************************************************************/
-int32_t usb0_function_DMAC2_Open (uint32_t req)
-{
-    int32_t ret;
-    volatile uint8_t dummy;
-
-    /* Transferable? */
-    if ((0 == RZA_IO_RegRead_32(&DMAC.CHSTAT_2,
-                                DMAC2_CHSTAT_n_EN_SHIFT,
-                                DMAC2_CHSTAT_n_EN)) &&
-        (0 == RZA_IO_RegRead_32(&DMAC.CHSTAT_2,
-                                DMAC2_CHSTAT_n_TACT_SHIFT,
-                                DMAC2_CHSTAT_n_TACT)))
-    {
-        /* Clear Channel Status Register */
-        RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
-                            1,
-                            DMAC2_CHCTRL_n_SWRST_SHIFT,
-                            DMAC2_CHCTRL_n_SWRST);
-        dummy = RZA_IO_RegRead_32(&DMAC2.CHCTRL_n,
-                                DMAC2_CHCTRL_n_SWRST_SHIFT,
-                                DMAC2_CHCTRL_n_SWRST);
-        /* Enable DMA transfer */
-        RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
-                            1,
-                            DMAC2_CHCTRL_n_SETEN_SHIFT,
-                            DMAC2_CHCTRL_n_SETEN);
-
-        /* ---- Request by software ---- */
-        if (DMAC_REQ_MODE_SOFT == req)
-        {
-            /* DMA transfer Request by software */
-            RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
-                                1,
-                                DMAC2_CHCTRL_n_STG_SHIFT,
-                                DMAC2_CHCTRL_n_STG);
-        }
-
-        ret = 0;
-    }
-    else
-    {
-        ret = -1;
-    }
-
-    return ret;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC2_Close
-* Description  : Aborts DMAC channel 2 transfer. Returns the remaining transfer
-*              : byte count at the time of DMA transfer abort to the argument
-*              : *remain.
-* Arguments    : uint32_t * remain : Remaining transfer byte count when
-*              :                   : DMA transfer is aborted
-* Return Value : none
-*******************************************************************************/
-void usb0_function_DMAC2_Close (uint32_t * remain)
-{
-
-    /* ==== Abort transfer ==== */
-    RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
-                        1,
-                        DMAC2_CHCTRL_n_CLREN_SHIFT,
-                        DMAC2_CHCTRL_n_CLREN);
-
-    while (1 == RZA_IO_RegRead_32(&DMAC2.CHSTAT_n,
-                                DMAC2_CHSTAT_n_TACT_SHIFT,
-                                DMAC2_CHSTAT_n_TACT))
-    {
-        /* Loop until transfer is aborted */
-    }
-
-    while (1 == RZA_IO_RegRead_32(&DMAC2.CHSTAT_n,
-                                DMAC2_CHSTAT_n_EN_SHIFT,
-                                DMAC2_CHSTAT_n_EN))
-    {
-        /* Loop until 0 is set in EN before checking the remaining transfer byte count */
-    }
-    /* ==== Obtain remaining transfer byte count ==== */
-    *remain = DMAC2.CRTB_n;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC2_Load_Set
-* Description  : Sets the transfer source address, transfer destination
-*              : address, and total transfer byte count respectively
-*              : specified by the argument src_addr, dst_addr, and count to
-*              : DMAC channel 2 as DMA transfer information.
-*              : Sets the register set selected by the CHCFG_n register
-*              : RSEL bit from the Next0 or Next1 register set.
-*              : This function should be called when DMA transfer of DMAC
-*              : channel 2 is aboted.
-* Arguments    : uint32_t src_addr : Transfer source address
-*              : uint32_t dst_addr : Transfer destination address
-*              : uint32_t count    : Total transfer byte count
-* Return Value : none
-*******************************************************************************/
-void usb0_function_DMAC2_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
-{
-    uint8_t reg_set;
-
-    /* Obtain register set in use */
-    reg_set = RZA_IO_RegRead_32(&DMAC2.CHSTAT_n,
-                                DMAC2_CHSTAT_n_SR_SHIFT,
-                                DMAC2_CHSTAT_n_SR);
-
-    /* ==== Load ==== */
-    if (0 == reg_set)
-    {
-        /* ---- Next0 Register Set ---- */
-        DMAC2.N0SA_n = src_addr;     /* Start address of transfer source      */
-        DMAC2.N0DA_n = dst_addr;     /* Start address of transfer destination */
-        DMAC2.N0TB_n = count;        /* Total transfer byte count             */
-    }
-    else
-    {
-        /* ---- Next1 Register Set ---- */
-        DMAC2.N1SA_n = src_addr;     /* Start address of transfer source      */
-        DMAC2.N1DA_n = dst_addr;     /* Start address of transfer destination */
-        DMAC2.N1TB_n = count;        /* Total transfer byte count             */
-     }
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/userdef/usb0_function_userdef.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/userdef/usb0_function_userdef.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,762 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_userdef.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include <stdio.h>
-#include "r_typedefs.h"
-#include "iodefine.h"
-#include "devdrv_usb_function_api.h"
-#include "usb0_function_dmacdrv.h"  /* common DMAC driver for USB */
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-#define DUMMY_ACCESS OSTM0CNT
-
-/* #define CACHE_WRITEBACK */
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-extern int32_t io_cwb(unsigned long start, unsigned long end);
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-static void usb0_function_enable_dmac0(uint32_t src, uint32_t dst, uint32_t count,
-                                       uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
-static void usb0_function_enable_dmac1(uint32_t src, uint32_t dst, uint32_t count,
-                                       uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
-static void Userdef_USB_usb0_function_delay_10us_2(void);
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_d0fifo_dmaintid
-* Description  : get D0FIFO DMA Interrupt ID
-* Arguments    : none
-* Return Value : D0FIFO DMA Interrupt ID
-*******************************************************************************/
-IRQn_Type Userdef_USB_usb0_function_d0fifo_dmaintid (void)
-{
-#if 0
-    return DMAINT1_IRQn;
-#else
-    return 0xFFFF;
-#endif
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_d1fifo_dmaintid
-* Description  : get D1FIFO DMA Interrupt ID
-* Arguments    : none
-* Return Value : D1FIFO DMA Interrupt ID
-*******************************************************************************/
-IRQn_Type Userdef_USB_usb0_function_d1fifo_dmaintid (void)
-{
-#if 0
-    return DMAINT1_IRQn;
-#else
-    return 0xFFFF;
-#endif
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_attach
-* Description  : Wait for the software of 1ms.
-*              : Alter this function according to the user's system.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb0_function_attach (void)
-{
-    printf("\n");
-    printf("channel 0 attach device\n");
-    printf("\n");
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_detach
-* Description  : Wait for the software of 1ms.
-*              : Alter this function according to the user's system.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb0_function_detach (void)
-{
-    printf("\n");
-    printf("channel 0 detach device\n");
-    printf("\n");
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_delay_1ms
-* Description  : Wait for the software of 1ms.
-*              : Alter this function according to the user's system.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb0_function_delay_1ms (void)
-{
-    volatile int i;
-    volatile unsigned long tmp;
-
-    /*
-     * Wait 1ms (Please change for your MCU).
-     */
-    for (i = 0; i < 1440; ++i)
-    {
-        tmp = DUMMY_ACCESS;
-    }
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_delay_xms
-* Description  : Wait for the software in the period of time specified by the
-*              : argument.
-*              : Alter this function according to the user's system.
-* Arguments    : uint32_t msec ; Wait Time (msec)
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb0_function_delay_xms (uint32_t msec)
-{
-    volatile unsigned short i;
-
-    for (i = 0; i < msec; ++i)
-    {
-        Userdef_USB_usb0_function_delay_1ms();
-    }
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_delay_10us
-* Description  : Waits for software for the period specified by the argument.
-*              : Alter this function according to the user's system.
-* Arguments    : uint32_t usec ; Wait Time(x 10usec)
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb0_function_delay_10us (uint32_t usec)
-{
-    volatile int i;
-
-    /* Wait 10us (Please change for your MCU) */
-    for (i = 0; i < usec; ++i)
-    {
-        Userdef_USB_usb0_function_delay_10us_2();
-    }
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_delay_10us_2
-* Description  : Waits for software for the period specified by the argument.
-*              : Alter this function according to the user's system.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-static void Userdef_USB_usb0_function_delay_10us_2 (void)
-{
-    volatile int i;
-    volatile unsigned long tmp;
-
-    /* Wait 1us (Please change for your MCU) */
-    for (i = 0; i < 14; ++i)
-    {
-        tmp = DUMMY_ACCESS;
-    }
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_delay_500ns
-* Description  : Wait for software for 500ns.
-*              : Alter this function according to the user's system.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb0_function_delay_500ns (void)
-{
-    volatile int i;
-    volatile unsigned long tmp;
-
-    /* Wait 500ns (Please change for your MCU) */
-    /* Wait 500ns I clock 266MHz */
-    tmp = DUMMY_ACCESS;
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_start_dma
-* Description  : Enables DMA transfer on the information specified by the argument.
-*              : Set DMAC register by this function to enable DMA transfer.
-*              : After executing this function, USB module is set to start DMA
-*              : transfer. DMA transfer should not wait for DMA transfer complete.
-* Arguments    : USB_FUNCTION_DMA_t *dma   : DMA parameter
-*              :  typedef struct{
-*              :      uint32_t fifo;    FIFO for using
-*              :      uint32_t buffer;  Start address of transfer source/destination
-*              :      uint32_t bytes;   Transfer size(Byte)
-*              :      uint32_t dir;     Transfer direction(0:Buffer->FIFO, 1:FIFO->Buffer)
-*              :      uint32_t size;    DMA transfer size
-*              :   } USB_FUNCTION_DMA_t;
-*              : uint16_t dfacc ; 0 : cycle steal mode
-*              :                  1 : 16byte continuous mode
-*              :                  2 : 32byte continuous mode
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb0_function_start_dma (USB_FUNCTION_DMA_t * dma, uint16_t dfacc)
-{
-    uint32_t trncount;
-    uint32_t src;
-    uint32_t dst;
-    uint32_t size;
-    uint32_t dir;
-#ifdef CACHE_WRITEBACK
-    uint32_t ptr;
-#endif
-
-    trncount = dma->bytes;
-    dir      = dma->dir;
-
-    if (dir == USB_FUNCTION_FIFO2BUF)
-    {
-        /* DxFIFO determination */
-        dst = dma->buffer;
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-        if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-        {
-            src = (uint32_t)(&USB200.D0FIFO.UINT32);
-        }
-        else
-        {
-            src = (uint32_t)(&USB200.D1FIFO.UINT32);
-        }
-        size = dma->size;
-
-        if (size == 0)
-        {
-            src += 3;       /* byte access  */
-        }
-        else if (size == 1)
-        {
-            src += 2;       /* short access */
-        }
-        else
-        {
-            /* Do Nothing */
-        }
-#else
-        size = dma->size;
-
-        if (size == 2)
-        {
-            /* 32bit access */
-            if (dfacc == 2)
-            {
-                /* 32byte access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    src = (uint32_t)(&USB200.D0FIFOB0);
-                }
-                else
-                {
-                    src = (uint32_t)(&USB200.D1FIFOB0);
-                }
-            }
-            else if (dfacc == 1)
-            {
-                /* 16byte access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    src = (uint32_t)(&USB200.D0FIFOB0);
-                }
-                else
-                {
-                    src = (uint32_t)(&USB200.D1FIFOB0);
-                }
-            }
-            else
-            {
-                /* normal access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    src = (uint32_t)(&USB200.D0FIFO.UINT32);
-                }
-                else
-                {
-                    src = (uint32_t)(&USB200.D1FIFO.UINT32);
-                }
-            }
-        }
-        else if (size == 1)
-        {
-            /* 16bit access */
-            dfacc = 0;      /* force normal access */
-
-            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-            {
-                src = (uint32_t)(&USB200.D0FIFO.UINT32);
-            }
-            else
-            {
-                src = (uint32_t)(&USB200.D1FIFO.UINT32);
-            }
-            src += 2;       /* short access */
-        }
-        else
-        {
-            /* 8bit access */
-            dfacc = 0;      /* force normal access */
-
-            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-            {
-                src = (uint32_t)(&USB200.D0FIFO.UINT32);
-            }
-            else
-            {
-                src = (uint32_t)(&USB200.D1FIFO.UINT32);
-            }
-            src += 3;       /* byte access */
-        }
-#endif
-    }
-    else
-    {
-        /* DxFIFO determination */
-        src = dma->buffer;
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-        if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-        {
-            dst = (uint32_t)(&USB200.D0FIFO.UINT32);
-        }
-        else
-        {
-            dst = (uint32_t)(&USB200.D1FIFO.UINT32);
-        }
-        size = dma->size;
-
-        if (size == 0)
-        {
-            dst += 3;       /* byte access  */
-        }
-        else if (size == 1)
-        {
-            dst += 2;       /* short access */
-        }
-        else
-        {
-            /* Do Nothing */
-        }
-#else
-        size = dma->size;
-
-        if (size == 2)
-        {
-            /* 32bit access */
-            if (dfacc == 2)
-            {
-                /* 32byte access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    dst = (uint32_t)(&USB200.D0FIFOB0);
-                }
-                else
-                {
-                    dst = (uint32_t)(&USB200.D1FIFOB0);
-                }
-            }
-            else if (dfacc == 1)
-            {
-                /* 16byte access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    dst = (uint32_t)(&USB200.D0FIFOB0);
-                }
-                else
-                {
-                    dst = (uint32_t)(&USB200.D1FIFOB0);
-                }
-            }
-            else
-            {
-                /* normal access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    dst = (uint32_t)(&USB200.D0FIFO.UINT32);
-                }
-                else
-                {
-                    dst = (uint32_t)(&USB200.D1FIFO.UINT32);
-                }
-            }
-        }
-        else if (size == 1)
-        {
-            /* 16bit access */
-            dfacc = 0;      /* force normal access */
-            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-            {
-                dst = (uint32_t)(&USB200.D0FIFO.UINT32);
-            }
-            else
-            {
-                dst = (uint32_t)(&USB200.D1FIFO.UINT32);
-            }
-            dst += 2;       /* short access */
-        }
-        else
-        {
-            /* 8bit access */
-            dfacc = 0;      /* force normal access */
-
-            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-            {
-                dst = (uint32_t)(&USB200.D0FIFO.UINT32);
-            }
-            else
-            {
-                dst = (uint32_t)(&USB200.D1FIFO.UINT32);
-            }
-            dst += 3;       /* byte access  */
-        }
-#endif
-    }
-
-#ifdef CACHE_WRITEBACK
-    ptr = (uint32_t)dma->buffer;
-
-    if ((ptr & 0x20000000ul) == 0)
-    {
-        io_cwb((uint32_t)ptr, (uint32_t)(ptr) + trncount);
-    }
-#endif
-
-    if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-    {
-        usb0_function_enable_dmac0(src, dst, trncount, size, dir, dma->fifo, dfacc);
-    }
-    else
-    {
-        usb0_function_enable_dmac1(src, dst, trncount, size, dir, dma->fifo, dfacc);
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_enable_dmac0
-* Description  : Enables DMA transfer on the information specified by the argument.
-* Arguments    : uint32_t src   : src address
-*              : uint32_t dst   : dst address
-*              : uint32_t count : transfer byte
-*              : uint32_t size  : transfer size
-*              : uint32_t dir   : direction
-*              : uint32_t fifo  : FIFO(D0FIFO or D1FIFO)
-*              : uint16_t dfacc : 0 : normal access
-*              :                : 1 : 16byte access
-*              :                : 2 : 32byte access
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_enable_dmac0 (uint32_t src, uint32_t dst, uint32_t count,
-                                        uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
-{
-    dmac_transinfo_t trans_info;
-    uint32_t         request_factor = 0;
-    int32_t          ret;
-
-    /* ==== Variable setting for DMAC initialization ==== */
-    trans_info.src_addr = (uint32_t)src;                /* Start address of transfer source      */
-    trans_info.dst_addr = (uint32_t)dst;                /* Start address of transfer destination */
-    trans_info.count    = (uint32_t)count;              /* Total byte count to be transferred    */
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-    if (size == 0)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_8;        /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_8;        /* Transfer destination transfer size */
-    }
-    else if (size == 1)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_16;       /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_16;       /* Transfer destination transfer size */
-    }
-    else if (size == 2)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_32;       /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_32;       /* Transfer destination transfer size */
-    }
-    else
-    {
-        printf("size error!!\n");
-    }
-#else
-    if (dfacc == 2)
-    {
-        /* 32byte access */
-        trans_info.src_size = DMAC_TRANS_SIZE_256;      /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_256;      /* Transfer destination transfer size */
-    }
-    else if (dfacc == 1)
-    {
-        /* 16byte access */
-        trans_info.src_size = DMAC_TRANS_SIZE_128;      /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_128;      /* Transfer destination transfer size */
-    }
-    else
-    {
-        /* normal access */
-        if (size == 0)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_8;    /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_8;    /* Transfer destination transfer size */
-        }
-        else if (size == 1)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_16;   /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_16;   /* Transfer destination transfer size */
-        }
-        else if (size == 2)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_32;   /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_32;   /* Transfer destination transfer size */
-        }
-        else
-        {
-            printf("size error!!\n");
-        }
-    }
-#endif
-
-    if (dir == USB_FUNCTION_FIFO2BUF)
-    {
-        request_factor =DMAC_REQ_USB0_DMA0_RX;          /* USB_0 channel 0 receive FIFO full               */
-        trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer source address      */
-        trans_info.daddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer destination address */
-    }
-    else if (dir == USB_FUNCTION_BUF2FIFO)
-    {
-        request_factor =DMAC_REQ_USB0_DMA0_TX;          /* USB_0 channel 0 receive FIFO empty              */
-        trans_info.saddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer source address      */
-        trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer destination address */
-    }
-    else
-    {
-        /* Do Nothing */
-    }
-
-    /* ==== DMAC initialization ==== */
-    usb0_function_DMAC1_PeriReqInit((const dmac_transinfo_t *)&trans_info,
-                                    DMAC_MODE_REGISTER,
-                                    DMAC_SAMPLE_SINGLE,
-                                    request_factor,
-                                    0);     /* Don't care DMAC_REQ_REQD is setting in
-                                            usb0_function_DMAC1_PeriReqInit() */
-
-    /* ==== DMAC startup ==== */
-    ret = usb0_function_DMAC1_Open(DMAC_REQ_MODE_PERI);
-    if (ret != 0)
-    {
-        printf("DMAC1 Open error!!\n");
-    }
-
-    return;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_enable_dmac1
-* Description  : Enables DMA transfer on the information specified by the argument.
-* Arguments    : uint32_t src   : src address
-*              : uint32_t dst   : dst address
-*              : uint32_t count : transfer byte
-*              : uint32_t size  : transfer size
-*              : uint32_t dir   : direction
-*              : uint32_t fifo  : FIFO(D0FIFO or D1FIFO)
-*              : uint16_t dfacc : 0 : normal access
-*              :                : 1 : 16byte access
-*              :                : 2 : 32byte access
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_enable_dmac1 (uint32_t src, uint32_t dst, uint32_t count,
-                                        uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
-{
-    dmac_transinfo_t trans_info;
-    uint32_t         request_factor = 0;
-    int32_t          ret;
-
-    /* ==== Variable setting for DMAC initialization ==== */
-    trans_info.src_addr = (uint32_t)src;                /* Start address of transfer source      */
-    trans_info.dst_addr = (uint32_t)dst;                /* Start address of transfer destination */
-    trans_info.count    = (uint32_t)count;              /* Total byte count to be transferred    */
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-    if (size == 0)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_8;        /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_8;        /* Transfer destination transfer size */
-    }
-    else if (size == 1)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_16;       /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_16;       /* Transfer destination transfer size */
-    }
-    else if (size == 2)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_32;       /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_32;       /* Transfer destination transfer size */
-    }
-    else
-    {
-        printf("size error!!\n");
-    }
-#else
-    if (dfacc == 2)
-    {
-        /* 32byte access */
-        trans_info.src_size = DMAC_TRANS_SIZE_256;      /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_256;      /* Transfer destination transfer size */
-    }
-    else if (dfacc == 1)
-    {
-        /* 16byte access */
-        trans_info.src_size = DMAC_TRANS_SIZE_128;      /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_128;      /* Transfer destination transfer size */
-    }
-    else
-    {
-        /* normal access */
-        if (size == 0)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_8;    /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_8;    /* Transfer destination transfer size */
-        }
-        else if (size == 1)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_16;   /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_16;   /* Transfer destination transfer size */
-        }
-        else if (size == 2)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_32;   /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_32;   /* Transfer destination transfer size */
-        }
-        else
-        {
-            printf("size error!!\n");
-        }
-    }
-#endif
-
-    if (dir == USB_FUNCTION_FIFO2BUF)
-    {
-        request_factor =DMAC_REQ_USB0_DMA1_RX;          /* USB_0 channel 0 receive FIFO full               */
-        trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer source address      */
-        trans_info.daddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer destination address */
-    }
-    else if (dir == USB_FUNCTION_BUF2FIFO)
-    {
-        request_factor =DMAC_REQ_USB0_DMA1_TX;          /* USB_0 channel 0 receive FIFO empty              */
-        trans_info.saddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer source address      */
-        trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer destination address */
-    }
-    else
-    {
-        /* Do Nothing */
-    }
-
-    /* ==== DMAC initialization ==== */
-    usb0_function_DMAC2_PeriReqInit((const dmac_transinfo_t *)&trans_info,
-                                    DMAC_MODE_REGISTER,
-                                    DMAC_SAMPLE_SINGLE,
-                                    request_factor,
-                                    0);     /* Don't care DMAC_REQ_REQD is setting in
-                                            usb0_function_DMAC1_PeriReqInit() */
-
-    /* ==== DMAC startup ==== */
-    ret = usb0_function_DMAC2_Open(DMAC_REQ_MODE_PERI);
-    if (ret != 0)
-    {
-        printf("DMAC2 Open error!!\n");
-    }
-
-    return;
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_stop_dma0
-* Description  : Disables DMA transfer.
-*              : This function should be executed to DMAC executed at the time
-*              : of specification of D0_FIF0_DMA in dma->fifo.
-* Arguments    : none
-* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
-*              : regarding to the bus width.
-*******************************************************************************/
-uint32_t Userdef_USB_usb0_function_stop_dma0 (void)
-{
-    uint32_t remain;
-
-    /* ==== DMAC release ==== */
-    usb0_function_DMAC1_Close(&remain);
-
-    return remain;
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_stop_dma1
-* Description  : Disables DMA transfer.
-*              : This function should be executed to DMAC executed at the time
-*              : of specification of D1_FIF0_DMA in dma->fifo.
-* Arguments    : none
-* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
-*              : regarding to the bus width.
-*******************************************************************************/
-uint32_t Userdef_USB_usb0_function_stop_dma1 (void)
-{
-    uint32_t remain;
-
-    /* ==== DMAC release ==== */
-    usb0_function_DMAC2_Close(&remain);
-
-    return remain;
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function.h
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,171 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description  : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-#ifndef USB1_FUNCTION_H
-#define USB1_FUNCTION_H
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "devdrv_usb_function_api.h"
-#include "usb_function.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-extern const uint16_t       g_usb1_function_bit_set[];
-extern uint32_t             g_usb1_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
-extern uint8_t              *g_usb1_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-extern uint16_t             g_usb1_function_PipeIgnore[];
-extern uint16_t             g_usb1_function_PipeTbl[];
-extern uint16_t             g_usb1_function_pipe_status[];
-extern uint32_t             g_usb1_function_PipeDataSize[];
-
-extern USB_FUNCTION_DMA_t   g_usb1_function_DmaInfo[];
-extern uint16_t             g_usb1_function_DmaPipe[];
-extern uint16_t             g_usb1_function_DmaBval[];
-extern uint16_t             g_usb1_function_DmaStatus[];
-
-extern uint16_t             g_usb1_function_CtrZeroLengthFlag;
-
-extern uint16_t             g_usb1_function_ConfigNum;
-extern uint16_t             g_usb1_function_Alternate[USB_FUNCTION_ALT_NO];
-extern uint16_t             g_usb1_function_RemoteWakeupFlag;
-extern uint16_t             g_usb1_function_TestModeFlag;
-extern uint16_t             g_usb1_function_TestModeSelectors;
-
-extern uint16_t             g_usb1_function_ReqType;
-extern uint16_t             g_usb1_function_ReqTypeType;
-extern uint16_t             g_usb1_function_ReqTypeRecip;
-extern uint16_t             g_usb1_function_ReqRequest;
-extern uint16_t             g_usb1_function_ReqValue;
-extern uint16_t             g_usb1_function_ReqIndex;
-extern uint16_t             g_usb1_function_ReqLength;
-
-extern uint16_t             g_usb1_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
-
-extern uint16_t             g_usb1_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
-extern uint16_t             g_usb1_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
-extern uint16_t             g_usb1_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
-extern uint16_t             g_usb1_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-/* ==== common ==== */
-void     usb1_function_dma_stop_d0(uint16_t pipe, uint32_t remain);
-void     usb1_function_dma_stop_d1(uint16_t pipe, uint32_t remain);
-uint16_t usb1_function_is_hispeed(void);
-uint16_t usb1_function_is_hispeed_enable(void);
-uint16_t usb1_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
-uint16_t usb1_function_write_buffer(uint16_t pipe);
-uint16_t usb1_function_write_buffer_c(uint16_t pipe);
-uint16_t usb1_function_write_buffer_d0(uint16_t pipe);
-uint16_t usb1_function_write_buffer_d1(uint16_t pipe);
-void     usb1_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
-uint16_t usb1_function_read_buffer(uint16_t pipe);
-uint16_t usb1_function_read_buffer_c(uint16_t pipe);
-uint16_t usb1_function_read_buffer_d0(uint16_t pipe);
-uint16_t usb1_function_read_buffer_d1(uint16_t pipe);
-uint16_t usb1_function_change_fifo_port(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
-void     usb1_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
-void     usb1_function_set_curpipe2(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc);
-uint16_t usb1_function_get_mbw(uint32_t trncount, uint32_t dtptr);
-uint16_t usb1_function_read_dma(uint16_t pipe);
-void     usb1_function_brdy_int(uint16_t status, uint16_t int_enb);
-void     usb1_function_nrdy_int(uint16_t status, uint16_t int_enb);
-void     usb1_function_bemp_int(uint16_t status, uint16_t int_enb);
-void     usb1_function_setting_interrupt(uint8_t level);
-void     usb1_function_reset_module(uint16_t clockmode);
-uint16_t usb1_function_get_buf_size(uint16_t pipe);
-uint16_t usb1_function_get_mxps(uint16_t pipe);
-void     usb1_function_clear_brdy_sts(uint16_t pipe);
-void     usb1_function_clear_bemp_sts(uint16_t pipe);
-void     usb1_function_clear_nrdy_sts(uint16_t pipe);
-void     usb1_function_set_pid_buf(uint16_t pipe);
-void     usb1_function_set_pid_nak(uint16_t pipe);
-void     usb1_function_set_pid_stall(uint16_t pipe);
-void     usb1_function_clear_pid_stall(uint16_t pipe);
-uint16_t usb1_function_get_pid(uint16_t pipe);
-void     usb1_function_set_sqclr(uint16_t pipe);
-void     usb1_function_set_sqset(uint16_t pipe);
-void     usb1_function_set_csclr(uint16_t pipe);
-void     usb1_function_aclrm(uint16_t pipe);
-void     usb1_function_set_aclrm(uint16_t pipe);
-void     usb1_function_clr_aclrm(uint16_t pipe);
-uint16_t usb1_function_get_sqmon(uint16_t pipe);
-uint16_t usb1_function_get_inbuf(uint16_t pipe);
-
-/* ==== function ==== */
-void     usb1_function_init_status(void);
-void     usb1_function_InitModule(uint16_t mode);
-uint16_t usb1_function_CheckVBUStaus(void);
-void     usb1_function_USB_FUNCTION_Attach(void);
-void     usb1_function_USB_FUNCTION_Detach(void);
-void     usb1_function_USB_FUNCTION_BusReset(void);
-void     usb1_function_USB_FUNCTION_Resume(void);
-void     usb1_function_USB_FUNCTION_Suspend(void);
-void     usb1_function_USB_FUNCTION_TestMode(void);
-void     usb1_function_ResetDCP(void);
-void     usb1_function_ResetEP(uint16_t num);
-uint16_t usb1_function_EpToPipe(uint16_t ep);
-void     usb1_function_InitEPTable(uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num);
-uint16_t usb1_function_GetConfigNum(void);
-uint16_t usb1_function_GetAltNum(uint16_t Con_Num, uint16_t Int_Num);
-uint16_t usb1_function_CheckRemoteWakeup(void);
-void     usb1_function_clear_alt(void);
-void     usb1_function_clear_pipe_tbl(void);
-void     usb1_function_clear_ep_table_index(void);
-uint16_t usb1_function_GetInterfaceNum(uint16_t num);
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* USB1_FUNCTION_H */
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function_api.h
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function_api.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,104 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_api.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description  : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-#ifndef USB1_FUNCTION_API_H
-#define USB1_FUNCTION_API_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Variable Externs
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-void     usb1_api_function_init(uint8_t int_level, uint16_t mode, uint16_t clockmode);
-uint16_t usb1_api_function_IsConfigured(void);
-uint16_t usb1_function_GetDeviceState(void);
-uint16_t usb1_api_function_CtrlReadStart(uint32_t size, uint8_t *data);
-void     usb1_api_function_CtrlWriteStart(uint32_t size, uint8_t *data);
-uint16_t usb1_api_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
-uint16_t usb1_api_function_check_pipe_status(uint16_t pipe, uint32_t *size);
-void     usb1_api_function_clear_pipe_status(uint16_t pipe);
-void     usb1_api_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
-void     usb1_api_function_set_pid_buf(uint16_t pipe);
-void     usb1_api_function_set_pid_nak(uint16_t pipe);
-void     usb1_api_function_set_pid_stall(uint16_t pipe);
-void     usb1_api_function_clear_pid_stall(uint16_t pipe);
-uint16_t usb1_api_function_get_pid(uint16_t pipe);
-int32_t  usb1_api_function_check_stall(uint16_t pipe);
-void     usb1_api_function_set_sqclr(uint16_t pipe);
-void     usb1_api_function_set_sqset(uint16_t pipe);
-void     usb1_api_function_set_csclr(uint16_t pipe);
-void     usb1_api_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
-void     usb1_api_function_clear_brdy_sts(uint16_t pipe);
-void     usb1_api_function_clear_bemp_sts(uint16_t pipe);
-void     usb1_api_function_clear_nrdy_sts(uint16_t pipe);
-
-void     usb1_function_ClearFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_SetFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_SetAddress(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_SetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_SetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_SetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_SynchFrame(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_GetStatus(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_GetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_GetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_GetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Resrv_0(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Resrv_123(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Resrv_4(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Resrv_5(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* USB1_FUNCTION_API_H */
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function_dmacdrv.h
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function_dmacdrv.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_dmacdrv.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description  : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-#ifndef USB1_FUNCTION_DMACDRV_H
-#define USB1_FUNCTION_DMACDRV_H
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-typedef struct dmac_transinfo
-{
-    uint32_t src_addr;      /* Transfer source address                */
-    uint32_t dst_addr;      /* Transfer destination address           */
-    uint32_t count;         /* Transfer byte count                    */
-    uint32_t src_size;      /* Transfer source data size              */
-    uint32_t dst_size;      /* Transfer destination data size         */
-    uint32_t saddr_dir;     /* Transfer source address direction      */
-    uint32_t daddr_dir;     /* Transfer destination address direction */
-} dmac_transinfo_t;
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-/* ==== Transfer specification of the sample program ==== */
-#define DMAC_SAMPLE_SINGLE          (0)     /* Single transfer                   */
-#define DMAC_SAMPLE_CONTINUATION    (1)     /* Continuous transfer (use REN bit) */
-
-/* ==== DMA modes ==== */
-#define DMAC_MODE_REGISTER          (0)     /* Register mode */
-#define DMAC_MODE_LINK              (1)     /* Link mode     */
-
-/* ==== Transfer requests ==== */
-#define DMAC_REQ_MODE_EXT           (0)     /* External request                   */
-#define DMAC_REQ_MODE_PERI          (1)     /* On-chip peripheral module request  */
-#define DMAC_REQ_MODE_SOFT          (2)     /* Auto-request (request by software) */
-
-/* ==== DMAC transfer sizes ==== */
-#define DMAC_TRANS_SIZE_8           (0)     /* 8 bits    */
-#define DMAC_TRANS_SIZE_16          (1)     /* 16 bits   */
-#define DMAC_TRANS_SIZE_32          (2)     /* 32 bits   */
-#define DMAC_TRANS_SIZE_64          (3)     /* 64 bits   */
-#define DMAC_TRANS_SIZE_128         (4)     /* 128 bits  */
-#define DMAC_TRANS_SIZE_256         (5)     /* 256 bits  */
-#define DMAC_TRANS_SIZE_512         (6)     /* 512 bits  */
-#define DMAC_TRANS_SIZE_1024        (7)     /* 1024 bits */
-
-/* ==== Address increment for transferring ==== */
-#define DMAC_TRANS_ADR_NO_INC       (1)     /* Not increment */
-#define DMAC_TRANS_ADR_INC          (0)     /* Increment     */
-
-/* ==== Method for detecting DMA request ==== */
-#define DMAC_REQ_DET_FALL           (0)     /* Falling edge detection */
-#define DMAC_REQ_DET_RISE           (1)     /* Rising edge detection  */
-#define DMAC_REQ_DET_LOW            (2)     /* Low level detection    */
-#define DMAC_REQ_DET_HIGH           (3)     /* High level detection   */
-
-/* ==== Request Direction ==== */
-#define DMAC_REQ_DIR_SRC            (0)     /* DMAREQ is the source/ DMAACK is active when reading      */
-#define DMAC_REQ_DIR_DST            (1)     /* DMAREQ is the destination/ DMAACK is active when writing */
-
-/* ==== Descriptors ==== */
-#define DMAC_DESC_HEADER            (0)     /* Header              */
-#define DMAC_DESC_SRC_ADDR          (1)     /* Source Address      */
-#define DMAC_DESC_DST_ADDR          (2)     /* Destination Address */
-#define DMAC_DESC_COUNT             (3)     /* Transaction Byte    */
-#define DMAC_DESC_CHCFG             (4)     /* Channel Confg       */
-#define DMAC_DESC_CHITVL            (5)     /* Channel Interval    */
-#define DMAC_DESC_CHEXT             (6)     /* Channel Extension   */
-#define DMAC_DESC_LINK_ADDR         (7)     /* Link Address        */
-
-/* ==== On-chip peripheral module requests ===== */
-typedef enum dmac_request_factor
-{
-    DMAC_REQ_USB0_DMA0_TX,      /* USB_0 channel 0 transmit FIFO empty            */
-    DMAC_REQ_USB0_DMA0_RX,      /* USB_0 channel 0 receive FIFO full              */
-    DMAC_REQ_USB0_DMA1_TX,      /* USB_0 channel 1 transmit FIFO empty            */
-    DMAC_REQ_USB0_DMA1_RX,      /* USB_0 channel 1 receive FIFO full              */
-    DMAC_REQ_USB1_DMA0_TX,      /* USB_1 channel 0 transmit FIFO empty            */
-    DMAC_REQ_USB1_DMA0_RX,      /* USB_1 channel 0 receive FIFO full              */
-    DMAC_REQ_USB1_DMA1_TX,      /* USB_1 channel 1 transmit FIFO empty            */
-    DMAC_REQ_USB1_DMA1_RX,      /* USB_1 channel 1 receive FIFO full              */
-} dmac_request_factor_t;
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-void usb1_function_DMAC3_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
-                                        uint32_t request_factor, uint32_t req_direction);
-int32_t usb1_function_DMAC3_Open(uint32_t req);
-void usb1_function_DMAC3_Close(uint32_t *remain);
-void usb1_function_DMAC3_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
-
-void usb1_function_DMAC4_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
-                                        uint32_t request_factor, uint32_t req_direction);
-int32_t usb1_function_DMAC4_Open(uint32_t req);
-void usb1_function_DMAC4_Close(uint32_t *remain);
-void usb1_function_DMAC4_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* USB1_FUNCTION_DMACDRV_H */
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_dataio.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_dataio.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2932 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_dataio.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb1_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-static uint16_t g_usb1_function_mbw[(USB_FUNCTION_MAX_PIPE_NO + 1)];
-
-static void     usb1_function_start_receive_trns_c(uint16_t pipe, uint32_t size, uint8_t *data);
-static void     usb1_function_start_receive_trns_d0(uint16_t pipe, uint32_t size, uint8_t *data);
-static void     usb1_function_start_receive_trns_d1(uint16_t pipe, uint32_t size, uint8_t *data);
-static void     usb1_function_start_receive_dma_d0(uint16_t pipe, uint32_t size, uint8_t *data);
-static void     usb1_function_start_receive_dma_d1(uint16_t pipe, uint32_t size, uint8_t *data);
-static uint16_t usb1_function_read_dma_d0(uint16_t pipe);
-static uint16_t usb1_function_read_dma_d1(uint16_t pipe);
-static uint16_t usb1_function_write_dma_d0(uint16_t pipe);
-static uint16_t usb1_function_write_dma_d1(uint16_t pipe);
-
-static void     usb1_function_read_c_fifo(uint16_t pipe, uint16_t count);
-static void     usb1_function_write_c_fifo(uint16_t Pipe, uint16_t count);
-static void     usb1_function_read_d0_fifo(uint16_t pipe, uint16_t count);
-static void     usb1_function_write_d0_fifo(uint16_t pipe, uint16_t count);
-static void     usb1_function_read_d1_fifo(uint16_t pipe, uint16_t count);
-static void     usb1_function_write_d1_fifo(uint16_t pipe, uint16_t count);
-
-static void     usb1_function_clear_transaction_counter(uint16_t pipe);
-static void     usb1_function_set_transaction_counter(uint16_t pipe, uint32_t count);
-
-static uint32_t usb1_function_com_get_dmasize(uint32_t trncount, uint32_t dtptr);
-
-static uint16_t usb1_function_set_dfacc_d0(uint16_t mbw, uint32_t count);
-static uint16_t usb1_function_set_dfacc_d1(uint16_t mbw, uint32_t count);
-
-
-/*******************************************************************************
-* Function Name: usb1_function_start_send_transfer
-* Description  : Starts the USB data communication using pipe specified by the argument.
-* Arguments    : uint16_t  pipe    ; Pipe Number
-*              : uint32_t size     ; Data Size
-*              : uint8_t  *data    ; Data Address
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb1_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t status;
-    uint16_t usefifo;
-    uint16_t mbw;
-
-    g_usb1_function_data_count[pipe]   = size;
-    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    usb1_function_clear_bemp_sts(pipe);
-    usb1_function_clear_brdy_sts(pipe);
-    usb1_function_clear_nrdy_sts(pipe);
-
-    mbw = usb1_function_get_mbw(size, (uint32_t)data);
-
-    usefifo = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
-    switch (usefifo)
-    {
-        case USB_FUNCTION_D0FIFO_USE:
-        case USB_FUNCTION_D0FIFO_DMA:
-            usefifo = USB_FUNCTION_D0USE;
-        break;
-
-        case USB_FUNCTION_D1FIFO_USE:
-        case USB_FUNCTION_D1FIFO_DMA:
-            usefifo = USB_FUNCTION_D1USE;
-        break;
-
-        default:
-            usefifo = USB_FUNCTION_CUSE;
-        break;
-    };
-
-    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, usefifo, DEVDRV_USBF_NO, mbw);
-
-    usb1_function_clear_transaction_counter(pipe);
-
-    usb1_function_aclrm(pipe);
-
-    status = usb1_function_write_buffer(pipe);
-
-    if (status != DEVDRV_USBF_FIFOERROR)
-    {
-        usb1_function_set_pid_buf(pipe);
-    }
-
-    return status;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_write_buffer
-* Description  : Writes data in the buffer allocated in the pipe specified by
-*              : the argument. The FIFO for using is set in the pipe definition table.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb1_function_write_buffer (uint16_t pipe)
-{
-    uint16_t status;
-    uint16_t usefifo;
-
-    g_usb1_function_PipeIgnore[pipe] = 0;
-    usefifo = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
-    switch (usefifo)
-    {
-        case USB_FUNCTION_D0FIFO_USE:
-            status = usb1_function_write_buffer_d0(pipe);
-        break;
-
-        case USB_FUNCTION_D1FIFO_USE:
-            status = usb1_function_write_buffer_d1(pipe);
-        break;
-
-        case USB_FUNCTION_D0FIFO_DMA:
-            status = usb1_function_write_dma_d0(pipe);
-        break;
-
-        case USB_FUNCTION_D1FIFO_DMA:
-            status = usb1_function_write_dma_d1(pipe);
-        break;
-
-        default:
-            status = usb1_function_write_buffer_c(pipe);
-        break;
-    };
-
-    switch (status)
-    {
-        case DEVDRV_USBF_WRITING:                       /* Continue of data write */
-            usb1_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
-            usb1_function_enable_brdy_int(pipe);        /* Enable Ready Interrupt */
-        break;
-
-        case DEVDRV_USBF_WRITEEND:                      /* End of data write */
-        case DEVDRV_USBF_WRITESHRT:                     /* End of data write */
-            usb1_function_disable_brdy_int(pipe);       /* Disable Ready Interrupt */
-            usb1_function_clear_nrdy_sts(pipe);
-            usb1_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
-            /* for last transfer */
-            usb1_function_enable_bemp_int(pipe);        /* Enable Empty Interrupt */
-        break;
-
-        case DEVDRV_USBF_WRITEDMA:                      /* DMA write */
-            usb1_function_clear_nrdy_sts(pipe);
-            usb1_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
-        break;
-
-        case DEVDRV_USBF_FIFOERROR:                     /* FIFO access status */
-        default:
-            usb1_function_disable_brdy_int(pipe);       /* Disable Ready Interrupt */
-            usb1_function_disable_bemp_int(pipe);       /* Disable Empty Interrupt */
-            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
-        break;
-    }
-
-    return status;                      /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_write_buffer_c
-* Description  : Writes data in the buffer allocated in the pipe specified in
-*              : the argument. Writes data by CPU transfer using CFIFO.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb1_function_write_buffer_c (uint16_t pipe)
-{
-    uint32_t count;
-    uint16_t size;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-
-    if (g_usb1_function_CtrZeroLengthFlag == 1)
-    {
-        g_usb1_function_CtrZeroLengthFlag = 0;                  /* Zero Length Packet Flag CLR */
-        return DEVDRV_USBF_WRITEEND;
-    }
-
-    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
-    if (pipe == USB_FUNCTION_PIPE0)
-    {
-        buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
-    }
-    else
-    {
-        buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
-    }
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    size = usb1_function_get_buf_size(pipe);                    /* Data buffer size */
-    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb1_function_data_count[pipe] <= (uint32_t)size)
-    {
-        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
-        count  = g_usb1_function_data_count[pipe];
-
-        if (count == 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
-        }
-    }
-    else
-    {
-        status = DEVDRV_USBF_WRITING;                           /* write continues */
-        count  = (uint32_t)size;
-    }
-
-    usb1_function_write_c_fifo(pipe, (uint16_t)count);
-
-    if (g_usb1_function_data_count[pipe] < (uint32_t)size)
-    {
-        g_usb1_function_data_count[pipe] = 0;
-
-        if (RZA_IO_RegRead_16(&USB201.CFIFOCTR, USB_CFIFOCTR_BVAL_SHIFT, USB_CFIFOCTR_BVAL) == 0)
-        {
-            USB201.CFIFOCTR = USB_FUNCTION_BITBVAL;             /* Short Packet */
-            g_usb1_function_CtrZeroLengthFlag = 1;              /* Zero Length Packet Flag */
-        }
-    }
-    else
-    {
-        g_usb1_function_data_count[pipe] -= count;
-    }
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_write_buffer_d0
-* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
-*              : Writes data by CPU transfer using D0FIFO.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb1_function_write_buffer_d0 (uint16_t pipe)
-{
-    uint32_t count;
-    uint16_t size;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-
-    mbw    = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
-    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    size = usb1_function_get_buf_size(pipe);                    /* Data buffer size */
-    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb1_function_data_count[pipe] <= (uint32_t)size)
-    {
-        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
-        count  = g_usb1_function_data_count[pipe];
-
-        if (count == 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
-        }
-    }
-    else
-    {
-        status = DEVDRV_USBF_WRITING;                           /* write continues */
-        count  = (uint32_t)size;
-    }
-
-    usb1_function_write_d0_fifo(pipe, (uint16_t)count);
-
-    if (g_usb1_function_data_count[pipe] < (uint32_t)size)
-    {
-        g_usb1_function_data_count[pipe] = 0;
-        if (RZA_IO_RegRead_16(&USB201.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
-        {
-            USB201.D0FIFOCTR = USB_FUNCTION_BITBVAL;            /* Short Packet */
-        }
-    }
-    else
-    {
-        g_usb1_function_data_count[pipe] -= count;
-    }
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_write_buffer_d1
-* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
-*              : Writes data by CPU transfer using D1FIFO.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb1_function_write_buffer_d1 (uint16_t pipe)
-{
-    uint32_t count;
-    uint16_t size;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-
-    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
-    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    size = usb1_function_get_buf_size(pipe);                    /* Data buffer size */
-    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb1_function_data_count[pipe] <= (uint32_t)size)
-    {
-        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
-        count  = g_usb1_function_data_count[pipe];
-
-        if (count == 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
-        }
-    }
-    else
-    {
-        status = DEVDRV_USBF_WRITING;                           /* write continues */
-        count  = (uint32_t)size;
-    }
-
-    usb1_function_write_d1_fifo(pipe, (uint16_t)count);
-
-    if (g_usb1_function_data_count[pipe] < (uint32_t)size)
-    {
-        g_usb1_function_data_count[pipe] = 0;
-
-        if (RZA_IO_RegRead_16(&USB201.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
-        {
-            USB201.D1FIFOCTR = USB_FUNCTION_BITBVAL;            /* Short Packet */
-        }
-    }
-    else
-    {
-        g_usb1_function_data_count[pipe] -= count;
-    }
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_write_dma_d0
-* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
-*              : Writes data by DMA transfer using D0FIFO.
-*              : The DMA-ch for using is specified by Userdef_USB_usb1_function_start_dma().
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           : Write end
-*              : DEVDRV_USBF_WRITESHRT          : short data
-*              : DEVDRV_USBF_WRITING            : Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           : Write DMA
-*              : DEVDRV_USBF_FIFOERROR          : FIFO status
-*******************************************************************************/
-static uint16_t usb1_function_write_dma_d0 (uint16_t pipe)
-{
-    uint32_t count;
-    uint16_t size;
-    uint16_t buffer;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t dfacc = 0;
-
-    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
-    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                            /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    size  = usb1_function_get_buf_size(pipe);                       /* Data buffer size */
-    count = g_usb1_function_data_count[pipe];
-
-    if (count != 0)
-    {
-        g_usb1_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe;
-
-        if ((count % size) != 0)
-        {
-            g_usb1_function_DmaBval[USB_FUNCTION_D0FIFO] = 1;
-        }
-        else
-        {
-            g_usb1_function_DmaBval[USB_FUNCTION_D0FIFO] = 0;
-        }
-
-        dfacc = usb1_function_set_dfacc_d0(mbw, count);
-
-        if (mbw == USB_FUNCTION_BITMBW_32)
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2;  /* 32bit transfer */
-        }
-        else if (mbw == USB_FUNCTION_BITMBW_16)
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1;  /* 16bit transfer */
-        }
-        else
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0;  /* 8bit transfer */
-        }
-
-        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo   = USB_FUNCTION_D0FIFO_DMA;
-        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].dir    = USB_FUNCTION_BUF2FIFO;
-        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb1_function_data_pointer[pipe];
-        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes  = count;
-
-        Userdef_USB_usb1_function_start_dma(&g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
-
-        usb1_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
-
-        RZA_IO_RegWrite_16(&USB201.D0FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
-
-        g_usb1_function_data_count[pipe]    = 0;
-        g_usb1_function_data_pointer[pipe] += count;
-        status = DEVDRV_USBF_WRITEDMA;                              /* DMA write  */
-    }
-    else
-    {
-        if (RZA_IO_RegRead_16(&USB201.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
-        {
-            RZA_IO_RegWrite_16(&USB201.D0FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
-        }
-        status = DEVDRV_USBF_WRITESHRT;                             /* Short Packet is end of write */
-    }
-
-    return status;                                                  /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_write_dma_d1
-* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
-*              : Writes data by DMA transfer using D1FIFO.
-*              : The DMA-ch for using is specified by Userdef_USB_usb1_function_start_dma().
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           : Write end
-*              : DEVDRV_USBF_WRITESHRT          : short data
-*              : DEVDRV_USBF_WRITING            : Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           : Write DMA
-*              : DEVDRV_USBF_FIFOERROR          : FIFO status
-*******************************************************************************/
-static uint16_t usb1_function_write_dma_d1 (uint16_t pipe)
-{
-    uint32_t count;
-    uint16_t size;
-    uint16_t buffer;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t dfacc=0;
-
-    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
-    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                            /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    size  = usb1_function_get_buf_size(pipe);                       /* Data buffer size */
-    count = g_usb1_function_data_count[pipe];
-
-    if (count != 0)
-    {
-        g_usb1_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe;
-        if ((count % size) != 0)
-        {
-            g_usb1_function_DmaBval[USB_FUNCTION_D1FIFO] = 1;
-        }
-        else
-        {
-            g_usb1_function_DmaBval[USB_FUNCTION_D1FIFO] = 0;
-        }
-
-        dfacc = usb1_function_set_dfacc_d1(mbw, count);
-
-        if (mbw == USB_FUNCTION_BITMBW_32)
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2;  /* 32bit transfer */
-        }
-        else if (mbw == USB_FUNCTION_BITMBW_16)
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1;  /* 16bit transfer */
-        }
-        else
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0;  /* 8bit transfer */
-        }
-
-        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo   = USB_FUNCTION_D1FIFO_DMA;
-        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].dir    = USB_FUNCTION_BUF2FIFO;
-        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb1_function_data_pointer[pipe];
-        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes  = count;
-
-        Userdef_USB_usb1_function_start_dma(&g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
-
-        usb1_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
-
-        RZA_IO_RegWrite_16(&USB201.D1FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
-
-        g_usb1_function_data_count[pipe]    = 0;
-        g_usb1_function_data_pointer[pipe] += count;
-
-        status = DEVDRV_USBF_WRITEDMA;                              /* DMA write  */
-    }
-    else
-    {
-        if (RZA_IO_RegRead_16(&USB201.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
-        {
-            RZA_IO_RegWrite_16(&USB201.D1FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
-        }
-        status = DEVDRV_USBF_WRITESHRT;                             /* Short Packet is end of write */
-    }
-
-    return status;                                                  /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_start_receive_transfer
-* Description  : Starts USB data reception using the pipe specified in the argument.
-*              : The FIFO for using is set in the pipe definition table.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-void usb1_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t usefifo;
-
-    usb1_function_clear_bemp_sts(pipe);
-    usb1_function_clear_brdy_sts(pipe);
-    usb1_function_clear_nrdy_sts(pipe);
-
-    usefifo = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
-    switch (usefifo)
-    {
-        case USB_FUNCTION_D0FIFO_USE:
-            usb1_function_start_receive_trns_d0(pipe, size, data);
-        break;
-
-        case USB_FUNCTION_D1FIFO_USE:
-            usb1_function_start_receive_trns_d1(pipe, size, data);
-        break;
-
-        case USB_FUNCTION_D0FIFO_DMA:
-            usb1_function_start_receive_dma_d0(pipe, size, data);
-        break;
-
-        case USB_FUNCTION_D1FIFO_DMA:
-            usb1_function_start_receive_dma_d1(pipe, size, data);
-        break;
-
-        default:
-            usb1_function_start_receive_trns_c(pipe, size, data);
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_start_receive_trns_c
-* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by CPU transfer using CFIFO.
-*              : When storing data in the buffer allocated in the pipe specified in the
-*              : argument, BRDY interrupt is generated to read data
-*              : in the interrupt.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_start_receive_trns_c (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb1_function_set_pid_nak(pipe);
-    g_usb1_function_data_count[pipe]   = size;
-    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb1_function_PipeIgnore[pipe]   = 0;
-
-    g_usb1_function_PipeDataSize[pipe] = size;
-    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    mbw = usb1_function_get_mbw(size, (uint32_t)data);
-    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_READ, mbw);
-    USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;
-
-    usb1_function_set_transaction_counter(pipe, size);
-
-    usb1_function_aclrm(pipe);
-
-    usb1_function_enable_nrdy_int(pipe);
-    usb1_function_enable_brdy_int(pipe);
-
-    usb1_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_start_receive_trns_d0
-* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by CPU transfer using D0FIFO.
-*              : This function does not read data from the buffer.
-*              : When storing data in the buffer allocated in the pipe specified
-*              : in the argument, BRDY interrupt is generated to read data in the
-*              : interrupt.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_start_receive_trns_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb1_function_set_pid_nak(pipe);
-    g_usb1_function_data_count[pipe]   = size;
-    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb1_function_PipeIgnore[pipe]   = 0;
-
-    g_usb1_function_PipeDataSize[pipe] = size;
-    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    mbw = usb1_function_get_mbw(size, (uint32_t)data);
-    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
-
-    usb1_function_set_transaction_counter(pipe, size);
-
-    usb1_function_aclrm(pipe);
-
-    usb1_function_enable_nrdy_int(pipe);
-    usb1_function_enable_brdy_int(pipe);
-
-    usb1_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_start_receive_trns_d1
-* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by CPU transfer using D1FIFO.
-*              : This function does not read data from the buffer.
-*              : When storing data in the buffer allocated in the pipe specified
-*              : in the argument, BRDY interrupt is generated to read data.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_start_receive_trns_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb1_function_set_pid_nak(pipe);
-    g_usb1_function_data_count[pipe]   = size;
-    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb1_function_PipeIgnore[pipe]   = 0;
-
-    g_usb1_function_PipeDataSize[pipe] = size;
-    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    mbw = usb1_function_get_mbw(size, (uint32_t)data);
-    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
-
-    usb1_function_set_transaction_counter(pipe, size);
-
-    usb1_function_aclrm(pipe);
-
-    usb1_function_enable_nrdy_int(pipe);
-    usb1_function_enable_brdy_int(pipe);
-
-    usb1_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_start_receive_dma_d0
-* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by DMA transfer using D0FIFO.
-*              : This function does not read data from the buffer.
-*              : When storing data in the buffer allocated in the pipe specified
-*              : in the argument, delivered read request to DMAC to read data from
-*              : the buffer by DMAC.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_start_receive_dma_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb1_function_set_pid_nak(pipe);
-    g_usb1_function_data_count[pipe]   = size;
-    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb1_function_PipeIgnore[pipe]   = 0;
-
-    g_usb1_function_PipeDataSize[pipe] = 0;
-    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    mbw = usb1_function_get_mbw(size, (uint32_t)data);
-    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
-
-    usb1_function_set_transaction_counter(pipe, size);
-
-    usb1_function_aclrm(pipe);
-
-    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        usb1_function_read_dma(pipe);
-
-        usb1_function_enable_nrdy_int(pipe);
-        usb1_function_enable_brdy_int(pipe);
-    }
-    else
-    {
-        usb1_function_enable_nrdy_int(pipe);
-        usb1_function_enable_brdy_int(pipe);
-    }
-
-    usb1_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_start_receive_dma_d1
-* Description  : Read data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by DMA transfer using D0FIFO.
-*              : This function does not read data from the buffer.
-*              : When storing data in the buffer allocated in the pipe specified
-*              : in the argument, delivered read request to DMAC to read data from
-*              : the buffer by DMAC.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_start_receive_dma_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb1_function_set_pid_nak(pipe);
-    g_usb1_function_data_count[pipe]   = size;
-    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb1_function_PipeIgnore[pipe]   = 0;
-
-    g_usb1_function_PipeDataSize[pipe] = 0;
-    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    mbw = usb1_function_get_mbw(size, (uint32_t)data);
-    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
-
-    usb1_function_set_transaction_counter(pipe, size);
-
-    usb1_function_aclrm(pipe);
-
-    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        usb1_function_read_dma(pipe);
-
-        usb1_function_enable_nrdy_int(pipe);
-        usb1_function_enable_brdy_int(pipe);
-    }
-    else
-    {
-        usb1_function_enable_nrdy_int(pipe);
-        usb1_function_enable_brdy_int(pipe);
-    }
-
-    usb1_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_read_buffer
-* Description  : Reads data from the buffer allocated in the pipe specified
-*              : in the argument.
-*              : Uses FIF0 set in the pipe definition table.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-uint16_t usb1_function_read_buffer (uint16_t pipe)
-{
-    uint16_t status;
-
-    g_usb1_function_PipeIgnore[pipe] = 0;
-
-    if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
-    {
-        status = usb1_function_read_buffer_d0(pipe);
-    }
-    else if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
-    {
-        status = usb1_function_read_buffer_d1(pipe);
-    }
-    else
-    {
-        status = usb1_function_read_buffer_c(pipe);
-    }
-
-    switch (status)
-    {
-        case USB_FUNCTION_READING:                                      /* Continue of data read */
-        break;
-
-        case USB_FUNCTION_READEND:                                      /* End of data read */
-        case USB_FUNCTION_READSHRT:                                     /* End of data read */
-            usb1_function_disable_brdy_int(pipe);
-            g_usb1_function_PipeDataSize[pipe]   -= g_usb1_function_data_count[pipe];
-            g_usb1_function_pipe_status[pipe]     = DEVDRV_USBF_PIPE_DONE;
-        break;
-
-        case USB_FUNCTION_READOVER:                                     /* buffer over */
-            if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
-            {
-                USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-            }
-            else if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
-            {
-                USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-            }
-            else
-            {
-                USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;                 /* Clear BCLR */
-            }
-            usb1_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
-            g_usb1_function_PipeDataSize[pipe] -= g_usb1_function_data_count[pipe];
-            g_usb1_function_pipe_status[pipe]   = DEVDRV_USBF_FIFOERROR;
-        break;
-
-        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access status */
-        default:
-            usb1_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
-            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
-        break;
-    }
-
-    return status;                                                      /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_read_buffer_c
-* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by CPU transfer using CFIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-uint16_t usb1_function_read_buffer_c (uint16_t pipe)
-{
-    uint32_t count;
-    uint32_t dtln;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-
-    mbw    = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
-    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
-    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb1_function_data_count[pipe] < dtln)                /* Buffer Over ? */
-    {
-        status = USB_FUNCTION_READOVER;
-        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = g_usb1_function_data_count[pipe];
-    }
-    else if (g_usb1_function_data_count[pipe] == dtln)          /* just Receive Size */
-    {
-        status = USB_FUNCTION_READEND;
-        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = dtln;
-
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-        }
-    }
-    else                                                        /* continue Receive data */
-    {
-        status = USB_FUNCTION_READING;
-        count  = dtln;
-
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-    }
-
-    if (count == 0)                                             /* 0 length packet */
-    {
-        USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;                 /* Clear BCLR */
-    }
-    else
-    {
-        usb1_function_read_c_fifo(pipe, (uint16_t)count);
-    }
-
-    g_usb1_function_data_count[pipe] -= count;
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_read_buffer_d0
-* Description  : Reads data from the buffer allocated in the pipe specified in
-*              : the argument.
-*              : Reads data by CPU transfer using D0FIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-uint16_t usb1_function_read_buffer_d0 (uint16_t pipe)
-{
-    uint32_t count;
-    uint32_t dtln;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t pipebuf_size;
-
-    mbw    = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
-    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
-    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb1_function_data_count[pipe] < dtln)                /* Buffer Over ? */
-    {
-        status = USB_FUNCTION_READOVER;
-        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = g_usb1_function_data_count[pipe];
-    }
-    else if (g_usb1_function_data_count[pipe] == dtln)          /* just Receive Size */
-    {
-        status = USB_FUNCTION_READEND;
-        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = dtln;
-
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-        }
-    }
-    else                                                        /* continue Receive data */
-    {
-        status = USB_FUNCTION_READING;
-        count  = dtln;
-
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-        else
-        {
-            pipebuf_size = usb1_function_get_buf_size(pipe);    /* Data buffer size */
-
-            if (count != pipebuf_size)
-            {
-                status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
-                usb1_function_set_pid_nak(pipe);                /* Set NAK */
-            }
-        }
-    }
-
-    if (count == 0)                                             /* 0 length packet */
-    {
-        USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-    }
-    else
-    {
-        usb1_function_read_d0_fifo(pipe, (uint16_t)count);
-    }
-
-    g_usb1_function_data_count[pipe] -= count;
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_read_buffer_d1
-* Description  : Reads data from the buffer allocated in the pipe specified
-*              : in the argument.
-*              : Reads data by CPU transfer using D1FIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-uint16_t usb1_function_read_buffer_d1 (uint16_t pipe)
-{
-    uint32_t count;
-    uint32_t dtln;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t pipebuf_size;
-
-    mbw    = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
-    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
-    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb1_function_data_count[pipe] < dtln)                /* Buffer Over ? */
-    {
-        status = USB_FUNCTION_READOVER;
-        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = g_usb1_function_data_count[pipe];
-    }
-    else if (g_usb1_function_data_count[pipe] == dtln)          /* just Receive Size */
-    {
-        status = USB_FUNCTION_READEND;
-        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = dtln;
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-        }
-    }
-    else                                                        /* continue Receive data */
-    {
-        status = USB_FUNCTION_READING;
-        count  = dtln;
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-        else
-        {
-            pipebuf_size = usb1_function_get_buf_size(pipe);    /* Data buffer size */
-
-            if (count != pipebuf_size)
-            {
-                status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
-                usb1_function_set_pid_nak(pipe);                /* Set NAK */
-            }
-        }
-    }
-
-    if (count == 0)                                             /* 0 length packet */
-    {
-        USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-    }
-    else
-    {
-        usb1_function_read_d1_fifo(pipe, (uint16_t)count);
-    }
-
-    g_usb1_function_data_count[pipe] -= count;
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_read_dma
-* Description  : Reads data from the buffer allocated in the pipe specified
-*              : in the argument.
-*              : Reads data by DMA transfer using D0FIFO or D1FIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-uint16_t usb1_function_read_dma (uint16_t pipe)
-{
-    uint16_t status;
-
-    g_usb1_function_PipeIgnore[pipe] = 0;
-    if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
-    {
-        status = usb1_function_read_dma_d0(pipe);
-    }
-    else
-    {
-        status = usb1_function_read_dma_d1(pipe);
-    }
-
-    switch (status)
-    {
-        case USB_FUNCTION_READING:                                      /* Continue of data read */
-        break;
-
-        case USB_FUNCTION_READZERO:                                     /* End of data read */
-            usb1_function_disable_brdy_int(pipe);
-            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-        break;
-
-        case USB_FUNCTION_READEND:                                      /* End of data read */
-        case USB_FUNCTION_READSHRT:                                     /* End of data read */
-            usb1_function_disable_brdy_int(pipe);
-
-            if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-            {
-                g_usb1_function_PipeDataSize[pipe] -= g_usb1_function_data_count[pipe];
-            }
-        break;
-
-        case USB_FUNCTION_READOVER:                                     /* buffer over */
-            usb1_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
-
-            if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-            {
-                g_usb1_function_PipeDataSize[pipe] -= g_usb1_function_data_count[pipe];
-            }
-            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
-        break;
-
-        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access status */
-        default:
-            usb1_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
-            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
-        break;
-    }
-
-    return status;                                                      /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_read_dma_d0
-* Description  : Writes data in the buffer allocated in the pipe specified
-*              : in the argument.
-*              : Reads data by DMA transfer using D0FIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READZERO         ; zero data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-static uint16_t usb1_function_read_dma_d0 (uint16_t pipe)
-{
-    uint32_t count;
-    uint32_t dtln;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t dfacc = 0;
-    uint16_t pipebuf_size;
-
-    g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
-
-    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
-
-    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        count  = g_usb1_function_data_count[pipe];
-        status = USB_FUNCTION_READING;
-    }
-    else
-    {
-        buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
-
-        if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-        {
-            return DEVDRV_USBF_FIFOERROR;
-        }
-
-        dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
-        mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
-
-        if (g_usb1_function_data_count[pipe] < dtln)                /* Buffer Over ? */
-        {
-            status = USB_FUNCTION_READOVER;
-            count  = g_usb1_function_data_count[pipe];
-        }
-        else if (g_usb1_function_data_count[pipe] == dtln)          /* just Receive Size */
-        {
-            status = USB_FUNCTION_READEND;
-            count  = dtln;
-            if (count == 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            }
-
-            if ((count % mxps) != 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            }
-        }
-        else                                                        /* continue Receive data */
-        {
-            status = USB_FUNCTION_READING;
-            count  = dtln;
-
-            if (count == 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            }
-
-            if ((count % mxps) != 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            }
-            else
-            {
-                pipebuf_size = usb1_function_get_buf_size(pipe);    /* Data buffer size */
-                if (count != pipebuf_size)
-                {
-                    status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
-                }
-            }
-        }
-    }
-
-    if (count == 0)                                                 /* 0 length packet */
-    {
-        if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-        {
-            USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-            status = USB_FUNCTION_READZERO;                         /* Null Packet receive */
-        }
-        else
-        {
-            usb1_function_set_curpipe(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
-                                                                    /* transaction counter No set */
-                                                                    /* FRDY = 1, DTLN = 0 -> BRDY */
-        }
-    }
-    else
-    {
-        dfacc = usb1_function_set_dfacc_d0(mbw, count);
-
-        if (mbw == USB_FUNCTION_BITMBW_32)
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2;  /* 32bit transfer */
-        }
-        else if (mbw == USB_FUNCTION_BITMBW_16)
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1;  /* 16bit transfer */
-        }
-        else
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0;  /* 8bit transfer */
-        }
-
-        g_usb1_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe;        /* not use in read operation */
-        g_usb1_function_DmaBval[USB_FUNCTION_D0FIFO] = 0;           /* not use in read operation */
-
-        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo   = USB_FUNCTION_D0FIFO_DMA;
-        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].dir    = USB_FUNCTION_FIFO2BUF;
-        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb1_function_data_pointer[pipe];
-        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes  = count;
-
-        if (status == USB_FUNCTION_READING)
-        {
-            g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSY;
-        }
-        else
-        {
-            g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSYEND;
-        }
-
-        Userdef_USB_usb1_function_start_dma(&g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
-
-        usb1_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
-
-        RZA_IO_RegWrite_16(&USB201.D0FIFOSEL,
-                            1,
-                            USB_DnFIFOSEL_DREQE_SHIFT,
-                            USB_DnFIFOSEL_DREQE);
-    }
-
-    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-    {
-        g_usb1_function_data_count[pipe]   -= count;
-        g_usb1_function_data_pointer[pipe] += count;
-        g_usb1_function_PipeDataSize[pipe] += count;
-    }
-
-    return status;                                                  /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_read_dma_d1
-* Description  : Reads data from the buffer allocated in the pipe specified in
-*              : the argument.
-*              : Reads data by DMA transfer using D1FIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READZERO         ; zero data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-static uint16_t usb1_function_read_dma_d1 (uint16_t pipe)
-{
-    uint32_t count;
-    uint32_t dtln;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t dfacc = 0;
-    uint16_t pipebuf_size;
-
-    g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
-
-    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
-
-    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        count  = g_usb1_function_data_count[pipe];
-        status = USB_FUNCTION_READING;
-    }
-    else
-    {
-        buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
-        if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-        {
-            return DEVDRV_USBF_FIFOERROR;
-        }
-
-        dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
-        mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
-
-        if (g_usb1_function_data_count[pipe] < dtln)                /* Buffer Over ? */
-        {
-            status = USB_FUNCTION_READOVER;
-            count  = g_usb1_function_data_count[pipe];
-        }
-        else if (g_usb1_function_data_count[pipe] == dtln)          /* just Receive Size */
-        {
-            status = USB_FUNCTION_READEND;
-            count  = dtln;
-            if (count == 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            }
-
-            if ((count % mxps) != 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            }
-        }
-        else                                                        /* continue Receive data */
-        {
-            status = USB_FUNCTION_READING;
-            count  = dtln;
-            if (count == 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            }
-
-            if ((count % mxps) != 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            }
-            else
-            {
-                pipebuf_size = usb1_function_get_buf_size(pipe);    /* Data buffer size */
-                if (count != pipebuf_size)
-                {
-                    status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
-                }
-            }
-        }
-    }
-
-    if (count == 0)                                                 /* 0 length packet */
-    {
-        if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-        {
-            USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-            status = USB_FUNCTION_READZERO;                         /* Null Packet receive */
-        }
-        else
-        {
-            usb1_function_set_curpipe(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
-                                                                    /* transaction counter No set */
-                                                                    /* FRDY = 1, DTLN = 0 -> BRDY */
-        }
-    }
-    else
-    {
-        dfacc = usb1_function_set_dfacc_d1(mbw, count);
-
-        if (mbw == USB_FUNCTION_BITMBW_32)
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2;  /* 32bit transfer */
-        }
-        else if (mbw == USB_FUNCTION_BITMBW_16)
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1;  /* 16bit transfer */
-        }
-        else
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0;  /* 8bit transfer */
-        }
-
-        g_usb1_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe;        /* not use in read operation */
-        g_usb1_function_DmaBval[USB_FUNCTION_D1FIFO] = 0;           /* not use in read operation */
-
-        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo   = USB_FUNCTION_D1FIFO_DMA;
-        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].dir    = USB_FUNCTION_FIFO2BUF;
-        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb1_function_data_pointer[pipe];
-        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes  = count;
-
-        if (status == USB_FUNCTION_READING)
-        {
-            g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSY;
-        }
-        else
-        {
-            g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSYEND;
-        }
-
-        Userdef_USB_usb1_function_start_dma(&g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
-
-        usb1_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
-
-        RZA_IO_RegWrite_16(&USB201.D1FIFOSEL,
-                            1,
-                            USB_DnFIFOSEL_DREQE_SHIFT,
-                            USB_DnFIFOSEL_DREQE);
-    }
-
-    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-    {
-        g_usb1_function_data_count[pipe]   -= count;
-        g_usb1_function_data_pointer[pipe] += count;
-        g_usb1_function_PipeDataSize[pipe] += count;
-    }
-
-    return status;                                                  /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_change_fifo_port
-* Description  : Allocates FIF0 specified by the argument in the pipe assigned
-*              : by the argument. After allocating FIF0, waits in the software
-*              : till the corresponding pipe becomes ready.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t fifosel   ; Select FIFO
-*              : uint16_t isel      ; FIFO Access Direction
-*              : uint16_t mbw       ; FIFO Port Access Bit Width
-* Return Value : DEVDRV_USBF_FIFOERROR          ; Error
-*              : Others            ; CFIFOCTR/D0FIFOCTR/D1FIFOCTR Register Value
-*******************************************************************************/
-uint16_t usb1_function_change_fifo_port (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
-{
-    uint16_t buffer;
-    uint32_t loop;
-    volatile uint32_t loop2;
-
-    usb1_function_set_curpipe(pipe, fifosel, isel, mbw);
-
-    for (loop = 0; loop < 4; loop++)
-    {
-        switch (fifosel)
-        {
-            case USB_FUNCTION_CUSE:
-                buffer = USB201.CFIFOCTR;
-            break;
-
-            case USB_FUNCTION_D0USE:
-            case USB_FUNCTION_D0DMA:
-                buffer = USB201.D0FIFOCTR;
-            break;
-
-            case USB_FUNCTION_D1USE:
-            case USB_FUNCTION_D1DMA:
-                buffer = USB201.D1FIFOCTR;
-            break;
-
-            default:
-                buffer = 0;
-            break;
-        }
-
-        if ((buffer & USB_FUNCTION_BITFRDY) == USB_FUNCTION_BITFRDY)
-        {
-            return buffer;
-        }
-
-        loop2 = 25;
-        while (loop2-- > 0)
-        {
-            /* wait */
-        }
-    }
-
-    return DEVDRV_USBF_FIFOERROR;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_curpipe
-* Description  : Allocates FIF0 specified by the argument in the pipe assigned
-*              : by the argument.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t fifosel   ; Select FIFO
-*              : uint16_t isel      ; FIFO Access Direction
-*              : uint16_t mbw       ; FIFO Port Access Bit Width
-* Return Value : none
-*******************************************************************************/
-void usb1_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
-{
-    uint16_t buffer;
-    uint32_t loop;
-    volatile uint32_t loop2;
-
-    g_usb1_function_mbw[pipe] = mbw;
-
-    switch (fifosel)
-    {
-        case USB_FUNCTION_CUSE:
-            buffer  = USB201.CFIFOSEL;
-            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
-            buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
-            USB201.CFIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
-                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(isel | pipe | mbw);
-            USB201.CFIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
-                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        case USB_FUNCTION_D0DMA:
-        case USB_FUNCTION_D0USE:
-            buffer  = USB201.D0FIFOSEL;
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
-            USB201.D0FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
-                        (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(pipe | mbw);
-            USB201.D0FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
-                        (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        case USB_FUNCTION_D1DMA:
-        case USB_FUNCTION_D1USE:
-            buffer  = USB201.D1FIFOSEL;
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
-            USB201.D1FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
-                        (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(pipe | mbw);
-            USB201.D1FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
-                        (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        default:
-        break;
-    }
-
-    /* Cautions !!!
-     * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
-     * For details, please look at the data sheet.   */
-    loop2 = 100;
-
-    while (loop2-- > 0)
-    {
-        /* wait */
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_curpipe2
-* Description  : Allocates FIF0 specified by the argument in the pipe assigned
-*              : by the argument.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t fifosel   ; Select FIFO
-*              : uint16_t isel      ; FIFO Access Direction
-*              : uint16_t mbw       ; FIFO Port Access Bit Width
-*              : uint16_t dfacc     ; DFACC Access mode
-* Return Value : none
-*******************************************************************************/
-void usb1_function_set_curpipe2 (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc)
-{
-    uint16_t buffer;
-    uint32_t loop;
-#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
-    uint32_t dummy;
-#endif
-    volatile uint32_t loop2;
-
-    g_usb1_function_mbw[pipe] = mbw;
-
-    switch (fifosel)
-    {
-        case USB_FUNCTION_CUSE:
-            buffer  = USB201.CFIFOSEL;
-            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
-            buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
-            USB201.CFIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
-                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(isel | pipe | mbw);
-            USB201.CFIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
-                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        case USB_FUNCTION_D0DMA:
-        case USB_FUNCTION_D0USE:
-            buffer  = USB201.D0FIFOSEL;
-#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-
-            if (dfacc != 0)
-            {
-                buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
-            }
-#else
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
-#endif
-            USB201.D0FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-
-#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
-            if (dfacc != 0)
-            {
-                dummy = USB201.D0FIFO.UINT32;
-            }
-#endif
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(pipe | mbw);
-            USB201.D0FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        case USB_FUNCTION_D1DMA:
-        case USB_FUNCTION_D1USE:
-            buffer  = USB201.D1FIFOSEL;
-#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-
-            if (dfacc != 0)
-            {
-                buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
-            }
-#else
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
-#endif
-            USB201.D1FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
-            if (dfacc != 0)
-            {
-                dummy = USB201.D1FIFO.UINT32;
-                loop = dummy;                   // avoid warning.
-            }
-#endif
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(pipe | mbw);
-            USB201.D1FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        default:
-        break;
-    }
-
-    /* Cautions !!!
-     * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
-     * For details, please look at the data sheet.   */
-    loop2 = 100;
-
-    while (loop2-- > 0)
-    {
-        /* wait */
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_write_c_fifo
-* Description  : Writes data in CFIFO.
-*              : Writes data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating CFIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb1_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_write_c_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            USB201.CFIFO.UINT8[HH] = *g_usb1_function_data_pointer[pipe];
-            g_usb1_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)(count / 2); even; --even)
-        {
-            USB201.CFIFO.UINT16[H] = *((uint16_t *)g_usb1_function_data_pointer[pipe]);
-            g_usb1_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)(count / 4); even; --even)
-        {
-            USB201.CFIFO.UINT32 = *((uint32_t *)g_usb1_function_data_pointer[pipe]);
-            g_usb1_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_read_c_fifo
-* Description  : Reads data from CFIFO.
-*              : Reads data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating CFIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb1_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_read_c_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            *g_usb1_function_data_pointer[pipe] = USB201.CFIFO.UINT8[HH];
-            g_usb1_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)((count + 1) / 2); even; --even)
-        {
-            *((uint16_t *)g_usb1_function_data_pointer[pipe]) = USB201.CFIFO.UINT16[H];
-            g_usb1_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)((count + 3) / 4); even; --even)
-        {
-            *((uint32_t *)g_usb1_function_data_pointer[pipe]) = USB201.CFIFO.UINT32;
-            g_usb1_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_write_d0_fifo
-* Description  : Writes data in D0FIFO.
-*              : Writes data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating CFIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb1_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_write_d0_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            USB201.D0FIFO.UINT8[HH] = *g_usb1_function_data_pointer[pipe];
-            g_usb1_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)(count / 2); even; --even)
-        {
-            USB201.D0FIFO.UINT16[H] = *((uint16_t *)g_usb1_function_data_pointer[pipe]);
-            g_usb1_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)(count / 4); even; --even)
-        {
-            USB201.D0FIFO.UINT32 = *((uint32_t *)g_usb1_function_data_pointer[pipe]);
-            g_usb1_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_read_d0_fifo
-* Description  : Reads data from D0FIFO.
-*              : Reads data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating DOFIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb1_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_read_d0_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            *g_usb1_function_data_pointer[pipe] = USB201.D0FIFO.UINT8[HH];
-            g_usb1_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)((count + 1) / 2); even; --even)
-        {
-            *((uint16_t *)g_usb1_function_data_pointer[pipe]) = USB201.D0FIFO.UINT16[H];
-            g_usb1_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)((count + 3) / 4); even; --even)
-        {
-            *((uint32_t *)g_usb1_function_data_pointer[pipe]) = USB201.D0FIFO.UINT32;
-            g_usb1_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_write_d1_fifo
-* Description  : Writes data in D1FIFO.
-*              : Writes data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating D1FIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb1_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_write_d1_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            USB201.D1FIFO.UINT8[HH] = *g_usb1_function_data_pointer[pipe];
-            g_usb1_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)(count / 2); even; --even)
-        {
-            USB201.D1FIFO.UINT16[H] = *((uint16_t *)g_usb1_function_data_pointer[pipe]);
-            g_usb1_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)(count / 4); even; --even)
-        {
-            USB201.D1FIFO.UINT32 = *((uint32_t *)g_usb1_function_data_pointer[pipe]);
-            g_usb1_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_read_d1_fifo
-* Description  : Reads data from D1FIFO.
-*              : Reads data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating D1FIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb1_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_read_d1_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            *g_usb1_function_data_pointer[pipe] = USB201.D1FIFO.UINT8[HH];
-            g_usb1_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)((count + 1) / 2); even; --even)
-        {
-            *((uint16_t *)g_usb1_function_data_pointer[pipe]) = USB201.D1FIFO.UINT16[H];
-            g_usb1_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)((count + 3) / 4); even; --even)
-        {
-            *((uint32_t *)g_usb1_function_data_pointer[pipe]) = USB201.D1FIFO.UINT32;
-            g_usb1_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_com_get_dmasize
-* Description  : Calculates access width of DMA transfer by the argument to
-*              : return as the Return Value.
-* Arguments    : uint32_t trncount   : transfer byte
-*              : uint32_t dtptr      : transfer data pointer
-* Return Value : DMA transfer size    : 0   8bit
-*              :                      : 1  16bit
-*              :                      : 2  32bit
-*******************************************************************************/
-static uint32_t usb1_function_com_get_dmasize (uint32_t trncount, uint32_t dtptr)
-{
-    uint32_t size;
-
-    if (((trncount & 0x0001) != 0) || ((dtptr & 0x00000001) != 0))
-    {
-        /*  When transfer byte count is odd         */
-        /* or transfer data area is 8-bit alignment */
-        size = 0;           /* 8bit */
-    }
-    else if (((trncount & 0x0003) != 0) || ((dtptr & 0x00000003) != 0))
-    {
-        /* When the transfer byte count is multiples of 2 */
-        /* or the transfer data area is 16-bit alignment */
-        size = 1;           /* 16bit */
-    }
-    else
-    {
-        /* When the transfer byte count is multiples of 4 */
-        /* or the transfer data area is 32-bit alignment */
-        size = 2;           /* 32bit */
-    }
-
-    return size;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_get_mbw
-* Description  : Calculates access width of DMA to return the value set in MBW.
-* Arguments    : uint32_t trncount   : transfer byte
-*              : uint32_t dtptr      : transfer data pointer
-* Return Value : FIFO transfer size   : USB_FUNCTION_BITMBW_8    8bit
-*              :                      : USB_FUNCTION_BITMBW_16  16bit
-*              :                      : USB_FUNCTION_BITMBW_32  32bit
-*******************************************************************************/
-uint16_t usb1_function_get_mbw (uint32_t trncount, uint32_t dtptr)
-{
-    uint32_t size;
-    uint16_t mbw;
-
-    size = usb1_function_com_get_dmasize(trncount, dtptr);
-
-    if (size == 0)
-    {
-        /* 8bit */
-        mbw = USB_FUNCTION_BITMBW_8;
-    }
-    else if (size == 1)
-    {
-        /* 16bit */
-        mbw = USB_FUNCTION_BITMBW_16;
-    }
-    else
-    {
-        /* 32bit */
-        mbw = USB_FUNCTION_BITMBW_32;
-    }
-
-    return mbw;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_transaction_counter
-* Description  : Sets transaction counter by the argument(PIPEnTRN).
-*              : Clears transaction before setting to enable transaction counter setting.
-* Arguments    : uint16_t pipe     ; Pipe number
-*              : uint32_t bsize    : Data transfer size
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_set_transaction_counter (uint16_t pipe, uint32_t bsize)
-{
-    uint16_t mxps;
-    uint16_t cnt;
-
-    if (bsize  == 0)
-    {
-        return;
-    }
-
-    mxps = usb1_function_get_mxps(pipe);            /* Max Packet Size */
-
-    if ((bsize % mxps) == 0)
-    {
-        cnt = (uint16_t)(bsize / mxps);
-    }
-    else
-    {
-        cnt = (uint16_t)((bsize / mxps) + 1);
-    }
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB201.PIPE1TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPE1TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPE1TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB201.PIPE2TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPE2TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPE2TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB201.PIPE3TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPE3TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPE3TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB201.PIPE4TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPE4TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPE4TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB201.PIPE5TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPE5TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPE5TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB201.PIPE9TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPE9TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPE9TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB201.PIPEATRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPEATRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPEATRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB201.PIPEBTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPEBTRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPEBTRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB201.PIPECTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPECTRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPECTRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB201.PIPEDTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPEDTRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPEDTRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB201.PIPEETRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPEETRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPEETRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB201.PIPEFTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPEFTRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPEFTRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_clear_transaction_counter
-* Description  : Clears the transaction counter by the argument.
-*              : After executing this function, the transaction counter is invalid.
-* Arguments    : uint16_t pipe     ; Pipe number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_clear_transaction_counter (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB201.PIPE1TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPE1TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB201.PIPE2TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPE2TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB201.PIPE3TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPE3TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB201.PIPE4TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPE4TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB201.PIPE5TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPE5TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB201.PIPE9TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPE9TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB201.PIPEATRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPEATRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB201.PIPEBTRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPEBTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB201.PIPECTRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPECTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB201.PIPEDTRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPEDTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB201.PIPEETRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPEETRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB201.PIPEFTRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPEFTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_stop_transfer
-* Description  : Stops the USB transfer in the pipe specified by the argument.
-*              : After stopping the USB transfer, clears the buffer allocated in
-*              : the pipe.
-*              : After executing this function, allocation in FIF0 becomes USB_FUNCTION_PIPE0;
-*              : invalid. After executing this function, BRDY/NRDY/BEMP interrupt
-*              : in the corresponding pipe becomes invalid. Sequence bit is also
-*              : cleared.
-* Arguments    : uint16_t  pipe     ; Pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_stop_transfer (uint16_t pipe)
-{
-    uint16_t usefifo;
-    uint32_t remain;
-    uint16_t fifo;
-
-    usb1_function_set_pid_nak(pipe);
-
-    usefifo = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-    switch (usefifo)
-    {
-        case USB_FUNCTION_D0FIFO_USE:
-            usb1_function_clear_transaction_counter(pipe);
-            USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
-            fifo = USB_FUNCTION_D0USE;
-        break;
-
-        case USB_FUNCTION_D1FIFO_USE:
-            usb1_function_clear_transaction_counter(pipe);
-            USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
-            fifo = USB_FUNCTION_D1USE;
-        break;
-
-        case USB_FUNCTION_D0FIFO_DMA:
-            remain = Userdef_USB_usb1_function_stop_dma0();
-            usb1_function_dma_stop_d0(pipe, remain);
-            usb1_function_clear_transaction_counter(pipe);
-            USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
-            fifo = USB_FUNCTION_D0DMA;
-        break;
-
-        case USB_FUNCTION_D1FIFO_DMA:
-            remain = Userdef_USB_usb1_function_stop_dma1();
-            usb1_function_dma_stop_d1(pipe, remain);
-            usb1_function_clear_transaction_counter(pipe);
-            USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
-            fifo = USB_FUNCTION_D1DMA;
-        break;
-
-        default:
-            usb1_function_clear_transaction_counter(pipe);
-            USB201.CFIFOCTR =  USB_FUNCTION_BITBCLR;        /* Buffer Clear */
-            fifo = USB_FUNCTION_CUSE;
-        break;
-    }
-
-    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, fifo, DEVDRV_USBF_NO, USB_FUNCTION_BITMBW_16);
-
-    /* Interrupt of pipe set is disabled */
-    usb1_function_disable_brdy_int(pipe);
-    usb1_function_disable_nrdy_int(pipe);
-    usb1_function_disable_bemp_int(pipe);
-
-    usb1_function_aclrm(pipe);
-    usb1_function_set_csclr(pipe);
-
-    if ( g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT )
-    {
-        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_dfacc_d0
-* Description  : Sets the DFACC setting value in D0FIFO using the transfer size.
-* Arguments    : uint16_t mbw     ; MBW
-*              : uint16_t count   ; data count
-* Return Value : DFACC Access mode
-*******************************************************************************/
-static uint16_t usb1_function_set_dfacc_d0 (uint16_t mbw, uint32_t count)
-{
-    uint16_t dfacc = 0;
-
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-    RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                        0,
-                        USB_DnFBCFG_DFACC_SHIFT,
-                        USB_DnFBCFG_DFACC);
-    RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                        0,
-                        USB_DnFBCFG_TENDE_SHIFT,
-                        USB_DnFBCFG_TENDE);
-    dfacc = 0;
-#else
-    if (mbw == USB_FUNCTION_BITMBW_32)
-    {
-        if ((count % 32) == 0)
-        {
-            /* 32byte transfer */
-            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                                2,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 2;
-        }
-        else if ((count % 16) == 0)
-        {
-            /* 16byte transfer */
-            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                                1,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 1;
-        }
-        else
-        {
-            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                                0,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 0;
-        }
-    }
-    else if (mbw == USB_FUNCTION_BITMBW_16)
-    {
-        RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                            0,
-                            USB_DnFBCFG_DFACC_SHIFT,
-                            USB_DnFBCFG_DFACC);
-        RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                            0,
-                            USB_DnFBCFG_TENDE_SHIFT,
-                            USB_DnFBCFG_TENDE);
-        dfacc = 0;
-    }
-    else
-    {
-        RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                            0,
-                            USB_DnFBCFG_DFACC_SHIFT,
-                            USB_DnFBCFG_DFACC);
-        RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                            0,
-                            USB_DnFBCFG_TENDE_SHIFT,
-                            USB_DnFBCFG_TENDE);
-        dfacc = 0;
-    }
-#endif
-    return dfacc;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_dfacc_d1
-* Description  : Set the DFACC setting value in D1FIFO using the transfer size.
-* Arguments    : uint16_t mbw     ; MBW
-*              : uint16_t count   ; data count
-* Return Value : DFACC Access mode
-*******************************************************************************/
-static uint16_t usb1_function_set_dfacc_d1 (uint16_t mbw, uint32_t count)
-{
-    uint16_t dfacc = 0;
-
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-    RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                        0,
-                        USB_DnFBCFG_DFACC_SHIFT,
-                        USB_DnFBCFG_DFACC);
-    RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                        0,
-                        USB_DnFBCFG_TENDE_SHIFT,
-                        USB_DnFBCFG_TENDE);
-    dfacc = 0;
-#else
-    if (mbw == USB_FUNCTION_BITMBW_32)
-    {
-        if ((count % 32) == 0)
-        {
-            /* 32byte transfer */
-            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                                2,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 2;
-        }
-        else if ((count % 16) == 0)
-        {
-            /* 16byte transfer */
-            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                                1,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 1;
-        }
-        else
-        {
-            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                                0,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 0;
-        }
-    }
-    else if (mbw == USB_FUNCTION_BITMBW_16)
-    {
-        RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                            0,
-                            USB_DnFBCFG_DFACC_SHIFT,
-                            USB_DnFBCFG_DFACC);
-        RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                            0,
-                            USB_DnFBCFG_TENDE_SHIFT,
-                            USB_DnFBCFG_TENDE);
-        dfacc = 0;
-    }
-    else
-    {
-        RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                            0,
-                            USB_DnFBCFG_DFACC_SHIFT,
-                            USB_DnFBCFG_DFACC);
-        RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                            0,
-                            USB_DnFBCFG_TENDE_SHIFT,
-                            USB_DnFBCFG_TENDE);
-        dfacc = 0;
-    }
-#endif
-
-    return dfacc;
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_dma.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_dma.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,346 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_dma.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb1_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-static void usb1_function_dmaint(uint16_t fifo);
-static void usb1_function_dmaint_buf2fifo(uint16_t pipe);
-static void usb1_function_dmaint_fifo2buf(uint16_t pipe);
-
-
-/*******************************************************************************
-* Function Name: usb1_function_dma_stop_d0
-* Description  : D0FIFO DMA stop
-* Arguments    : uint16_t pipe      : pipe number
-*              : uint32_t remain    : transfer byte
-* Return Value : none
-*******************************************************************************/
-void usb1_function_dma_stop_d0 (uint16_t pipe, uint32_t remain)
-{
-    uint16_t dtln;
-    uint16_t dfacc;
-    uint16_t buffer;
-    uint16_t sds_b = 1;
-
-    dfacc = RZA_IO_RegRead_16(&USB201.D0FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
-
-    if (dfacc == 2)
-    {
-        sds_b = 32;
-    }
-    else if (dfacc == 1)
-    {
-        sds_b = 16;
-    }
-    else
-    {
-        if (g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 2)
-        {
-            sds_b = 4;
-        }
-        else if (g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 1)
-        {
-            sds_b = 2;
-        }
-        else
-        {
-            sds_b = 1;
-        }
-    }
-
-    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
-        {
-            buffer = USB201.D0FIFOCTR;
-            dtln   = (buffer & USB_FUNCTION_BITDTLN);
-
-            if ((dtln % sds_b) != 0)
-            {
-                remain += (sds_b - (dtln % sds_b));
-            }
-            g_usb1_function_PipeDataSize[pipe] = (g_usb1_function_data_count[pipe] - remain);
-            g_usb1_function_data_count[pipe]   = remain;
-        }
-    }
-
-    RZA_IO_RegWrite_16(&USB201.D0FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_dma_stop_d1
-* Description  : D1FIFO DMA stop
-* Arguments    : uint16_t pipe      : pipe number
-*              : uint32_t remain    : transfer byte
-* Return Value : none
-*******************************************************************************/
-void usb1_function_dma_stop_d1 (uint16_t pipe, uint32_t remain)
-{
-    uint16_t dtln;
-    uint16_t dfacc;
-    uint16_t buffer;
-    uint16_t sds_b = 1;
-
-    dfacc = RZA_IO_RegRead_16(&USB201.D1FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
-
-    if (dfacc == 2)
-    {
-        sds_b = 32;
-    }
-    else if (dfacc == 1)
-    {
-        sds_b = 16;
-    }
-    else
-    {
-        if (g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 2)
-        {
-            sds_b = 4;
-        }
-        else if (g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 1)
-        {
-            sds_b = 2;
-        }
-        else
-        {
-            sds_b = 1;
-        }
-    }
-
-    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
-        {
-            buffer = USB201.D1FIFOCTR;
-            dtln   = (buffer & USB_FUNCTION_BITDTLN);
-
-            if ((dtln % sds_b) != 0)
-            {
-                remain += (sds_b - (dtln % sds_b));
-            }
-            g_usb1_function_PipeDataSize[pipe] = (g_usb1_function_data_count[pipe] - remain);
-            g_usb1_function_data_count[pipe]   = remain;
-        }
-    }
-
-    RZA_IO_RegWrite_16(&USB201.D1FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_dma_interrupt_d0fifo
-* Description  : This function is DMA interrupt handler entry.
-*              : Execute usb1_function_dmaint() after disabling DMA interrupt in this function.
-*              : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D0FIFO_DMA is
-*              : specified by dma->fifo.
-*              : Register this function as DMA complete interrupt.
-* Arguments    : uint32_t int_sense ; Interrupts detection mode
-*              :                    ;  INTC_LEVEL_SENSITIVE : Level sense
-*              :                    ;  INTC_EDGE_TRIGGER : Edge trigger
-* Return Value : none
-*******************************************************************************/
-void usb1_function_dma_interrupt_d0fifo (uint32_t int_sense)
-{
-    usb1_function_dmaint(USB_FUNCTION_D0FIFO);
-    g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_dma_interrupt_d1fifo
-* Description  : This function is DMA interrupt handler entry.
-*              : Execute usb1_function_dmaint() after disabling DMA interrupt in this function.
-*              : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D1FIFO_DMA is
-*              : specified by dma->fifo.
-*              : Register this function as DMA complete interrupt.
-* Arguments    : uint32_t int_sense ; Interrupts detection mode
-*              :                    ;  INTC_LEVEL_SENSITIVE : Level sense
-*              :                    ;  INTC_EDGE_TRIGGER : Edge trigger
-* Return Value : none
-*******************************************************************************/
-void usb1_function_dma_interrupt_d1fifo (uint32_t int_sense)
-{
-    usb1_function_dmaint(USB_FUNCTION_D1FIFO);
-    g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_dmaint
-* Description  : This function is DMA transfer end interrupt
-* Arguments    : uint16_t fifo  ; fifo number
-*              :                ;  USB_FUNCTION_D0FIFO
-*              :                ;  USB_FUNCTION_D1FIFO
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_dmaint (uint16_t fifo)
-{
-    uint16_t pipe;
-
-    pipe = g_usb1_function_DmaPipe[fifo];
-
-    if (g_usb1_function_DmaInfo[fifo].dir == USB_FUNCTION_BUF2FIFO)
-    {
-        usb1_function_dmaint_buf2fifo(pipe);
-    }
-    else
-    {
-        usb1_function_dmaint_fifo2buf(pipe);
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_dmaint_fifo2buf
-* Description  : Executes read completion from FIFO by DMAC.
-* Arguments    : uint16_t pipe      : pipe number
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_dmaint_fifo2buf (uint16_t pipe)
-{
-    uint32_t remain;
-    uint16_t useport;
-
-    if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
-    {
-        useport = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
-        if (useport == USB_FUNCTION_D0FIFO_DMA)
-        {
-            remain = Userdef_USB_usb1_function_stop_dma0();
-            usb1_function_dma_stop_d0(pipe, remain);
-
-            if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-            {
-                if (g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] == USB_FUNCTION_DMA_BUSYEND)
-                {
-                    USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;
-                    g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                }
-                else
-                {
-                    usb1_function_enable_brdy_int(pipe);
-                }
-            }
-        }
-        else
-        {
-            remain = Userdef_USB_usb1_function_stop_dma1();
-            usb1_function_dma_stop_d1(pipe, remain);
-
-            if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-            {
-                if (g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] == USB_FUNCTION_DMA_BUSYEND)
-                {
-                    USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;
-                    g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                }
-                else
-                {
-                    usb1_function_enable_brdy_int(pipe);
-                }
-            }
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_dmaint_buf2fifo
-* Description  : Executes write completion in FIFO by DMAC.
-* Arguments    : uint16_t pipe      : pipe number
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_dmaint_buf2fifo (uint16_t pipe)
-{
-    uint32_t remain;
-    uint16_t useport;
-
-    useport = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
-    if (useport == USB_FUNCTION_D0FIFO_DMA)
-    {
-        remain = Userdef_USB_usb1_function_stop_dma0();
-        usb1_function_dma_stop_d0(pipe, remain);
-
-        if (g_usb1_function_DmaBval[USB_FUNCTION_D0FIFO] != 0)
-        {
-            RZA_IO_RegWrite_16(&USB201.D0FIFOCTR,
-                                1,
-                                USB_DnFIFOCTR_BVAL_SHIFT,
-                                USB_DnFIFOCTR_BVAL);
-        }
-    }
-    else
-    {
-        remain = Userdef_USB_usb1_function_stop_dma1();
-        usb1_function_dma_stop_d1(pipe, remain);
-
-        if (g_usb1_function_DmaBval[USB_FUNCTION_D1FIFO] != 0)
-        {
-            RZA_IO_RegWrite_16(&USB201.D1FIFOCTR,
-                                1,
-                                USB_DnFIFOCTR_BVAL_SHIFT,
-                                USB_DnFIFOCTR_BVAL);
-        }
-    }
-
-    usb1_function_enable_bemp_int(pipe);
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_intrn.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_intrn.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,249 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_intrn.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb1_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb1_function_brdy_int
-* Description  : Executes BRDY interrupt(USB_FUNCTION_PIPE1-9).
-*              : According to the pipe that interrupt is generated in,
-*              : reads/writes buffer allocated in the pipe.
-*              : This function is executed in the BRDY interrupt handler.
-*              : This function clears BRDY interrupt status and BEMP interrupt
-*              : status.
-* Arguments    : uint16_t Status       ; BRDYSTS Register Value
-*              : uint16_t Int_enbl     ; BRDYENB Register Value
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb1_function_brdy_int (uint16_t status, uint16_t int_enb)
-{
-    uint32_t int_sense = 0;
-    uint16_t pipe;
-    uint16_t pipebit;
-
-    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
-    {
-        pipebit = g_usb1_function_bit_set[pipe];
-
-        if ((status & pipebit) && (int_enb & pipebit))
-        {
-            USB201.BRDYSTS = (uint16_t)~pipebit;
-            USB201.BEMPSTS = (uint16_t)~pipebit;
-            if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
-            {
-                if (g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] != USB_FUNCTION_DMA_READY)
-                {
-                    usb1_function_dma_interrupt_d0fifo(int_sense);
-                }
-
-                if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-                {
-                    usb1_function_read_dma(pipe);
-                    usb1_function_disable_brdy_int(pipe);
-                }
-                else
-                {
-                    USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;
-                    g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                }
-            }
-            else if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA)
-            {
-                if (g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] != USB_FUNCTION_DMA_READY)
-                {
-                    usb1_function_dma_interrupt_d1fifo(int_sense);
-                }
-
-                if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-                {
-                    usb1_function_read_dma(pipe);
-                    usb1_function_disable_brdy_int(pipe);
-                }
-                else
-                {
-                    USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;
-                    g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                }
-            }
-            else
-            {
-                if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0)
-                {
-                    usb1_function_read_buffer(pipe);
-                }
-                else
-                {
-                    usb1_function_write_buffer(pipe);
-                }
-            }
-        }
-    }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_nrdy_int
-* Description  : Executes NRDY interrupt(USB_FUNCTION_PIPE1-9).
-*              : Checks NRDY interrupt cause by PID. When the cause if STALL,
-*              : regards the pipe state as STALL and ends the processing.
-*              : Then the cause is not STALL, increments the error count to
-*              : communicate again. When the error count is 3, determines
-*              : the pipe state as DEVDRV_USBF_PIPE_NORES and ends the processing.
-*              : This function is executed in the NRDY interrupt handler.
-*              : This function clears NRDY interrupt status.
-* Arguments    : uint16_t status       ; NRDYSTS Register Value
-*              : uint16_t int_enb      ; NRDYENB Register Value
-* Return Value : none
-*******************************************************************************/
-void usb1_function_nrdy_int (uint16_t status, uint16_t int_enb)
-{
-    uint16_t pid;
-    uint16_t pipe;
-    uint16_t bitcheck;
-
-    bitcheck = (uint16_t)(status & int_enb);
-
-    USB201.NRDYSTS = (uint16_t)~status;
-
-    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
-    {
-        if ((bitcheck&g_usb1_function_bit_set[pipe]) == g_usb1_function_bit_set[pipe])
-        {
-            if (RZA_IO_RegRead_16(&USB201.SYSCFG0, USB_SYSCFG_DCFM_SHIFT, USB_SYSCFG_DCFM) == 1)
-            {
-                if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT)
-                {
-                    pid = usb1_function_get_pid(pipe);
-                    if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
-                    {
-                        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
-                    }
-                    else
-                    {
-                        g_usb1_function_PipeIgnore[pipe]++;
-                        if (g_usb1_function_PipeIgnore[pipe] == 3)
-                        {
-                            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
-                        }
-                        else
-                        {
-                            usb1_function_set_pid_buf(pipe);
-                        }
-                    }
-                }
-            }
-            else
-            {
-                /* USB Function */
-            }
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_bemp_int
-* Description  : Executes BEMP interrupt(USB_FUNCTION_PIPE1-9).
-* Arguments    : uint16_t status       ; BEMPSTS Register Value
-*              : uint16_t int_enb      ; BEMPENB Register Value
-* Return Value : none
-*******************************************************************************/
-void usb1_function_bemp_int (uint16_t status, uint16_t int_enb)
-{
-    uint16_t pid;
-    uint16_t pipe;
-    uint16_t bitcheck;
-    uint16_t inbuf;
-
-    bitcheck = (uint16_t)(status & int_enb);
-
-    USB201.BEMPSTS = (uint16_t)~status;
-
-    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
-    {
-        if ((bitcheck&g_usb1_function_bit_set[pipe]) == g_usb1_function_bit_set[pipe])
-        {
-            pid = usb1_function_get_pid(pipe);
-
-            if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
-            {
-                g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
-            }
-            else
-            {
-                inbuf = usb1_function_get_inbuf(pipe);
-
-                if (inbuf == 0)
-                {
-                    usb1_function_disable_bemp_int(pipe);
-                    usb1_function_set_pid_nak(pipe);
-                    g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                }
-            }
-        }
-    }
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_lib.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_lib.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2044 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_lib.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb1_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb1_function_enable_brdy_int
-* Description  : Enables BRDY interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
-*              : BRDY. Enables BRDY interrupt in the pipe specified by the argument
-*              : in the disabled status. After enabling BRDY, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe           ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_enable_brdy_int (uint16_t pipe)
-{
-    /* enable brdy interrupt */
-    USB201.BRDYENB |= (uint16_t)g_usb1_function_bit_set[pipe];
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_disable_brdy_int
-* Description  : Disables BRDY interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
-*              : BRDY. Enables BRDY interrupt in the pipe specified by the argument
-*              : in the disabled status. After disabling BRDY, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_disable_brdy_int (uint16_t pipe)
-{
-    /* disable brdy interrupt */
-    USB201.BRDYENB &= (uint16_t)~(g_usb1_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_clear_brdy_sts
-* Description  : Clear BRDY interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_clear_brdy_sts (uint16_t pipe)
-{
-    /* clear brdy status */
-    USB201.BRDYSTS = (uint16_t)~(g_usb1_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_enable_bemp_int
-* Description  : Enables BEMP interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
-*              : BEMP. Enables BEMP interrupt in the pipe specified by the argument
-*              : in the disabled status. After enabling BEMP, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe           ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_enable_bemp_int (uint16_t pipe)
-{
-    /* enable bemp interrupt */
-    USB201.BEMPENB |= (uint16_t)g_usb1_function_bit_set[pipe];
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_disable_bemp_int
-* Description  : Disables BEMP interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
-*              : BEMP. Enables BEMP interrupt in the pipe specified by the argument
-*              : in the disabled status. After enabling BEMP, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe           ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_disable_bemp_int (uint16_t pipe)
-{
-    /* disable bemp interrupt */
-    USB201.BEMPENB &= (uint16_t)~(g_usb1_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_clear_bemp_sts
-* Description  : Clear BEMP interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_clear_bemp_sts (uint16_t pipe)
-{
-    /* clear bemp status */
-    USB201.BEMPSTS = (uint16_t)~(g_usb1_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_enable_nrdy_int
-* Description  : Enables NRDY interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
-*              : NRDY. Enables NRDY interrupt in the pipe specified by the argument
-*              : in the disabled status. After enabling NRDY, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe             ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_enable_nrdy_int (uint16_t pipe)
-{
-    /* enable nrdy interrupt */
-    USB201.NRDYENB |= (uint16_t)g_usb1_function_bit_set[pipe];
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_disable_nrdy_int
-* Description  : Disables NRDY interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
-*              : NRDY. Disables NRDY interrupt in the pipe specified by the argument
-*              : in the disabled status. After disabling NRDY, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_disable_nrdy_int (uint16_t pipe)
-{
-    /* disable nrdy interrupt */
-    USB201.NRDYENB &= (uint16_t)~(g_usb1_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_clear_nrdy_sts
-* Description  : Clear NRDY interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_clear_nrdy_sts (uint16_t pipe)
-{
-    /* clear nrdy status */
-    USB201.NRDYSTS = (uint16_t)~(g_usb1_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_is_hispeed
-* Description  : Returns the result of USB reset hand shake (RHST) as
-*              : return value.
-* Arguments    : none
-* Return Value : USB_FUNCTION_HIGH_SPEED    ; Hi-Speed
-*              : USB_FUNCTION_FULL_SPEED    ; Full-Speed
-*              : LOW_SPEED                  ; Low-Speed
-*              : USB_FUNCTION_NON_SPEED     ; error
-*******************************************************************************/
-uint16_t usb1_function_is_hispeed (void)
-{
-    uint16_t rhst;
-    uint16_t speed;
-
-    rhst = RZA_IO_RegRead_16(&USB201.DVSTCTR0, USB_DVSTCTR0_RHST_SHIFT, USB_DVSTCTR0_RHST);
-
-    if (rhst == USB_FUNCTION_HSMODE)
-    {
-        speed = USB_FUNCTION_HIGH_SPEED;
-    }
-    else if (rhst == USB_FUNCTION_FSMODE)
-    {
-        speed = USB_FUNCTION_FULL_SPEED;
-    }
-    else if (rhst == USB_FUNCTION_LSMODE)
-    {
-        speed = USB_FUNCTION_LOW_SPEED;
-    }
-    else
-    {
-        speed = USB_FUNCTION_NON_SPEED;
-    }
-
-    return speed;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_is_hispeed_enable
-* Description  : Returns the USB High-Speed connection enabled status as
-*              : return value.
-* Arguments    : none
-* Return Value : DEVDRV_USBF_YES  : Hi-Speed Enable
-*              : DEVDRV_USBF_NO   : Hi-Speed Disable
-*******************************************************************************/
-uint16_t usb1_function_is_hispeed_enable (void)
-{
-    uint16_t ret;
-
-    ret = DEVDRV_USBF_NO;
-
-    if (RZA_IO_RegRead_16(&USB201.SYSCFG0, USB_SYSCFG_HSE_SHIFT, USB_SYSCFG_HSE) == 1)
-    {
-        ret = DEVDRV_USBF_YES;
-    }
-
-    return ret;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_pid_buf
-* Description  : Enables communicaqtion in the pipe specified by the argument
-*              : (BUF).
-* Arguments    : uint16_t pipe             ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_set_pid_buf (uint16_t pipe)
-{
-    uint16_t pid;
-
-    pid = usb1_function_get_pid(pipe);
-
-    if (pid == DEVDRV_USBF_PID_STALL2)
-    {
-        usb1_function_set_pid_nak(pipe);
-    }
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            RZA_IO_RegWrite_16(&USB201.DCPCTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_DCPCTR_PID_SHIFT,
-                                USB_DCPCTR_PID);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_9_PID_SHIFT,
-                                USB_PIPEnCTR_9_PID);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_pid_nak
-* Description  : Disables communication (NAK) in the pipe specified by the argument.
-*              : When the pipe status was enabling communication (BUF) before
-*              : executing before executing this function, waits in the software
-*              : until the pipe becomes ready after setting disabled.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_set_pid_nak (uint16_t pipe)
-{
-    uint16_t pid;
-    uint16_t pbusy;
-    uint32_t loop;
-
-    pid = usb1_function_get_pid(pipe);
-
-    if (pid == DEVDRV_USBF_PID_STALL2)
-    {
-        usb1_function_set_pid_stall(pipe);
-    }
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            RZA_IO_RegWrite_16(&USB201.DCPCTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_DCPCTR_PID_SHIFT,
-                                USB_DCPCTR_PID);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_9_PID_SHIFT,
-                                USB_PIPEnCTR_9_PID);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        default:
-        break;
-    }
-
-    if (pid == DEVDRV_USBF_PID_BUF)
-    {
-        for (loop = 0; loop < 200; loop++)
-        {
-            switch (pipe)
-            {
-                case USB_FUNCTION_PIPE0:
-                    pbusy = RZA_IO_RegRead_16(&USB201.DCPCTR,
-                                                USB_DCPCTR_PBUSY_SHIFT,
-                                                USB_DCPCTR_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE1:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
-                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_1_5_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE2:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
-                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_1_5_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE3:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
-                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_1_5_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE4:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
-                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_1_5_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE5:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
-                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_1_5_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE6:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE6CTR,
-                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_6_8_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE7:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE7CTR,
-                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_6_8_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE8:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE8CTR,
-                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_6_8_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE9:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
-                                                USB_PIPEnCTR_9_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_9_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPEA:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPEACTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPEB:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPEBCTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPEC:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPECCTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPED:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPEDCTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPEE:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPEECTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPEF:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPEFCTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                default:
-                    pbusy   = 1;
-                break;
-            }
-
-            if (pbusy == 0)
-            {
-                break;
-            }
-            Userdef_USB_usb1_function_delay_500ns();
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_pid_stall
-* Description  : Disables communication (STALL) in the pipe specified by the
-*              : argument.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_set_pid_stall (uint16_t pipe)
-{
-    uint16_t pid;
-
-    pid = usb1_function_get_pid(pipe);
-    if (pid == DEVDRV_USBF_PID_BUF)
-    {
-        switch (pipe)
-        {
-            case USB_FUNCTION_PIPE0:
-                RZA_IO_RegWrite_16(&USB201.DCPCTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_DCPCTR_PID_SHIFT,
-                                    USB_DCPCTR_PID);
-            break;
-
-            case USB_FUNCTION_PIPE1:
-                RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE2:
-                RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE3:
-                RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE4:
-                RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE5:
-                RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE6:
-                RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE7:
-                RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE8:
-                RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE9:
-                RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_9_PID_SHIFT,
-                                    USB_PIPEnCTR_9_PID);
-            break;
-
-            case USB_FUNCTION_PIPEA:
-                RZA_IO_RegWrite_16(&USB201.PIPEACTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEB:
-                RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEC:
-                RZA_IO_RegWrite_16(&USB201.PIPECCTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPED:
-                RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEE:
-                RZA_IO_RegWrite_16(&USB201.PIPEECTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEF:
-                RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            default:
-            break;
-        }
-    }
-    else
-    {
-        switch (pipe)
-        {
-            case USB_FUNCTION_PIPE0:
-                RZA_IO_RegWrite_16(&USB201.DCPCTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_DCPCTR_PID_SHIFT,
-                                    USB_DCPCTR_PID);
-            break;
-
-            case USB_FUNCTION_PIPE1:
-                RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE2:
-                RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE3:
-                RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE4:
-                RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE5:
-                RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE6:
-                RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE7:
-                RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE8:
-                RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE9:
-                RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_9_PID_SHIFT,
-                                    USB_PIPEnCTR_9_PID);
-            break;
-
-            case USB_FUNCTION_PIPEA:
-                RZA_IO_RegWrite_16(&USB201.PIPEACTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEB:
-                RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEC:
-                RZA_IO_RegWrite_16(&USB201.PIPECCTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPED:
-                RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEE:
-                RZA_IO_RegWrite_16(&USB201.PIPEECTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEF:
-                RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            default:
-            break;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_clear_pid_stall
-* Description  : Disables communication (NAK) in the pipe specified by the argument.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_clear_pid_stall (uint16_t pipe)
-{
-    usb1_function_set_pid_nak(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_get_pid
-* Description  : Returns the pipe state specified by the argument.
-* Arguments    : uint16_t pipe          ; Pipe Number
-* Return Value : PID
-*******************************************************************************/
-uint16_t usb1_function_get_pid (uint16_t pipe)
-{
-    uint16_t pid;
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            pid = RZA_IO_RegRead_16(&USB201.DCPCTR,
-                                    USB_DCPCTR_PID_SHIFT,
-                                    USB_DCPCTR_PID);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            pid = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            pid = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            pid = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            pid = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            pid = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            pid = RZA_IO_RegRead_16(&USB201.PIPE6CTR,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            pid = RZA_IO_RegRead_16(&USB201.PIPE7CTR,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            pid = RZA_IO_RegRead_16(&USB201.PIPE8CTR,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            pid = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
-                                    USB_PIPEnCTR_9_PID_SHIFT,
-                                    USB_PIPEnCTR_9_PID);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            pid = RZA_IO_RegRead_16(&USB201.PIPEACTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            pid = RZA_IO_RegRead_16(&USB201.PIPEBCTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            pid = RZA_IO_RegRead_16(&USB201.PIPECCTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            pid = RZA_IO_RegRead_16(&USB201.PIPEDCTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            pid = RZA_IO_RegRead_16(&USB201.PIPEECTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            pid = RZA_IO_RegRead_16(&USB201.PIPEFCTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        default:
-            pid = 0;
-        break;
-    }
-
-    return pid;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_csclr
-* Description  : CSPLIT status clear setting of sprit transaction in specified
-*              : pipe is performed.
-*              : When SQSET bit or SQCLR bit, and SQSET bit or SQCLR bit
-*              : in DCPCTR register are continuously changed (when the sequence
-*              : toggle bit of data PID is continuously changed over two or more pipes),
-*              : the access cycle with 120 ns and more than 5 cycle bus clock is necessary.
-*              : Do not set both SQCLR bit and SQSET bit to 1 at the same time.
-*              : In addition, both bits should be operated after PID is set to NAK.
-*              : However, when it is set to the isochronous transfer as the transfer type
-*              : (TYPE=11), writing in SQSET bit is disabled.
-* Arguments    : uint16_t pipe     ; Pipe number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_set_csclr (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            RZA_IO_RegWrite_16(&USB201.DCPCTR,
-                                1,
-                                USB_DCPCTR_CSCLR_SHIFT,
-                                USB_DCPCTR_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
-                                1,
-                                USB_PIPEnCTR_9_CSCLR_SHIFT,
-                                USB_PIPEnCTR_9_CSCLR);
-        break;
-
-        default:
-            /* PIPEA-F have not CSCLR */
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_sqclr
-* Description  : Sets the sequence bit of the pipe specified by the argument to
-*              : DATA0.
-* Arguments    : uint16_t pipe              ; Pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_set_sqclr (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            RZA_IO_RegWrite_16(&USB201.DCPCTR,
-                                1,
-                                USB_DCPCTR_SQCLR_SHIFT,
-                                USB_DCPCTR_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
-                                1,
-                                USB_PIPEnCTR_9_SQCLR_SHIFT,
-                                USB_PIPEnCTR_9_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_sqset
-* Description  : Sets the sequence bit of the pipe specified by the argument to
-*              : DATA1.
-* Arguments    : uint16_t pipe   ; Pipe number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_set_sqset (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            RZA_IO_RegWrite_16(&USB201.DCPCTR,
-                                1,
-                                USB_DCPCTR_SQSET_SHIFT,
-                                USB_DCPCTR_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
-                                USB_PIPEnCTR_1_5_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
-                                USB_PIPEnCTR_1_5_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
-                                USB_PIPEnCTR_1_5_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
-                                USB_PIPEnCTR_1_5_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
-                                USB_PIPEnCTR_1_5_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
-                                USB_PIPEnCTR_6_8_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
-                                USB_PIPEnCTR_6_8_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
-                                USB_PIPEnCTR_6_8_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
-                                1,
-                                USB_PIPEnCTR_9_SQSET_SHIFT,
-                                USB_PIPEnCTR_9_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_get_sqmon
-* Description  : Toggle bit of specified pipe is obtained
-* Arguments    : uint16_t pipe   ; Pipe number
-* Return Value : sqmon
-*******************************************************************************/
-uint16_t usb1_function_get_sqmon (uint16_t pipe)
-{
-    uint16_t sqmon;
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            sqmon = RZA_IO_RegRead_16(&USB201.DCPCTR,
-                                        USB_DCPCTR_SQMON_SHIFT,
-                                        USB_DCPCTR_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
-                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
-                                        USB_PIPEnCTR_1_5_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
-                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
-                                        USB_PIPEnCTR_1_5_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
-                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
-                                        USB_PIPEnCTR_1_5_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
-                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
-                                        USB_PIPEnCTR_1_5_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
-                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
-                                        USB_PIPEnCTR_1_5_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPE6CTR,
-                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
-                                        USB_PIPEnCTR_6_8_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPE7CTR,
-                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
-                                        USB_PIPEnCTR_6_8_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPE8CTR,
-                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
-                                        USB_PIPEnCTR_6_8_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
-                                        USB_PIPEnCTR_9_SQMON_SHIFT,
-                                        USB_PIPEnCTR_9_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPEACTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPEBCTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPECCTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPEDCTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPEECTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPEFCTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        default:
-            sqmon = 0;
-        break;
-    }
-
-    return sqmon;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_aclrm
-* Description  : The buffer of specified pipe is initialized
-* Arguments    : uint16_t pipe    : Pipe
-* Return Value : none
-*******************************************************************************/
-void usb1_function_aclrm (uint16_t pipe)
-{
-    usb1_function_set_aclrm(pipe);
-    usb1_function_clr_aclrm(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_aclrm
-* Description  : The auto buffer clear mode of specified pipe is enabled
-* Arguments    : uint16_t pipe    : Pipe
-* Return Value : none
-*******************************************************************************/
-void usb1_function_set_aclrm (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
-                                1,
-                                USB_PIPEnCTR_9_ACLRM_SHIFT,
-                                USB_PIPEnCTR_9_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_clr_aclrm
-* Description  : The auto buffer clear mode of specified pipe is enabled
-* Arguments    : uint16_t pipe    : Pipe
-* Return Value : none
-*******************************************************************************/
-void usb1_function_clr_aclrm (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
-                                0,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
-                                0,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
-                                0,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
-                                0,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
-                                0,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
-                                0,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
-                                0,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
-                                0,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
-                                0,
-                                USB_PIPEnCTR_9_ACLRM_SHIFT,
-                                USB_PIPEnCTR_9_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_get_inbuf
-* Description  : Returns INBUFM of the pipe specified by the argument.
-* Arguments    : uint16_t pipe             ; Pipe Number
-* Return Value : inbuf
-*******************************************************************************/
-uint16_t usb1_function_get_inbuf (uint16_t pipe)
-{
-    uint16_t inbuf;
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            inbuf = 0;
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
-                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_1_5_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
-                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_1_5_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
-                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_1_5_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
-                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_1_5_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
-                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_1_5_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            inbuf = 0;
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            inbuf = 0;
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            inbuf = 0;
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
-                                    USB_PIPEnCTR_9_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_9_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPEACTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPEBCTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPECCTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPEDCTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPEECTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPEFCTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        default:
-            inbuf = 0;
-        break;
-    }
-
-    return inbuf;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_setting_interrupt
-* Description  : Sets the USB module interrupt level.
-* Arguments    : uint8_t level
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb1_function_setting_interrupt (uint8_t level)
-{
-    uint16_t d0fifo_dmaintid;
-    uint16_t d1fifo_dmaintid;
-
-    R_INTC_RegistIntFunc(INTC_ID_USBI1, usb1_function_interrupt);
-    R_INTC_SetPriority(INTC_ID_USBI1, level);
-    R_INTC_Enable(INTC_ID_USBI1);
-
-    d0fifo_dmaintid = Userdef_USB_usb1_function_d0fifo_dmaintid();
-
-    if (d0fifo_dmaintid != 0xFFFF)
-    {
-        R_INTC_RegistIntFunc(d0fifo_dmaintid, usb1_function_dma_interrupt_d0fifo);
-        R_INTC_SetPriority(d0fifo_dmaintid, level);
-        R_INTC_Enable(d0fifo_dmaintid);
-    }
-
-    d1fifo_dmaintid = Userdef_USB_usb1_function_d1fifo_dmaintid();
-
-    if (d1fifo_dmaintid != 0xFFFF)
-    {
-        R_INTC_RegistIntFunc(d1fifo_dmaintid, usb1_function_dma_interrupt_d1fifo);
-        R_INTC_SetPriority(d1fifo_dmaintid, level);
-        R_INTC_Enable(d1fifo_dmaintid);
-    }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_reset_module
-* Description  : Initializes the USB module.
-*              : Enables providing clock to the USB module.
-*              : Sets USB bus wait register.
-* Arguments    : uint16_t clockmode ; 48MHz ; USBFCLOCK_X1_48MHZ
-*              :                    ; 12MHz ; USBFCLOCK_EXTAL_12MHZ
-* Return Value : none
-*******************************************************************************/
-void usb1_function_reset_module (uint16_t clockmode)
-{
-    /* UPLLE bit is only USB0 */
-    if (RZA_IO_RegRead_16(&USB200.SYSCFG0,
-                                USB_SYSCFG_UPLLE_SHIFT,
-                                USB_SYSCFG_UPLLE) == 1)
-    {
-        if ((USB200.SYSCFG0 & USB_FUNCTION_BITUCKSEL) != clockmode)
-        {
-            RZA_IO_RegWrite_16(&USB201.SUSPMODE,
-                                0,
-                                USB_SUSPMODE_SUSPM_SHIFT,
-                                USB_SUSPMODE_SUSPM);
-            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
-                                0,
-                                USB_SUSPMODE_SUSPM_SHIFT,
-                                USB_SUSPMODE_SUSPM);
-            USB201.SYSCFG0 = 0;
-            USB200.SYSCFG0 = 0;
-            USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
-            Userdef_USB_usb1_function_delay_xms(1);
-            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
-                                1,
-                                USB_SUSPMODE_SUSPM_SHIFT,
-                                USB_SUSPMODE_SUSPM);
-            RZA_IO_RegWrite_16(&USB201.SUSPMODE,
-                                1,
-                                USB_SUSPMODE_SUSPM_SHIFT,
-                                USB_SUSPMODE_SUSPM);
-        }
-        else
-        {
-            RZA_IO_RegWrite_16(&USB201.SUSPMODE,
-                                0,
-                                USB_SUSPMODE_SUSPM_SHIFT,
-                                USB_SUSPMODE_SUSPM);
-            Userdef_USB_usb1_function_delay_xms(1);
-            RZA_IO_RegWrite_16(&USB201.SUSPMODE,
-                                1,
-                                USB_SUSPMODE_SUSPM_SHIFT,
-                                USB_SUSPMODE_SUSPM);
-        }
-    }
-    else
-    {
-        RZA_IO_RegWrite_16(&USB201.SUSPMODE,
-                            0,
-                            USB_SUSPMODE_SUSPM_SHIFT,
-                            USB_SUSPMODE_SUSPM);
-        RZA_IO_RegWrite_16(&USB200.SUSPMODE,
-                            0,
-                            USB_SUSPMODE_SUSPM_SHIFT,
-                            USB_SUSPMODE_SUSPM);
-        USB201.SYSCFG0 = 0;
-        USB200.SYSCFG0 = 0;
-        USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
-        Userdef_USB_usb1_function_delay_xms(1);
-        RZA_IO_RegWrite_16(&USB200.SUSPMODE,
-                            1,
-                            USB_SUSPMODE_SUSPM_SHIFT,
-                            USB_SUSPMODE_SUSPM);
-        RZA_IO_RegWrite_16(&USB201.SUSPMODE,
-                            1,
-                            USB_SUSPMODE_SUSPM_SHIFT,
-                            USB_SUSPMODE_SUSPM);
-    }
-
-    USB201.BUSWAIT = (uint16_t)(USB_FUNCTION_BUSWAIT_05 & USB_FUNCTION_BITBWAIT);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_get_buf_size
-* Description  : Obtains pipe buffer size specified by the argument and
-*              : maximum packet size of the USB device in use.
-*              : When USB_FUNCTION_PIPE0 is specified by the argument, obtains the maximum
-*              : packet size of the USB device using the corresponding pipe.
-*              : For the case that USB_FUNCTION_PIPE0 is not assigned by the argument, when the
-*              : corresponding pipe is in continuous transfer mode,
-*              : obtains the buffer size allocated in the corresponcing pipe,
-*              : when incontinuous transfer, obtains maximum packet size.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : Maximum packet size or buffer size
-*******************************************************************************/
-uint16_t usb1_function_get_buf_size (uint16_t pipe)
-{
-    uint16_t size;
-    uint16_t bufsize;
-
-    if (pipe == USB_FUNCTION_PIPE0)
-    {
-        size = RZA_IO_RegRead_16(&USB201.DCPMAXP,
-                                USB_DCPMAXP_MXPS_SHIFT,
-                                USB_DCPMAXP_MXPS);
-    }
-    else
-    {
-        if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_CNTMD_SHIFT, USB_PIPECFG_CNTMD) == 1)
-        {
-            bufsize = RZA_IO_RegRead_16(&g_usb1_function_pipebuf[pipe], USB_PIPEBUF_BUFSIZE_SHIFT, USB_PIPEBUF_BUFSIZE);
-            size = (uint16_t)((bufsize + 1) * USB_FUNCTION_PIPExBUF);
-        }
-        else
-        {
-            size = RZA_IO_RegRead_16(&g_usb1_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
-        }
-    }
-    return size;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_get_mxps
-* Description  : Obtains maximum packet size of the USB device using the pipe
-*              : specified by the argument.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : Max Packet Size
-*******************************************************************************/
-uint16_t usb1_function_get_mxps (uint16_t pipe)
-{
-    uint16_t size;
-
-    if (pipe == USB_FUNCTION_PIPE0)
-    {
-        size = RZA_IO_RegRead_16(&USB201.DCPMAXP,
-                                USB_DCPMAXP_MXPS_SHIFT,
-                                USB_DCPMAXP_MXPS);
-    }
-    else
-    {
-        size = RZA_IO_RegRead_16(&g_usb1_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
-    }
-    return size;
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_api.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_api.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,441 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_api.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb1_function.h"
-#include "dev_drv.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb1_api_function_init
-* Description  : Initializes the USB module in the USB function mode.
-* Arguments    : uint8_t  int_level ; interruput level
-*              : uint16_t mode      : Speed modes
-*              :                    :  USB_FUCNTION_HIGH_SPEED: High-speed device
-*              :                    :  USB_FUCNTION_FULL_SPEED: Full-speed device
-*              : uint16_t clockmode ; 48MHz ; USBFCLOCK_X1_48MHZ
-*              :                    ; 12MHz ; USBFCLOCK_EXTAL_12MHZ
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb1_api_function_init (uint8_t int_level, uint16_t mode, uint16_t clockmode)
-{
-    volatile uint8_t dummy_buf;
-
-    CPG.STBCR7  &= 0xfc;                        /*The clock of USB0/1 modules is permitted  */
-    dummy_buf   = CPG.STBCR7;                   /* (Dummy read)                             */
-
-    usb1_function_setting_interrupt(int_level);
-
-    usb1_function_reset_module(clockmode);      /* reset USB module with setting tranciever */
-                                                /* and HSE=1                                */
-
-    usb1_function_init_status();                /* clear variables                          */
-
-    usb1_function_InitModule(mode);             /* select USB Function and Interrupt Enable */
-                                                /* Detect USB Device to attach or detach    */
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_api_function_IsConfigured
-* Description  : Checks if the USB device is configured to return the result as
-*              : the return value.
-* Arguments    : none
-* Return Value : DEVDRV_USBF_YES  : Configured & Configured Suspend
-*              : DEVDRV_USBF_NO   : not Configured
-*******************************************************************************/
-uint16_t usb1_api_function_IsConfigured (void)
-{
-    uint16_t dvst;
-
-    dvst = usb1_function_GetDeviceState();
-
-    if ((dvst == USB_FUNCTION_DVST_CONFIGURED) ||
-        (dvst == USB_FUNCTION_DVST_CONFIGURED_SUSPEND))
-    {
-        return DEVDRV_USBF_YES;
-    }
-
-    return DEVDRV_USBF_NO;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_GetDeviceState
-* Description  : Returns the state of USB device.
-* Arguments    : none
-* Return Value : Device States
-*******************************************************************************/
-uint16_t usb1_function_GetDeviceState (void)
-{
-    uint16_t dvsq;
-    uint16_t dvst;
-
-    dvsq = USB201.INTSTS0;
-    switch (dvsq & USB_FUNCTION_BITDVSQ)
-    {
-        case USB_FUNCTION_DS_POWR:                      /* Power state *//* power-on */
-            dvst = USB_FUNCTION_DVST_POWERED;
-        break;
-
-        case USB_FUNCTION_DS_DFLT:                      /* Default state *//* bus-reset */
-            dvst = USB_FUNCTION_DVST_DEFAULT;
-        break;
-
-        case USB_FUNCTION_DS_ADDS:                      /* Address state */
-            dvst = USB_FUNCTION_DVST_ADDRESS;
-        break;
-
-        case USB_FUNCTION_DS_CNFG:                      /* Configured state */
-            dvst = USB_FUNCTION_DVST_CONFIGURED;
-        break;
-
-        case USB_FUNCTION_DS_SPD_CNFG:                  /* Configured Suspend state */
-            dvst = USB_FUNCTION_DVST_CONFIGURED_SUSPEND;
-        break;
-
-        case USB_FUNCTION_DS_SPD_POWR:                  /* Power      Suspend state */
-        case USB_FUNCTION_DS_SPD_DFLT:                  /* Default    Suspend state */
-        case USB_FUNCTION_DS_SPD_ADDR:                  /* Address    Suspend state */
-            dvst = USB_FUNCTION_DVST_SUSPEND;
-        break;
-
-        default:                                        /* error */
-            dvst = USB_FUNCTION_DVST_SUSPEND;
-        break;
-    }
-
-    return dvst;
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_start_receive_transfer
-* Description  : Starts USB data reception using the pipe specified in the argument.
-*              : The FIFO for using is set in the pipe definition table.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data data Address
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    usb1_function_start_receive_transfer(pipe, size, data);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_start_send_transfer
-* Description  : Starts the USB data communication using pipe specified by the argument.
-* Arguments    : uint16_t pipe     ; Pipe Number
-*              : uint32_t size     ; Data Size
-*              : uint8_t *data     ; Data data Address
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb1_api_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t status;
-
-    status = usb1_function_start_send_transfer(pipe, size, data);
-
-    return status;
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_check_pipe_status
-* Description  : Starts USB data reception using the pipe specified in the argument.
-*              : The FIFO for using is set in the pipe definition table.
-* Arguments    : uint16_t  pipe     ; Pipe Number
-*              : uint32_t *size     ; Data Size
-* Return Value : Pipe Status
-*******************************************************************************/
-uint16_t usb1_api_function_check_pipe_status (uint16_t pipe, uint32_t * size)
-{
-    if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_DONE)
-    {
-        *size = g_usb1_function_PipeDataSize[pipe];
-        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
-
-        return DEVDRV_USBF_PIPE_DONE;
-    }
-    else if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_NORES)
-    {
-        *size = 0;
-        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
-
-        return DEVDRV_USBF_PIPE_NORES;
-    }
-    else if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_STALL)
-    {
-        *size = 0;
-        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
-
-        return DEVDRV_USBF_PIPE_STALL;
-    }
-    else if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_FIFOERROR)
-    {
-        *size = 0;
-        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
-
-        return DEVDRV_USBF_FIFOERROR;
-    }
-    else
-    {
-        /* Do Nothing */
-    }
-
-    return g_usb1_function_pipe_status[pipe];
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_clear_pipe_status
-* Description  : Starts USB data reception using the pipe specified in the argument.
-*              : The FIFO for using is set in the pipe definition table.
-* Arguments    : uint16_t  pipe     ; Pipe Number
-* Return Value : Pipe Status
-*******************************************************************************/
-void usb1_api_function_clear_pipe_status (uint16_t pipe)
-{
-    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
-    g_usb1_function_PipeDataSize[pipe] = 0;
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_set_pid_buf
-* Description  : Enables communicaqtion in the pipe specified by the argument
-*              : (BUF).
-* Arguments    : uint16_t pipe             ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_set_pid_buf (uint16_t pipe)
-{
-    usb1_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_set_pid_nak
-* Description  : Disables communication (NAK) in the pipe specified by the argument.
-*              : When the pipe status was enabling communication (BUF) before
-*              : executing before executing this function, waits in the software
-*              : until the pipe becomes ready after setting disabled.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_set_pid_nak (uint16_t pipe)
-{
-    usb1_function_set_pid_nak(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_set_pid_stall
-* Description  : Disables communication (STALL) in the pipe specified by the
-*              : argument.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_set_pid_stall (uint16_t pipe)
-{
-    usb1_function_set_pid_stall(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_clear_pid_stall
-* Description  : Disables communication (NAK) in the pipe specified by the argument.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_clear_pid_stall (uint16_t pipe)
-{
-    usb1_function_clear_pid_stall(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_get_pid
-* Description  : Returns the pipe state specified by the argument.
-* Arguments    : uint16_t pipe          ; Pipe Number
-* Return Value : PID
-*******************************************************************************/
-uint16_t usb1_api_function_get_pid (uint16_t pipe)
-{
-    uint16_t pid;
-
-    pid = usb1_function_get_pid(pipe);
-
-    return pid;
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_check_stall
-* Description  :
-* Arguments    : uint16_t pipe          ; Pipe Number
-* Return Value : PID
-*******************************************************************************/
-int32_t usb1_api_function_check_stall (uint16_t pipe)
-{
-    uint16_t pid;
-
-    pid = usb1_function_get_pid(pipe);
-
-    if ((pid & DEVDRV_USBF_PID_STALL) == DEVDRV_USBF_PID_STALL)
-    {
-        return DEVDRV_USBF_STALL;
-    }
-
-    return DEVDRV_SUCCESS;
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_set_sqclr
-* Description  : Sets the sequence bit of the pipe specified by the argument to
-*              : DATA0.
-* Arguments    : uint16_t pipe              ; Pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_set_sqclr (uint16_t pipe)
-{
-    usb1_function_set_sqclr(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_set_sqset
-* Description  : Sets the sequence bit of the pipe specified by the argument to
-*              : DATA1.
-* Arguments    : uint16_t pipe   ; Pipe number
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_set_sqset (uint16_t pipe)
-{
-    usb1_function_set_sqset(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_set_csclr
-* Description  : CSPLIT status clear setting of sprit transaction in specified
-*              : pipe is performed.
-*              : When SQSET bit or SQCLR bit, and SQSET bit or SQCLR bit
-*              : in DCPCTR register are continuously changed (when the sequence
-*              : toggle bit of data PID is continuously changed over two or more pipes),
-*              : the access cycle with 120 ns and more than 5 cycle bus clock is necessary.
-*              : Do not set both SQCLR bit and SQSET bit to 1 at the same time.
-*              : In addition, both bits should be operated after PID is set to NAK.
-*              : However, when it is set to the isochronous transfer as the transfer type
-*              : (TYPE=11), writing in SQSET bit is disabled.
-* Arguments    : uint16_t pipe     ; Pipe number
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_set_csclr (uint16_t pipe)
-{
-    usb1_function_set_csclr(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_set_curpipe
-* Description  : Allocates FIF0 specifed by the argument in the pipe assigned
-*              : by the argument.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t fifosel   ; Select FIFO
-*              : uint16_t isel      ; FIFO Access Direction
-*              : uint16_t mbw       ; FIFO Port Access Bit Width
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
-{
-    usb1_function_set_curpipe(pipe, fifosel, isel, mbw);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_clear_brdy_sts
-* Description  : Clear BRDY interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_clear_brdy_sts (uint16_t pipe)
-{
-    usb1_function_clear_brdy_sts(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_clear_bemp_sts
-* Description  : Clear BEMP interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_clear_bemp_sts (uint16_t pipe)
-{
-    usb1_function_clear_bemp_sts(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_clear_nrdy_sts
-* Description  : Clear NRDY interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_clear_nrdy_sts (uint16_t pipe)
-{
-    usb1_function_clear_nrdy_sts(pipe);
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_controlrw.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_controlrw.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_controlrw.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb1_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb1_api_function_CtrlReadStart
-* Description  : Executes the USB control read transfer.
-*              : USB host controller <- USB device
-* Arguments    : uint16_t size     ; Data Size
-*              : uint8_t  *data    ; Data Address
-* Return Value : DEVDRV_USBF_WRITEEND          ; End of data write
-*              : DEVDRV_USBF_WRITESHRT         ; End of short data write
-*              : DEVDRV_USBF_WRITING           ; Continue of data write
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO access error
-*******************************************************************************/
-uint16_t usb1_api_function_CtrlReadStart (uint32_t size, uint8_t * data)
-{
-    uint16_t status;
-    uint16_t mbw;
-
-    usb1_function_set_pid_nak(USB_FUNCTION_PIPE0);
-
-    g_usb1_function_data_count[USB_FUNCTION_PIPE0]   = size;
-    g_usb1_function_data_pointer[USB_FUNCTION_PIPE0] = data;
-
-    mbw = usb1_function_get_mbw(g_usb1_function_data_count[USB_FUNCTION_PIPE0],
-                                    (uint32_t)g_usb1_function_data_pointer[USB_FUNCTION_PIPE0]);
-    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
-    USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;
-
-    status = usb1_function_write_buffer_c(USB_FUNCTION_PIPE0);
-
-    /* Peripheral Control sequence */
-    switch (status)
-    {
-        case DEVDRV_USBF_WRITESHRT:                                     /* End of data write */
-        case DEVDRV_USBF_WRITEEND:                                      /* End of data write (not null) */
-        case DEVDRV_USBF_WRITING:                                       /* Continue of data write */
-            usb1_function_enable_bemp_int(USB_FUNCTION_PIPE0);          /* Enable Empty Interrupt */
-            usb1_function_set_pid_buf(USB_FUNCTION_PIPE0);              /* Set BUF */
-        break;
-
-        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access error */
-        break;
-
-        default:
-        break;
-    }
-
-    return status;                                                      /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_CtrlWriteStart
-* Description  : Executes the USB control write transfer.
-*              : USB host controller -> USB device
-* Arguments    : uint16_t  size         ; Data Size
-*              : uint8_t  *data         ; Data Address
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_CtrlWriteStart (uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb1_function_set_pid_nak(USB_FUNCTION_PIPE0);
-
-    g_usb1_function_data_count[USB_FUNCTION_PIPE0]   = size;
-    g_usb1_function_data_pointer[USB_FUNCTION_PIPE0] = data;
-
-    mbw = usb1_function_get_mbw(g_usb1_function_data_count[USB_FUNCTION_PIPE0],
-                                    (uint32_t)g_usb1_function_data_pointer[USB_FUNCTION_PIPE0]);
-    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
-    USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;
-
-    usb1_function_enable_brdy_int(USB_FUNCTION_PIPE0);
-    usb1_function_set_pid_buf(USB_FUNCTION_PIPE0);
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_global.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_global.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_global.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb1_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-const uint16_t g_usb1_function_bit_set[16] =
-{
-    0x0001, 0x0002, 0x0004, 0x0008,
-    0x0010, 0x0020, 0x0040, 0x0080,
-    0x0100, 0x0200, 0x0400, 0x0800,
-    0x1000, 0x2000, 0x4000, 0x8000
-};
-
-uint32_t g_usb1_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint8_t  * g_usb1_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-uint16_t g_usb1_function_PipeIgnore[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb1_function_PipeTbl[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb1_function_pipe_status[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint32_t g_usb1_function_PipeDataSize[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-USB_FUNCTION_DMA_t g_usb1_function_DmaInfo[2];
-uint16_t g_usb1_function_DmaPipe[2];
-uint16_t g_usb1_function_DmaBval[2];
-uint16_t g_usb1_function_DmaStatus[2];
-
-uint16_t g_usb1_function_CtrZeroLengthFlag;
-
-//uint16_t g_usb1_function_ConfigNum;
-//uint16_t g_usb1_function_Alternate[USB_FUNCTION_ALT_NO];
-//uint16_t g_usb1_function_RemoteWakeupFlag;
-uint16_t g_usb1_function_TestModeFlag;
-uint16_t g_usb1_function_TestModeSelectors;
-
-//uint16_t g_usb1_function_ReqType;
-//uint16_t g_usb1_function_ReqTypeType;
-//uint16_t g_usb1_function_ReqTypeRecip;
-//uint16_t g_usb1_function_ReqRequest;
-//uint16_t g_usb1_function_ReqValue;
-//uint16_t g_usb1_function_ReqIndex;
-//uint16_t g_usb1_function_ReqLength;
-
-//uint16_t g_usb1_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
-
-uint16_t g_usb1_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb1_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb1_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb1_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-
-/*******************************************************************************
-* Function Name: usb1_function_init_status
-* Description  : Initialization USB Sample Driver Variable.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb1_function_init_status (void)
-{
-    uint16_t pipe;
-
-    //g_usb1_function_ConfigNum         = 0;
-    //g_usb1_function_RemoteWakeupFlag  = DEVDRV_USBF_OFF;
-    g_usb1_function_TestModeFlag      = DEVDRV_USBF_OFF;
-    g_usb1_function_CtrZeroLengthFlag = 0;
-
-#if 0
-    usb1_function_clear_alt();
-#endif
-
-    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
-    {
-        g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
-        g_usb1_function_PipeDataSize[pipe] = 0;
-        g_usb1_function_data_count[pipe]   = 0;
-
-        /* pipe configuration in usb1_function_ResetEP() */
-        g_usb1_function_pipecfg[pipe]  = 0;
-        g_usb1_function_pipebuf[pipe]  = 0;
-        g_usb1_function_pipemaxp[pipe] = 0;
-        g_usb1_function_pipeperi[pipe] = 0;
-    }
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_sig.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_sig.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,330 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_sig.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb1_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-static void usb1_function_EnableINTModule(void);
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb1_function_InitModule
-* Description  : Initializes the USB module in the USB function mode.
-* Arguments    : uint16_t mode  ; USB_FUNCTION_HIGH_SPEED ; Hi-Speed Mode
-*              :                ; other                   ; Full-speed Mode
-* Return Value : none
-*******************************************************************************/
-void usb1_function_InitModule (uint16_t mode)
-{
-    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
-                        0,
-                        USB_SYSCFG_DCFM_SHIFT,
-                        USB_SYSCFG_DCFM);           /* USB function */
-
-    /* USB module operation enabled     */
-    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
-                        1,
-                        USB_SYSCFG_USBE_SHIFT,
-                        USB_SYSCFG_USBE);
-
-    if (mode == USB_FUNCTION_HIGH_SPEED)
-    {
-        RZA_IO_RegWrite_16(&USB201.SYSCFG0,
-                            1,
-                            USB_SYSCFG_HSE_SHIFT,
-                            USB_SYSCFG_HSE);        /* Hi-Speed Mode */
-    }
-    else
-    {
-        RZA_IO_RegWrite_16(&USB201.SYSCFG0,
-                            0,
-                            USB_SYSCFG_HSE_SHIFT,
-                            USB_SYSCFG_HSE);
-    }
-
-    /* for power-on                     */
-    if (usb1_function_CheckVBUStaus() == DEVDRV_USBF_ON)
-    {
-        usb1_function_EnableINTModule();            /* Interrupt Enable */
-        usb1_function_USB_FUNCTION_Attach();        /* pull-up D+ and open D- */
-    }
-    else
-    {
-        usb1_function_USB_FUNCTION_Detach();        /* USB Detach */
-                                                    /* with Interrupt Enable */
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_CheckVBUStaus
-* Description  : Checks the USB-VBUS state to returns the connection state to
-*              : the USB host.
-* Arguments    : none
-* Return Value : DEVDRV_USBF_ON     :   VBUS ON
-*              : DEVDRV_USBF_OFF   :   VBUS OFF
-*******************************************************************************/
-uint16_t usb1_function_CheckVBUStaus (void)
-{
-    uint16_t buf1;
-    uint16_t buf2;
-    uint16_t buf3;
-
-    /* monitor VBUS pins */
-    do
-    {
-        buf1 = RZA_IO_RegRead_16(&USB201.INTSTS0,
-                                USB_INTSTS0_VBSTS_SHIFT,
-                                USB_INTSTS0_VBSTS);
-        Userdef_USB_usb1_function_delay_10us(1);
-        buf2 = RZA_IO_RegRead_16(&USB201.INTSTS0,
-                                USB_INTSTS0_VBSTS_SHIFT,
-                                USB_INTSTS0_VBSTS);
-        Userdef_USB_usb1_function_delay_10us(1);
-        buf3 = RZA_IO_RegRead_16(&USB201.INTSTS0,
-                                USB_INTSTS0_VBSTS_SHIFT,
-                                USB_INTSTS0_VBSTS);
-    } while ((buf1 != buf2) || (buf2 != buf3));
-
-    if (buf1 == DEVDRV_USBF_OFF)
-    {
-        return DEVDRV_USBF_OFF;        /* detach */
-    }
-
-    return DEVDRV_USBF_ON;             /* attach */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_USB_FUNCTION_Attach
-* Description  : Connects to the USB host controller.
-*              : This function pulls up D+.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb1_function_USB_FUNCTION_Attach (void)
-{
-    Userdef_USB_usb1_function_attach();
-
-    Userdef_USB_usb1_function_delay_xms(10);
-
-    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
-                        1,
-                        USB_SYSCFG_DPRPU_SHIFT,
-                        USB_SYSCFG_DPRPU);      /* Pull-up D+ and open D- */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_USB_FUNCTION_Detach
-* Description  : Disconnects from the USB host controller.
-*              : This function opens D+/D-.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb1_function_USB_FUNCTION_Detach (void)
-{
-    uint16_t pipe;
-
-    Userdef_USB_usb1_function_detach();
-
-    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
-    {
-        if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_IDLE)
-        {
-            usb1_function_stop_transfer(pipe);
-        }
-    }
-
-    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
-                        0,
-                        USB_SYSCFG_DPRPU_SHIFT,
-                        USB_SYSCFG_DPRPU);      /* open D+ and D- */
-
-    /* Detach Recovery */
-    Userdef_USB_usb1_function_delay_500ns();                /* need 1us=500ns * 2 wait */
-    Userdef_USB_usb1_function_delay_500ns();
-
-    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
-                        1,
-                        USB_SYSCFG_DCFM_SHIFT,
-                        USB_SYSCFG_DCFM);
-    Userdef_USB_usb1_function_delay_500ns();                /* need 100ns wait but 500ns S/W wait */
-
-    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
-                        0,
-                        USB_SYSCFG_DCFM_SHIFT,
-                        USB_SYSCFG_DCFM);
-
-    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
-                        0,
-                        USB_SYSCFG_USBE_SHIFT,
-                        USB_SYSCFG_USBE);       /* soft reset module */
-    Userdef_USB_usb1_function_delay_500ns();
-
-    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
-                        1,
-                        USB_SYSCFG_USBE_SHIFT,
-                        USB_SYSCFG_USBE);
-
-    usb1_function_EnableINTModule();            /* Interrupt Enable */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_USB_FUNCTION_BusReset
-* Description  : This function is executed when the USB device is transitioned
-*              : to POWERD_STATE. Sets the device descriptor according to the
-*              : connection speed determined by the USB reset hand shake.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-#if 0	/*The USBHAL in mbed does not need this function*/
-void usb1_function_USB_FUNCTION_BusReset (void)
-{
-    usb1_function_init_status();                                    /* memory clear */
-
-    if (usb1_function_is_hispeed() == USB_FUNCTION_HIGH_SPEED)
-    {
-        usb1_function_ResetDescriptor(USB_FUNCTION_HIGH_SPEED);     /* Device Descriptor reset */
-    }
-    else
-    {
-        usb1_function_ResetDescriptor(USB_FUNCTION_FULL_SPEED);     /* Device Descriptor reset */
-    }
-
-    usb1_function_ResetDCP();                                       /* Default Control PIPE reset */
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_USB_FUNCTION_Resume
-* Description  : This function is executed when the USB device detects a resume
-*              : signal.
-*              : The USB sample driver does not operate for this function.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-#if 0	/*The USBHAL in mbed does not need this function*/
-void usb1_function_USB_FUNCTION_Resume (void)
-{
-    /* NOP */
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_USB_FUNCTION_Suspend
-* Description  : This function is executed when the USB device detects a suspend
-*              : signal.
-*              : The USB sample driver does not operate for this function.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-#if 0	/*The USBHAL in mbed does not need this function*/
-void usb1_function_USB_FUNCTION_Suspend (void)
-{
-    /* NOP */
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_USB_FUNCTION_TestMode
-* Description  : This function is executed when the USB device is transitioned U
-*              : to TEST_MODE by the USB standard request.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb1_function_USB_FUNCTION_TestMode (void)
-{
-    switch (g_usb1_function_TestModeSelectors & USB_FUNCTION_FUNCTION_TEST_SELECT)
-    {
-        case USB_FUNCTION_FUNCTION_TEST_J:
-        case USB_FUNCTION_FUNCTION_TEST_K:
-        case USB_FUNCTION_FUNCTION_TEST_SE0_NAK:
-        case USB_FUNCTION_FUNCTION_TEST_PACKET:
-            RZA_IO_RegWrite_16(&USB201.TESTMODE,
-                                (g_usb1_function_TestModeSelectors >> 8),
-                                USB_TESTMODE_UTST_SHIFT,
-                                USB_TESTMODE_UTST);
-        break;
-
-        case USB_FUNCTION_FUNCTION_TEST_FORCE_ENABLE:
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_EnableINTModule
-* Description  : Enables USB interrupt.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_EnableINTModule (void)
-{
-    uint16_t buf;
-
-    buf  = USB201.INTENB0;
-    buf |= (USB_FUNCTION_BITVBSE | USB_FUNCTION_BITDVSE | USB_FUNCTION_BITCTRE |
-            USB_FUNCTION_BITBEMPE | USB_FUNCTION_BITNRDYE | USB_FUNCTION_BITBRDYE);
-    USB201.INTENB0 = buf;
-
-    usb1_function_enable_bemp_int(USB_FUNCTION_PIPE0);
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_sub.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_sub.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,453 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_sub.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb1_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-#if 0
-extern const uint16_t *g_usb1_function_EndPntPtr[];
-extern uint8_t         g_usb1_function_DeviceDescriptor[];
-extern uint8_t        *g_usb1_function_ConfigurationPtr[];
-#endif
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb1_function_ResetDCP
-* Description  : Initializes the default control pipe(DCP).
-* Outline      : Reset default control pipe
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb1_function_ResetDCP (void)
-{
-    USB201.DCPCFG  = 0;
-#if 0
-    USB201.DCPMAXP = g_usb1_function_DeviceDescriptor[7];
-#else
-    USB201.DCPMAXP = 64;
-#endif
-
-    USB201.CFIFOSEL  = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
-    USB201.D0FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
-    USB201.D1FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_ResetEP
-* Description  : Initializes the end point.
-* Arguments    : uint16_t num          ; Configuration Number
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb1_function_ResetEP (uint16_t num)
-{
-    uint16_t   pipe;
-    uint16_t   ep;
-    uint16_t   index;
-    uint16_t   buf;
-    uint16_t * tbl;
-
-    tbl = (uint16_t *)(g_usb1_function_EndPntPtr[num - 1]);
-
-    for (ep = 1; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
-    {
-        if (g_usb1_function_EPTableIndex[ep] != USB_FUNCTION_EP_ERROR)
-        {
-            index = (uint16_t)(USB_FUNCTION_EPTABLE_LENGTH * g_usb1_function_EPTableIndex[ep]);
-            pipe  = (uint16_t)(tbl[index + 0] & USB_FUNCTION_BITCURPIPE);
-
-            g_usb1_function_PipeTbl[pipe] = (uint16_t)(((tbl[index + 1] & USB_FUNCTION_DIRFIELD) << 3) |
-                                                         ep                                            |
-                                                        (tbl[index + 0] & USB_FUNCTION_FIFO_USE));
-
-            if ((tbl[index + 1] & USB_FUNCTION_DIRFIELD) == USB_FUNCTION_DIR_P_OUT)
-            {
-                tbl[index + 1] |= USB_FUNCTION_SHTNAKON;
-#ifdef  __USB_DMA_BFRE_ENABLE__
-                /* this routine cannnot be perfomred if read operation is executed in buffer size */
-                if (((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA) ||
-                    ((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA))
-                {
-                    tbl[index + 1] |= USB_FUNCTION_BFREON;
-                }
-#endif
-            }
-
-            /* Interrupt Disable */
-            buf  = USB201.BRDYENB;
-            buf &= (uint16_t)~g_usb1_function_bit_set[pipe];
-            USB201.BRDYENB = buf;
-            buf  = USB201.NRDYENB;
-            buf &= (uint16_t)~g_usb1_function_bit_set[pipe];
-            USB201.NRDYENB = buf;
-            buf  = USB201.BEMPENB;
-            buf &= (uint16_t)~g_usb1_function_bit_set[pipe];
-            USB201.BEMPENB = buf;
-
-            usb1_function_set_pid_nak(pipe);
-
-            /* CurrentPIPE Clear */
-            if (RZA_IO_RegRead_16(&USB201.CFIFOSEL,
-                                    USB_CFIFOSEL_CURPIPE_SHIFT,
-                                    USB_CFIFOSEL_CURPIPE) == pipe)
-            {
-                RZA_IO_RegWrite_16(&USB201.CFIFOSEL,
-                                    0,
-                                    USB_CFIFOSEL_CURPIPE_SHIFT,
-                                    USB_CFIFOSEL_CURPIPE);
-            }
-
-            if (RZA_IO_RegRead_16(&USB201.D0FIFOSEL,
-                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
-                                    USB_DnFIFOSEL_CURPIPE) == pipe)
-            {
-                RZA_IO_RegWrite_16(&USB201.D0FIFOSEL,
-                                    0,
-                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
-                                    USB_DnFIFOSEL_CURPIPE);
-            }
-
-            if (RZA_IO_RegRead_16(&USB201.D1FIFOSEL,
-                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
-                                    USB_DnFIFOSEL_CURPIPE) == pipe)
-            {
-                RZA_IO_RegWrite_16(&USB201.D1FIFOSEL,
-                                    0,
-                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
-                                    USB_DnFIFOSEL_CURPIPE);
-            }
-
-            /* PIPE Configuration */
-            USB201.PIPESEL  = pipe;
-            USB201.PIPECFG  = tbl[index + 1];
-            USB201.PIPEBUF  = tbl[index + 2];
-            USB201.PIPEMAXP = tbl[index + 3];
-            USB201.PIPEPERI = tbl[index + 4];
-
-            g_usb1_function_pipecfg[pipe]  = tbl[index + 1];
-            g_usb1_function_pipebuf[pipe]  = tbl[index + 2];
-            g_usb1_function_pipemaxp[pipe] = tbl[index + 3];
-            g_usb1_function_pipeperi[pipe] = tbl[index + 4];
-
-            /* Buffer Clear */
-            usb1_function_set_sqclr(pipe);
-            usb1_function_aclrm(pipe);
-
-            /* init Global */
-            g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
-            g_usb1_function_PipeDataSize[pipe] = 0;
-        }
-    }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_EpToPipe
-* Description  : Returns the pipe which end point specified by the argument is
-*              : allocated to.
-* Arguments    : uint16_t ep       ; Direction + Endpoint Number
-* Return Value : USB_FUNCTION_EP_ERROR         : Error
-*              : Others           : Pipe Number
-*******************************************************************************/
-uint16_t usb1_function_EpToPipe (uint16_t ep)
-{
-    uint16_t pipe;
-
-    for (pipe = 1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
-    {
-        if ((g_usb1_function_PipeTbl[pipe] & 0x00ff) == ep)
-        {
-            return pipe;
-        }
-    }
-
-    return USB_FUNCTION_EP_ERROR;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_InitEPTable
-* Description  : Sets the end point by the Alternate setting value of the
-*              : configuration number and the interface number specified by the
-*              : argument.
-* Arguments    : uint16_t Con_Num       ; Configuration Number
-*              : uint16_t Int_Num       ; Interface Number
-*              : uint16_t Alt_Num       ; Alternate Setting
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb1_function_InitEPTable (uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num)
-{
-    uint8_t  * ptr;
-    uint16_t   point_interface;
-    uint16_t   point_endpoint;
-    uint16_t   length;
-    uint16_t   start;
-    uint16_t   numbers;
-    uint16_t   endpoint;
-
-    ptr = (uint8_t *)g_usb1_function_ConfigurationPtr[Con_Num - 1];
-    point_interface = *ptr;
-    length = (uint16_t)((uint16_t)*(ptr + 3) << 8 | (uint16_t)*(ptr + 2));
-    ptr  += *ptr;
-    start   = 0;
-    numbers = 0;
-    point_endpoint = 0;
-
-    for (; point_interface < length;)
-    {
-        switch (*(ptr + 1))                                     /* Descriptor Type ? */
-        {
-            case USB_FUNCTION_DT_INTERFACE:                     /* Interface */
-                if ((*(ptr + 2) == Int_Num) && (*(ptr + 3) == Alt_Num))
-                {
-                    numbers = *(ptr + 4);
-                }
-                else
-                {
-                    start  += *(ptr + 4);
-                }
-                point_interface += *ptr;
-                ptr += *ptr;
-            break;
-
-            case USB_FUNCTION_DT_ENDPOINT:                      /* Endpoint */
-                if (point_endpoint < numbers)
-                {
-                    endpoint = (uint16_t)(*(ptr + 2) & 0x0f);
-                    g_usb1_function_EPTableIndex[endpoint] = (uint16_t)(start + point_endpoint);
-                    ++point_endpoint;
-                }
-                point_interface += *ptr;
-                ptr += *ptr;
-            break;
-
-            case USB_FUNCTION_DT_DEVICE:                        /* Device */
-            case USB_FUNCTION_DT_CONFIGURATION:                 /* Configuration */
-            case USB_FUNCTION_DT_STRING:                        /* String */
-            default:                                            /* Class, Vendor, else */
-                point_interface += *ptr;
-                ptr += *ptr;
-            break;
-        }
-    }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_GetConfigNum
-* Description  : Returns the number of configuration referring to the number of
-*              : configuration described in the device descriptor.
-* Arguments    : none
-* Return Value : Number of possible configurations (bNumConfigurations).
-*******************************************************************************/
-#if 0
-uint16_t usb1_function_GetConfigNum (void)
-{
-    return (uint16_t)g_usb1_function_DeviceDescriptor[17];
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_GetInterfaceNum
-* Description  : Returns the number of interface referring to the number of
-*              : interface described in the configuration descriptor.
-* Arguments    : uint16_t num       ; Configuration Number
-* Return Value : Number of this interface (bNumInterfaces).
-*******************************************************************************/
-#if 0
-uint16_t usb1_function_GetInterfaceNum (uint16_t num)
-{
-    return (uint16_t)(*(g_usb1_function_ConfigurationPtr[num - 1] + 4));
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_GetAltNum
-* Description  : Returns the Alternate setting value of the configuration number
-*              : and the interface number specified by the argument.
-* Arguments    : uint16_t Con_Num       ; Configuration Number
-*              : uint16_t Int_Num       ; Interface Number
-* Return Value : Value used to select this alternate setting(bAlternateSetting).
-*******************************************************************************/
-#if 0
-uint16_t usb1_function_GetAltNum (uint16_t Con_Num, uint16_t Int_Num)
-{
-    uint8_t  * ptr;
-    uint16_t   point;
-    uint16_t   alt_num = 0;
-    uint16_t   length;
-
-    ptr = (uint8_t *)(g_usb1_function_ConfigurationPtr[Con_Num - 1]);
-    point = ptr[0];
-    ptr  += ptr[0];                                 /* InterfaceDescriptor[0] */
-    length  = (uint16_t)(*(g_usb1_function_ConfigurationPtr[Con_Num - 1] + 2));
-    length |= (uint16_t)((uint16_t)(*(g_usb1_function_ConfigurationPtr[Con_Num - 1] + 3)) << 8);
-
-    for (; point < length;)                                 /* Search Descriptor Table size */
-    {
-        switch (ptr[1])                                     /* Descriptor Type ? */
-        {
-            case USB_FUNCTION_DT_INTERFACE:                 /* Interface */
-                if (Int_Num == ptr[2])
-                {
-                    alt_num = (uint16_t)ptr[3];             /* Alternate Number count */
-                }
-                point += ptr[0];
-                ptr += ptr[0];
-            break;
-
-            case USB_FUNCTION_DT_DEVICE:                    /* Device */
-            case USB_FUNCTION_DT_CONFIGURATION:             /* Configuration */
-            case USB_FUNCTION_DT_STRING:                    /* String */
-            case USB_FUNCTION_DT_ENDPOINT:                  /* Endpoint */
-            default:                                        /* Class, Vendor, else */
-                point += ptr[0];
-                ptr   += ptr[0];
-            break;
-        }
-    }
-    return alt_num;
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_CheckRemoteWakeup
-* Description  : Returns the result of the remote wake up function is supported
-*              : or not referring to the configuration descriptor.
-* Arguments    : none
-* Return Value : DEVDRV_USBF_ON     :   Support Remote Wakeup
-*              : DEVDRV_USBF_OFF    :   not Support Remote Wakeup
-*******************************************************************************/
-#if 0
-uint16_t usb1_function_CheckRemoteWakeup (void)
-{
-    uint8_t atr;
-
-    if (g_usb1_function_ConfigNum == 0)
-    {
-        return DEVDRV_USBF_OFF;
-    }
-
-    atr = *(g_usb1_function_ConfigurationPtr[g_usb1_function_ConfigNum - 1] + 7);
-
-    if (atr & USB_FUNCTION_CF_RWUP)
-    {
-        return DEVDRV_USBF_ON;
-    }
-
-    return DEVDRV_USBF_OFF;
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_clear_alt
-* Description  : Initializes the Alternate setting area.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb1_function_clear_alt (void)
-{
-    int i;
-
-    for (i = 0; i < USB_FUNCTION_ALT_NO; ++i)
-    {
-        g_usb1_function_Alternate[i] = 0;                           /* Alternate */
-    }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_clear_pipe_tbl
-* Description  : Initializes pipe definition table.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb1_function_clear_pipe_tbl (void)
-{
-    int pipe;
-
-    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
-    {
-        g_usb1_function_PipeTbl[pipe] = 0;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_clear_ep_table_index
-* Description  : Initializes the end point table index.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb1_function_clear_ep_table_index (void)
-{
-    int ep;
-
-    for (ep = 0; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
-    {
-        g_usb1_function_EPTableIndex[ep] = USB_FUNCTION_EP_ERROR;
-    }
-}
-#endif
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/userdef/usb1_function_dmacdrv.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/userdef/usb1_function_dmacdrv.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,698 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_dmacdrv.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include <stdio.h>
-#include "r_typedefs.h"
-#include "iodefine.h"
-#include "rza_io_regrw.h"
-#include "usb1_function_dmacdrv.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-#define DMAC_INDEFINE   (255)       /* Macro definition when REQD bit is not used */
-
-/* ==== Request setting information for on-chip peripheral module ==== */
-typedef enum dmac_peri_req_reg_type
-{
-    DMAC_REQ_MID,
-    DMAC_REQ_RID,
-    DMAC_REQ_AM,
-    DMAC_REQ_LVL,
-    DMAC_REQ_REQD
-} dmac_peri_req_reg_type_t;
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-/* ==== Prototype declaration ==== */
-
-/* ==== Global variable ==== */
-/* On-chip peripheral module request setting table */
-static const uint8_t usb1_function_dmac_peri_req_init_table[8][5] =
-{
-    /* MID,RID,AM,LVL,REQD */
-    {32, 3, 2, 1, 1},    /* USB_0 channel 0 transmit FIFO empty */
-    {32, 3, 2, 1, 0},    /* USB_0 channel 0 receive FIFO full   */
-    {33, 3, 2, 1, 1},    /* USB_0 channel 1 transmit FIFO empty */
-    {33, 3, 2, 1, 0},    /* USB_0 channel 1 receive FIFO full   */
-    {34, 3, 2, 1, 1},    /* USB_1 channel 0 transmit FIFO empty */
-    {34, 3, 2, 1, 0},    /* USB_1 channel 0 receive FIFO full   */
-    {35, 3, 2, 1, 1},    /* USB_1 channel 1 transmit FIFO empty */
-    {35, 3, 2, 1, 0},    /* USB_1 channel 1 receive FIFO full   */
-};
-
-
-/*******************************************************************************
-* Function Name: usb1_function_DMAC3_PeriReqInit
-* Description  : Sets the register mode for DMA mode and the on-chip peripheral
-*              : module request for transfer request for DMAC channel 1.
-*              : Executes DMAC initial setting using the DMA information
-*              : specified by the argument *trans_info and the enabled/disabled
-*              : continuous transfer specified by the argument continuation.
-*              : Registers DMAC channel 1 interrupt handler function and sets
-*              : the interrupt priority level. Then enables transfer completion
-*              : interrupt.
-* Arguments    : dmac_transinfo_t *trans_info   : Setting information to DMAC register
-*              : uint32_t          dmamode      : DMA mode (only for DMAC_MODE_REGISTER)
-*              : uint32_t          continuation : Set continuous transfer to be valid
-*              :                                  after DMA transfer has been completed
-*              :             DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
-*              :             DMAC_SAMPLE_SINGLE       : Do not execute continuous transfer
-*              : uint32_t request_factor        : Factor for on-chip peripheral module request
-*              :             DMAC_REQ_OSTM0TINT       : OSTM_0 compare match
-*              :             DMAC_REQ_OSTM1TINT       : OSTM_1 compare match
-*              :             DMAC_REQ_TGI0A           : MTU2_0 input capture/compare match
-*              :                  :
-*              : uint32_t          req_direction: Setting value of CHCFG_n register REQD bit
-* Return Value : none
-*******************************************************************************/
-void usb1_function_DMAC3_PeriReqInit (const dmac_transinfo_t * trans_info,
-                                      uint32_t dmamode, uint32_t continuation,
-                                      uint32_t request_factor, uint32_t req_direction)
-{
-    /* ==== Register mode ==== */
-    if (DMAC_MODE_REGISTER == dmamode)
-    {
-        /* ==== Next0 register set ==== */
-        DMAC3.N0SA_n = trans_info->src_addr;         /* Start address of transfer source      */
-        DMAC3.N0DA_n = trans_info->dst_addr;         /* Start address of transfer destination */
-        DMAC3.N0TB_n = trans_info->count;            /* Total transfer byte count             */
-
-        /* DAD : Transfer destination address counting direction */
-        /* SAD : Transfer source address counting direction      */
-        /* DDS : Transfer destination transfer size              */
-        /* SDS : Transfer source transfer size                   */
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            trans_info->daddr_dir,
-                            DMAC3_CHCFG_n_DAD_SHIFT,
-                            DMAC3_CHCFG_n_DAD);
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            trans_info->saddr_dir,
-                            DMAC3_CHCFG_n_SAD_SHIFT,
-                            DMAC3_CHCFG_n_SAD);
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            trans_info->dst_size,
-                            DMAC3_CHCFG_n_DDS_SHIFT,
-                            DMAC3_CHCFG_n_DDS);
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            trans_info->src_size,
-                            DMAC3_CHCFG_n_SDS_SHIFT,
-                            DMAC3_CHCFG_n_SDS);
-
-        /* DMS  : Register mode                            */
-        /* RSEL : Select Next0 register set                */
-        /* SBE  : No discharge of buffer data when aborted */
-        /* DEM  : No DMA interrupt mask                    */
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            0,
-                            DMAC3_CHCFG_n_DMS_SHIFT,
-                            DMAC3_CHCFG_n_DMS);
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            0,
-                            DMAC3_CHCFG_n_RSEL_SHIFT,
-                            DMAC3_CHCFG_n_RSEL);
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            0,
-                            DMAC3_CHCFG_n_SBE_SHIFT,
-                            DMAC3_CHCFG_n_SBE);
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            0,
-                            DMAC3_CHCFG_n_DEM_SHIFT,
-                            DMAC3_CHCFG_n_DEM);
-
-        /* ---- Continuous transfer ---- */
-        if (DMAC_SAMPLE_CONTINUATION == continuation)
-        {
-            /* REN : Execute continuous transfer                         */
-            /* RSW : Change register set when DMA transfer is completed. */
-            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                                1,
-                                DMAC3_CHCFG_n_REN_SHIFT,
-                                DMAC3_CHCFG_n_REN);
-            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                                1,
-                                DMAC3_CHCFG_n_RSW_SHIFT,
-                                DMAC3_CHCFG_n_RSW);
-        }
-        /* ---- Single transfer ---- */
-        else
-        {
-            /* REN : Do not execute continuous transfer                         */
-            /* RSW : Do not change register set when DMA transfer is completed. */
-            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                                0,
-                                DMAC3_CHCFG_n_REN_SHIFT,
-                                DMAC3_CHCFG_n_REN);
-            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                                0,
-                                DMAC3_CHCFG_n_RSW_SHIFT,
-                                DMAC3_CHCFG_n_RSW);
-        }
-
-        /* TM  : Single transfer                          */
-        /* SEL : Channel setting                          */
-        /* HIEN, LOEN : On-chip peripheral module request */
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            0,
-                            DMAC3_CHCFG_n_TM_SHIFT,
-                            DMAC3_CHCFG_n_TM);
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            3,
-                            DMAC3_CHCFG_n_SEL_SHIFT,
-                            DMAC3_CHCFG_n_SEL);
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            1,
-                            DMAC3_CHCFG_n_HIEN_SHIFT,
-                            DMAC3_CHCFG_n_HIEN);
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            0,
-                            DMAC3_CHCFG_n_LOEN_SHIFT,
-                            DMAC3_CHCFG_n_LOEN);
-
-        /* ---- Set factor by specified on-chip peripheral module request ---- */
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
-                            DMAC3_CHCFG_n_AM_SHIFT,
-                            DMAC3_CHCFG_n_AM);
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
-                            DMAC3_CHCFG_n_LVL_SHIFT,
-                            DMAC3_CHCFG_n_LVL);
-
-        if (usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
-        {
-            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                                usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
-                                DMAC3_CHCFG_n_REQD_SHIFT,
-                                DMAC3_CHCFG_n_REQD);
-        }
-        else
-        {
-            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                                req_direction,
-                                DMAC3_CHCFG_n_REQD_SHIFT,
-                                DMAC3_CHCFG_n_REQD);
-        }
-
-        RZA_IO_RegWrite_32(&DMAC23.DMARS,
-                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
-                            DMAC23_DMARS_CH3_RID_SHIFT,
-                            DMAC23_DMARS_CH3_RID);
-        RZA_IO_RegWrite_32(&DMAC23.DMARS,
-                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
-                            DMAC23_DMARS_CH3_MID_SHIFT,
-                            DMAC23_DMARS_CH3_MID);
-
-        /* PR : Round robin mode */
-        RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
-                            1,
-                            DMAC07_DCTRL_0_7_PR_SHIFT,
-                            DMAC07_DCTRL_0_7_PR);
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_DMAC3_Open
-* Description  : Enables DMAC channel 3 transfer.
-* Arguments    : uint32_t req : DMAC request mode
-* Return Value :  0 : Succeeded in enabling DMA transfer
-*              : -1 : Failed to enable DMA transfer (due to DMA operation)
-*******************************************************************************/
-int32_t usb1_function_DMAC3_Open (uint32_t req)
-{
-    int32_t ret;
-    volatile uint8_t dummy;
-
-    /* Transferable? */
-    if ((0 == RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
-                                DMAC3_CHSTAT_n_EN_SHIFT,
-                                DMAC3_CHSTAT_n_EN)) &&
-        (0 == RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
-                                DMAC3_CHSTAT_n_TACT_SHIFT,
-                                DMAC3_CHSTAT_n_TACT)))
-    {
-        /* Clear Channel Status Register */
-        RZA_IO_RegWrite_32(&DMAC3.CHCTRL_n,
-                            1,
-                            DMAC3_CHCTRL_n_SWRST_SHIFT,
-                            DMAC3_CHCTRL_n_SWRST);
-        dummy = RZA_IO_RegRead_32(&DMAC3.CHCTRL_n,
-                                DMAC3_CHCTRL_n_SWRST_SHIFT,
-                                DMAC3_CHCTRL_n_SWRST);
-        /* Enable DMA transfer */
-        RZA_IO_RegWrite_32(&DMAC3.CHCTRL_n,
-                            1,
-                            DMAC3_CHCTRL_n_SETEN_SHIFT,
-                            DMAC3_CHCTRL_n_SETEN);
-
-        /* ---- Request by software ---- */
-        if (DMAC_REQ_MODE_SOFT == req)
-        {
-            /* DMA transfer Request by software */
-            RZA_IO_RegWrite_32(&DMAC3.CHCTRL_n,
-                                1,
-                                DMAC3_CHCTRL_n_STG_SHIFT,
-                                DMAC3_CHCTRL_n_STG);
-        }
-
-        ret = 0;
-    }
-    else
-    {
-        ret = -1;
-    }
-
-    return ret;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_DMAC3_Close
-* Description  : Aborts DMAC channel 3 transfer. Returns the remaining transfer
-*              : byte count at the time of DMA transfer abort to the argument
-*              : *remain.
-* Arguments    : uint32_t * remain : Remaining transfer byte count when
-*              :                   : DMA transfer is aborted
-* Return Value : none
-*******************************************************************************/
-void usb1_function_DMAC3_Close (uint32_t * remain)
-{
-
-    /* ==== Abort transfer ==== */
-    RZA_IO_RegWrite_32(&DMAC3.CHCTRL_n,
-                        1,
-                        DMAC3_CHCTRL_n_CLREN_SHIFT,
-                        DMAC3_CHCTRL_n_CLREN);
-
-    while (1 == RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
-                                DMAC3_CHSTAT_n_TACT_SHIFT,
-                                DMAC3_CHSTAT_n_TACT))
-    {
-        /* Loop until transfer is aborted */
-    }
-
-    while (1 == RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
-                                DMAC3_CHSTAT_n_EN_SHIFT,
-                                DMAC3_CHSTAT_n_EN))
-    {
-        /* Loop until 0 is set in EN before checking the remaining transfer byte count */
-    }
-    /* ==== Obtain remaining transfer byte count ==== */
-    *remain = DMAC3.CRTB_n;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_DMAC3_Load_Set
-* Description  : Sets the transfer source address, transfer destination
-*              : address, and total transfer byte count respectively
-*              : specified by the argument src_addr, dst_addr, and count to
-*              : DMAC channel 3 as DMA transfer information.
-*              : Sets the register set selected by the CHCFG_n register
-*              : RSEL bit from the Next0 or Next1 register set.
-*              : This function should be called when DMA transfer of DMAC
-*              : channel 3 is aboted.
-* Arguments    : uint32_t src_addr : Transfer source address
-*              : uint32_t dst_addr : Transfer destination address
-*              : uint32_t count    : Total transfer byte count
-* Return Value : none
-*******************************************************************************/
-void usb1_function_DMAC3_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
-{
-    uint8_t reg_set;
-
-    /* Obtain register set in use */
-    reg_set = RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
-                                DMAC3_CHSTAT_n_SR_SHIFT,
-                                DMAC3_CHSTAT_n_SR);
-
-    /* ==== Load ==== */
-    if (0 == reg_set)
-    {
-        /* ---- Next0 Register Set ---- */
-        DMAC3.N0SA_n = src_addr;    /* Start address of transfer source      */
-        DMAC3.N0DA_n = dst_addr;    /* Start address of transfer destination */
-        DMAC3.N0TB_n = count;       /* Total transfer byte count             */
-    }
-    else
-    {
-        /* ---- Next1 Register Set ---- */
-        DMAC3.N1SA_n = src_addr;     /* Start address of transfer source      */
-        DMAC3.N1DA_n = dst_addr;     /* Start address of transfer destination */
-        DMAC3.N1TB_n = count;        /* Total transfer byte count             */
-     }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_DMAC4_PeriReqInit
-* Description  : Sets the register mode for DMA mode and the on-chip peripheral
-*              : module request for transfer request for DMAC channel 2.
-*              : Executes DMAC initial setting using the DMA information
-*              : specified by the argument *trans_info and the enabled/disabled
-*              : continuous transfer specified by the argument continuation.
-*              : Registers DMAC channel 2 interrupt handler function and sets
-*              : the interrupt priority level. Then enables transfer completion
-*              : interrupt.
-* Arguments    : dmac_transinfo_t * trans_info : Setting information to DMAC
-*              :                               : register
-*              : uint32_t dmamode      : DMA mode (only for DMAC_MODE_REGISTER)
-*              : uint32_t continuation : Set continuous transfer to be valid
-*              :                       : after DMA transfer has been completed
-*              :         DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
-*              :         DMAC_SAMPLE_SINGLE       : Do not execute continuous
-*              :                                  : transfer
-*              : uint32_t request_factor : Factor for on-chip peripheral module
-*              :                         : request
-*              :         DMAC_REQ_OSTM0TINT : OSTM_0 compare match
-*              :         DMAC_REQ_OSTM1TINT : OSTM_1 compare match
-*              :         DMAC_REQ_TGI0A     : MTU2_0 input capture/compare match
-*              :                 :
-*              : uint32_t req_direction : Setting value of CHCFG_n register
-*              :                        : REQD bit
-*******************************************************************************/
-void usb1_function_DMAC4_PeriReqInit (const dmac_transinfo_t * trans_info,
-                                      uint32_t dmamode, uint32_t continuation,
-                                      uint32_t request_factor, uint32_t req_direction)
-{
-    /* ==== Register mode ==== */
-    if (DMAC_MODE_REGISTER == dmamode)
-    {
-        /* ==== Next0 register set ==== */
-        DMAC4.N0SA_n = trans_info->src_addr;        /* Start address of transfer source      */
-        DMAC4.N0DA_n = trans_info->dst_addr;        /* Start address of transfer destination */
-        DMAC4.N0TB_n = trans_info->count;           /* Total transfer byte count             */
-
-        /* DAD : Transfer destination address counting direction */
-        /* SAD : Transfer source address counting direction      */
-        /* DDS : Transfer destination transfer size              */
-        /* SDS : Transfer source transfer size                   */
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            trans_info->daddr_dir,
-                            DMAC4_CHCFG_n_DAD_SHIFT,
-                            DMAC4_CHCFG_n_DAD);
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            trans_info->saddr_dir,
-                            DMAC4_CHCFG_n_SAD_SHIFT,
-                            DMAC4_CHCFG_n_SAD);
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            trans_info->dst_size,
-                            DMAC4_CHCFG_n_DDS_SHIFT,
-                            DMAC4_CHCFG_n_DDS);
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            trans_info->src_size,
-                            DMAC4_CHCFG_n_SDS_SHIFT,
-                            DMAC4_CHCFG_n_SDS);
-
-        /* DMS  : Register mode                            */
-        /* RSEL : Select Next0 register set                */
-        /* SBE  : No discharge of buffer data when aborted */
-        /* DEM  : No DMA interrupt mask                    */
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            0,
-                            DMAC4_CHCFG_n_DMS_SHIFT,
-                            DMAC4_CHCFG_n_DMS);
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            0,
-                            DMAC4_CHCFG_n_RSEL_SHIFT,
-                            DMAC4_CHCFG_n_RSEL);
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            0,
-                            DMAC4_CHCFG_n_SBE_SHIFT,
-                            DMAC4_CHCFG_n_SBE);
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            0,
-                            DMAC4_CHCFG_n_DEM_SHIFT,
-                            DMAC4_CHCFG_n_DEM);
-
-        /* ---- Continuous transfer ---- */
-        if (DMAC_SAMPLE_CONTINUATION == continuation)
-        {
-            /* REN : Execute continuous transfer                         */
-            /* RSW : Change register set when DMA transfer is completed. */
-            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                                1,
-                                DMAC4_CHCFG_n_REN_SHIFT,
-                                DMAC4_CHCFG_n_REN);
-            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                                1,
-                                DMAC4_CHCFG_n_RSW_SHIFT,
-                                DMAC4_CHCFG_n_RSW);
-        }
-        /* ---- Single transfer ---- */
-        else
-        {
-            /* REN : Do not execute continuous transfer                         */
-            /* RSW : Do not change register set when DMA transfer is completed. */
-            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                                0,
-                                DMAC4_CHCFG_n_REN_SHIFT,
-                                DMAC4_CHCFG_n_REN);
-            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                                0,
-                                DMAC4_CHCFG_n_RSW_SHIFT,
-                                DMAC4_CHCFG_n_RSW);
-        }
-
-        /* TM  : Single transfer                          */
-        /* SEL : Channel setting                          */
-        /* HIEN, LOEN : On-chip peripheral module request */
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            0,
-                            DMAC4_CHCFG_n_TM_SHIFT,
-                            DMAC4_CHCFG_n_TM);
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            4,
-                            DMAC4_CHCFG_n_SEL_SHIFT,
-                            DMAC4_CHCFG_n_SEL);
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            1,
-                            DMAC4_CHCFG_n_HIEN_SHIFT,
-                            DMAC4_CHCFG_n_HIEN);
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            0,
-                            DMAC4_CHCFG_n_LOEN_SHIFT,
-                            DMAC4_CHCFG_n_LOEN);
-
-        /* ---- Set factor by specified on-chip peripheral module request ---- */
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
-                            DMAC4_CHCFG_n_AM_SHIFT,
-                            DMAC4_CHCFG_n_AM);
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
-                            DMAC4_CHCFG_n_LVL_SHIFT,
-                            DMAC4_CHCFG_n_LVL);
-        if (usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
-        {
-            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                                usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
-                                DMAC4_CHCFG_n_REQD_SHIFT,
-                                DMAC4_CHCFG_n_REQD);
-        }
-        else
-        {
-            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                                req_direction,
-                                DMAC4_CHCFG_n_REQD_SHIFT,
-                                DMAC4_CHCFG_n_REQD);
-        }
-        RZA_IO_RegWrite_32(&DMAC45.DMARS,
-                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
-                            DMAC45_DMARS_CH4_RID_SHIFT,
-                            DMAC45_DMARS_CH4_RID);
-        RZA_IO_RegWrite_32(&DMAC45.DMARS,
-                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
-                            DMAC45_DMARS_CH4_MID_SHIFT,
-                            DMAC45_DMARS_CH4_MID);
-
-        /* PR : Round robin mode */
-        RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
-                            1,
-                            DMAC07_DCTRL_0_7_PR_SHIFT,
-                            DMAC07_DCTRL_0_7_PR);
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_DMAC4_Open
-* Description  : Enables DMAC channel 4 transfer.
-* Arguments    : uint32_t req : DMAC request mode
-* Return Value :  0 : Succeeded in enabling DMA transfer
-*              : -1 : Failed to enable DMA transfer (due to DMA operation)
-*******************************************************************************/
-int32_t usb1_function_DMAC4_Open (uint32_t req)
-{
-    int32_t ret;
-    volatile uint8_t  dummy;
-
-    /* Transferable? */
-    if ((0 == RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
-                                DMAC4_CHSTAT_n_EN_SHIFT,
-                                DMAC4_CHSTAT_n_EN)) &&
-        (0 == RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
-                                DMAC4_CHSTAT_n_TACT_SHIFT,
-                                DMAC4_CHSTAT_n_TACT)))
-    {
-        /* Clear Channel Status Register */
-        RZA_IO_RegWrite_32(&DMAC4.CHCTRL_n,
-                            1,
-                            DMAC4_CHCTRL_n_SWRST_SHIFT,
-                            DMAC4_CHCTRL_n_SWRST);
-        dummy = RZA_IO_RegRead_32(&DMAC4.CHCTRL_n,
-                                DMAC4_CHCTRL_n_SWRST_SHIFT,
-                                DMAC4_CHCTRL_n_SWRST);
-        /* Enable DMA transfer */
-        RZA_IO_RegWrite_32(&DMAC4.CHCTRL_n,
-                            1,
-                            DMAC4_CHCTRL_n_SETEN_SHIFT,
-                            DMAC4_CHCTRL_n_SETEN);
-
-        /* ---- Request by software ---- */
-        if (DMAC_REQ_MODE_SOFT == req)
-        {
-            /* DMA transfer Request by software */
-            RZA_IO_RegWrite_32(&DMAC4.CHCTRL_n,
-                                1,
-                                DMAC4_CHCTRL_n_STG_SHIFT,
-                                DMAC4_CHCTRL_n_STG);
-        }
-
-        ret = 0;
-    }
-    else
-    {
-        ret = -1;
-    }
-
-    return ret;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_DMAC4_Close
-* Description  : Aborts DMAC channel 4 transfer. Returns the remaining transfer
-*              : byte count at the time of DMA transfer abort to the argument
-*              : *remain.
-* Arguments    : uint32_t * remain : Remaining transfer byte count when
-*              :                   : DMA transfer is aborted
-* Return Value : none
-*******************************************************************************/
-void usb1_function_DMAC4_Close (uint32_t * remain)
-{
-
-    /* ==== Abort transfer ==== */
-    RZA_IO_RegWrite_32(&DMAC4.CHCTRL_n,
-                        1,
-                        DMAC4_CHCTRL_n_CLREN_SHIFT,
-                        DMAC4_CHCTRL_n_CLREN);
-
-    while (1 == RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
-                                DMAC4_CHSTAT_n_TACT_SHIFT,
-                                DMAC4_CHSTAT_n_TACT))
-    {
-        /* Loop until transfer is aborted */
-    }
-
-    while (1 == RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
-                                DMAC4_CHSTAT_n_EN_SHIFT,
-                                DMAC4_CHSTAT_n_EN))
-    {
-        /* Loop until 0 is set in EN before checking the remaining transfer byte count */
-    }
-    /* ==== Obtain remaining transfer byte count ==== */
-    *remain = DMAC4.CRTB_n;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_DMAC4_Load_Set
-* Description  : Sets the transfer source address, transfer destination
-*              : address, and total transfer byte count respectively
-*              : specified by the argument src_addr, dst_addr, and count to
-*              : DMAC channel 4 as DMA transfer information.
-*              : Sets the register set selected by the CHCFG_n register
-*              : RSEL bit from the Next0 or Next1 register set.
-*              : This function should be called when DMA transfer of DMAC
-*              : channel 4 is aboted.
-* Arguments    : uint32_t src_addr : Transfer source address
-*              : uint32_t dst_addr : Transfer destination address
-*              : uint32_t count    : Total transfer byte count
-* Return Value : none
-*******************************************************************************/
-void usb1_function_DMAC4_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
-{
-    uint8_t reg_set;
-
-    /* Obtain register set in use */
-    reg_set = RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
-                                DMAC4_CHSTAT_n_SR_SHIFT,
-                                DMAC4_CHSTAT_n_SR);
-
-    /* ==== Load ==== */
-    if (0 == reg_set)
-    {
-        /* ---- Next0 Register Set ---- */
-        DMAC4.N0SA_n = src_addr;    /* Start address of transfer source      */
-        DMAC4.N0DA_n = dst_addr;    /* Start address of transfer destination */
-        DMAC4.N0TB_n = count;       /* Total transfer byte count             */
-    }
-    else
-    {
-        /* ---- Next1 Register Set ---- */
-        DMAC4.N1SA_n = src_addr;    /* Start address of transfer source      */
-        DMAC4.N1DA_n = dst_addr;    /* Start address of transfer destination */
-        DMAC4.N1TB_n = count;       /* Total transfer byte count             */
-     }
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/userdef/usb1_function_userdef.c
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/userdef/usb1_function_userdef.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,762 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_userdef.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include <stdio.h>
-#include "r_typedefs.h"
-#include "iodefine.h"
-#include "devdrv_usb_function_api.h"
-#include "usb1_function_dmacdrv.h"  /* common DMAC driver for USB */
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-#define DUMMY_ACCESS OSTM0CNT
-
-/* #define CACHE_WRITEBACK */
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-extern int32_t io_cwb(unsigned long start, unsigned long end);
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-static void usb1_function_enable_dmac0(uint32_t src, uint32_t dst, uint32_t count,
-                                       uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
-static void usb1_function_enable_dmac1(uint32_t src, uint32_t dst, uint32_t count,
-                                       uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
-static void Userdef_USB_usb1_function_delay_10us_2(void);
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_d0fifo_dmaintid
-* Description  : get D0FIFO DMA Interrupt ID
-* Arguments    : none
-* Return Value : D0FIFO DMA Interrupt ID
-*******************************************************************************/
-IRQn_Type Userdef_USB_usb1_function_d0fifo_dmaintid (void)
-{
-#if 0
-    return DMAINT1_IRQn;
-#else
-    return 0xFFFF;
-#endif
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_d1fifo_dmaintid
-* Description  : get D1FIFO DMA Interrupt ID
-* Arguments    : none
-* Return Value : D1FIFO DMA Interrupt ID
-*******************************************************************************/
-IRQn_Type Userdef_USB_usb1_function_d1fifo_dmaintid (void)
-{
-#if 0
-    return DMAINT1_IRQn;
-#else
-    return 0xFFFF;
-#endif
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_attach
-* Description  : Wait for the software of 1ms.
-*              : Alter this function according to the user's system.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb1_function_attach (void)
-{
-    printf("\n");
-    printf("channel 1 attach device\n");
-    printf("\n");
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_detach
-* Description  : Wait for the software of 1ms.
-*              : Alter this function according to the user's system.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb1_function_detach (void)
-{
-    printf("\n");
-    printf("channel 1 detach device\n");
-    printf("\n");
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_delay_1ms
-* Description  : Wait for the software of 1ms.
-*              : Alter this function according to the user's system.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb1_function_delay_1ms (void)
-{
-    volatile int i;
-    volatile unsigned long tmp;
-
-    /*
-     * Wait 1ms (Please change for your MCU).
-     */
-    for (i = 0; i < 1440; ++i)
-    {
-        tmp = DUMMY_ACCESS;
-    }
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_delay_xms
-* Description  : Wait for the software in the period of time specified by the
-*              : argument.
-*              : Alter this function according to the user's system.
-* Arguments    : uint32_t msec ; Wait Time (msec)
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb1_function_delay_xms (uint32_t msec)
-{
-    volatile unsigned short i;
-
-    for (i = 0; i < msec; ++i)
-    {
-        Userdef_USB_usb1_function_delay_1ms();
-    }
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_delay_10us
-* Description  : Waits for software for the period specified by the argument.
-*              : Alter this function according to the user's system.
-* Arguments    : uint32_t usec ; Wait Time(x 10usec)
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb1_function_delay_10us (uint32_t usec)
-{
-    volatile int i;
-
-    /* Wait 10us (Please change for your MCU) */
-    for (i = 0; i < usec; ++i)
-    {
-        Userdef_USB_usb1_function_delay_10us_2();
-    }
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_delay_10us_2
-* Description  : Waits for software for the period specified by the argument.
-*              : Alter this function according to the user's system.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-static void Userdef_USB_usb1_function_delay_10us_2 (void)
-{
-    volatile int i;
-    volatile unsigned long tmp;
-
-    /* Wait 1us (Please change for your MCU) */
-    for (i = 0; i < 14; ++i)
-    {
-        tmp = DUMMY_ACCESS;
-    }
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_delay_500ns
-* Description  : Wait for software for 500ns.
-*              : Alter this function according to the user's system.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb1_function_delay_500ns (void)
-{
-    volatile int i;
-    volatile unsigned long tmp;
-
-    /* Wait 500ns (Please change for your MCU) */
-    /* Wait 500ns I clock 266MHz */
-    tmp = DUMMY_ACCESS;
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_start_dma
-* Description  : Enables DMA transfer on the information specified by the argument.
-*              : Set DMAC register by this function to enable DMA transfer.
-*              : After executing this function, USB module is set to start DMA
-*              : transfer. DMA transfer should not wait for DMA transfer complete.
-* Arguments    : USB_FUNCTION_DMA_t *dma   : DMA parameter
-*              :  typedef struct{
-*              :      uint32_t fifo;    FIFO for using
-*              :      uint32_t buffer;  Start address of transfer source/destination
-*              :      uint32_t bytes;   Transfer size(Byte)
-*              :      uint32_t dir;     Transfer direction(0:Buffer->FIFO, 1:FIFO->Buffer)
-*              :      uint32_t size;    DMA transfer size
-*              :   } USB_FUNCTION_DMA_t;
-*              : uint16_t dfacc ; 0 : cycle steal mode
-*              :                  1 : 16byte continuous mode
-*              :                  2 : 32byte continuous mode
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb1_function_start_dma (USB_FUNCTION_DMA_t * dma, uint16_t dfacc)
-{
-    uint32_t trncount;
-    uint32_t src;
-    uint32_t dst;
-    uint32_t size;
-    uint32_t dir;
-#ifdef CACHE_WRITEBACK
-    uint32_t ptr;
-#endif
-
-    trncount = dma->bytes;
-    dir      = dma->dir;
-
-    if (dir == USB_FUNCTION_FIFO2BUF)
-    {
-        /* DxFIFO determination */
-        dst = dma->buffer;
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-        if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-        {
-            src = (uint32_t)(&USB201.D0FIFO.UINT32);
-        }
-        else
-        {
-            src = (uint32_t)(&USB201.D1FIFO.UINT32);
-        }
-        size = dma->size;
-
-        if (size == 0)
-        {
-            src += 3;       /* byte access  */
-        }
-        else if (size == 1)
-        {
-            src += 2;       /* short access */
-        }
-        else
-        {
-            /* Do Nothing */
-        }
-#else
-        size = dma->size;
-
-        if (size == 2)
-        {
-            /* 32bit access */
-            if (dfacc == 2)
-            {
-                /* 32byte access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    src = (uint32_t)(&USB201.D0FIFOB0);
-                }
-                else
-                {
-                    src = (uint32_t)(&USB201.D1FIFOB0);
-                }
-            }
-            else if (dfacc == 1)
-            {
-                /* 16byte access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    src = (uint32_t)(&USB201.D0FIFOB0);
-                }
-                else
-                {
-                    src = (uint32_t)(&USB201.D1FIFOB0);
-                }
-            }
-            else
-            {
-                /* normal access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    src = (uint32_t)(&USB201.D0FIFO.UINT32);
-                }
-                else
-                {
-                    src = (uint32_t)(&USB201.D1FIFO.UINT32);
-                }
-            }
-        }
-        else if (size == 1)
-        {
-            /* 16bit access */
-            dfacc = 0;      /* force normal access */
-
-            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-            {
-                src = (uint32_t)(&USB201.D0FIFO.UINT32);
-            }
-            else
-            {
-                src = (uint32_t)(&USB201.D1FIFO.UINT32);
-            }
-            src += 2;       /* short access */
-        }
-        else
-        {
-            /* 8bit access */
-            dfacc = 0;      /* force normal access */
-
-            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-            {
-                src = (uint32_t)(&USB201.D0FIFO.UINT32);
-            }
-            else
-            {
-                src = (uint32_t)(&USB201.D1FIFO.UINT32);
-            }
-            src += 3;       /* byte access */
-        }
-#endif
-    }
-    else
-    {
-        /* DxFIFO determination */
-        src = dma->buffer;
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-        if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-        {
-            dst = (uint32_t)(&USB201.D0FIFO.UINT32);
-        }
-        else
-        {
-            dst = (uint32_t)(&USB201.D1FIFO.UINT32);
-        }
-        size = dma->size;
-
-        if (size == 0)
-        {
-            dst += 3;       /* byte access  */
-        }
-        else if (size == 1)
-        {
-            dst += 2;       /* short access */
-        }
-        else
-        {
-            /* Do Nothing */
-        }
-#else
-        size = dma->size;
-
-        if (size == 2)
-        {
-            /* 32bit access */
-            if (dfacc == 2)
-            {
-                /* 32byte access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    dst = (uint32_t)(&USB201.D0FIFOB0);
-                }
-                else
-                {
-                    dst = (uint32_t)(&USB201.D1FIFOB0);
-                }
-            }
-            else if (dfacc == 1)
-            {
-                /* 16byte access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    dst = (uint32_t)(&USB201.D0FIFOB0);
-                }
-                else
-                {
-                    dst = (uint32_t)(&USB201.D1FIFOB0);
-                }
-            }
-            else
-            {
-                /* normal access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    dst = (uint32_t)(&USB201.D0FIFO.UINT32);
-                }
-                else
-                {
-                    dst = (uint32_t)(&USB201.D1FIFO.UINT32);
-                }
-            }
-        }
-        else if (size == 1)
-        {
-            /* 16bit access */
-            dfacc = 0;      /* force normal access */
-            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-            {
-                dst = (uint32_t)(&USB201.D0FIFO.UINT32);
-            }
-            else
-            {
-                dst = (uint32_t)(&USB201.D1FIFO.UINT32);
-            }
-            dst += 2;       /* short access */
-        }
-        else
-        {
-            /* 8bit access */
-            dfacc = 0;      /* force normal access */
-
-            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-            {
-                dst = (uint32_t)(&USB201.D0FIFO.UINT32);
-            }
-            else
-            {
-                dst = (uint32_t)(&USB201.D1FIFO.UINT32);
-            }
-            dst += 3;       /* byte access  */
-        }
-#endif
-    }
-
-#ifdef CACHE_WRITEBACK
-    ptr = (uint32_t)dma->buffer;
-
-    if ((ptr & 0x20000000ul) == 0)
-    {
-        io_cwb((uint32_t)ptr, (uint32_t)(ptr) + trncount);
-    }
-#endif
-
-    if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-    {
-        usb1_function_enable_dmac0(src, dst, trncount, size, dir, dma->fifo, dfacc);
-    }
-    else
-    {
-        usb1_function_enable_dmac1(src, dst, trncount, size, dir, dma->fifo, dfacc);
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_enable_dmac0
-* Description  : Enables DMA transfer on the information specified by the argument.
-* Arguments    : uint32_t src   : src address
-*              : uint32_t dst   : dst address
-*              : uint32_t count : transfer byte
-*              : uint32_t size  : transfer size
-*              : uint32_t dir   : direction
-*              : uint32_t fifo  : FIFO(D0FIFO or D1FIFO)
-*              : uint16_t dfacc : 0 : normal access
-*              :                : 1 : 16byte access
-*              :                : 2 : 32byte access
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_enable_dmac0 (uint32_t src, uint32_t dst, uint32_t count,
-                                        uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
-{
-    dmac_transinfo_t trans_info;
-    uint32_t         request_factor = 0;
-    int32_t          ret;
-
-    /* ==== Variable setting for DMAC initialization ==== */
-    trans_info.src_addr = (uint32_t)src;                /* Start address of transfer source      */
-    trans_info.dst_addr = (uint32_t)dst;                /* Start address of transfer destination */
-    trans_info.count    = (uint32_t)count;              /* Total byte count to be transferred    */
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-    if (size == 0)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_8;        /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_8;        /* Transfer destination transfer size */
-    }
-    else if (size == 1)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_16;       /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_16;       /* Transfer destination transfer size */
-    }
-    else if (size == 2)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_32;       /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_32;       /* Transfer destination transfer size */
-    }
-    else
-    {
-        printf("size error!!\n");
-    }
-#else
-    if (dfacc == 2)
-    {
-        /* 32byte access */
-        trans_info.src_size = DMAC_TRANS_SIZE_256;      /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_256;      /* Transfer destination transfer size */
-    }
-    else if (dfacc == 1)
-    {
-        /* 16byte access */
-        trans_info.src_size = DMAC_TRANS_SIZE_128;      /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_128;      /* Transfer destination transfer size */
-    }
-    else
-    {
-        /* normal access */
-        if (size == 0)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_8;    /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_8;    /* Transfer destination transfer size */
-        }
-        else if (size == 1)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_16;   /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_16;   /* Transfer destination transfer size */
-        }
-        else if (size == 2)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_32;   /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_32;   /* Transfer destination transfer size */
-        }
-        else
-        {
-            printf("size error!!\n");
-        }
-    }
-#endif
-
-    if (dir == USB_FUNCTION_FIFO2BUF)
-    {
-        request_factor =DMAC_REQ_USB1_DMA0_RX;          /* USB_0 channel 0 receive FIFO full               */
-        trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer source address      */
-        trans_info.daddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer destination address */
-    }
-    else if (dir == USB_FUNCTION_BUF2FIFO)
-    {
-        request_factor =DMAC_REQ_USB1_DMA0_TX;          /* USB_0 channel 0 receive FIFO empty              */
-        trans_info.saddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer source address      */
-        trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer destination address */
-    }
-    else
-    {
-        /* Do Nothing */
-    }
-
-    /* ==== DMAC initialization ==== */
-    usb1_function_DMAC3_PeriReqInit((const dmac_transinfo_t *)&trans_info,
-                                    DMAC_MODE_REGISTER,
-                                    DMAC_SAMPLE_SINGLE,
-                                    request_factor,
-                                    0);     /* Don't care DMAC_REQ_REQD is setting in
-                                            usb1_function_DMAC3_PeriReqInit() */
-
-    /* ==== DMAC startup ==== */
-    ret = usb1_function_DMAC3_Open(DMAC_REQ_MODE_PERI);
-    if (ret != 0)
-    {
-        printf("DMAC3 Open error!!\n");
-    }
-
-    return;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_enable_dmac1
-* Description  : Enables DMA transfer on the information specified by the argument.
-* Arguments    : uint32_t src   : src address
-*              : uint32_t dst   : dst address
-*              : uint32_t count : transfer byte
-*              : uint32_t size  : transfer size
-*              : uint32_t dir   : direction
-*              : uint32_t fifo  : FIFO(D0FIFO or D1FIFO)
-*              : uint16_t dfacc : 0 : normal access
-*              :                : 1 : 16byte access
-*              :                : 2 : 32byte access
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_enable_dmac1 (uint32_t src, uint32_t dst, uint32_t count,
-                                        uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
-{
-    dmac_transinfo_t trans_info;
-    uint32_t         request_factor = 0;
-    int32_t          ret;
-
-    /* ==== Variable setting for DMAC initialization ==== */
-    trans_info.src_addr = (uint32_t)src;                /* Start address of transfer source      */
-    trans_info.dst_addr = (uint32_t)dst;                /* Start address of transfer destination */
-    trans_info.count    = (uint32_t)count;              /* Total byte count to be transferred    */
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-    if (size == 0)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_8;        /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_8;        /* Transfer destination transfer size */
-    }
-    else if (size == 1)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_16;       /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_16;       /* Transfer destination transfer size */
-    }
-    else if (size == 2)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_32;       /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_32;       /* Transfer destination transfer size */
-    }
-    else
-    {
-        printf("size error!!\n");
-    }
-#else
-    if (dfacc == 2)
-    {
-        /* 32byte access */
-        trans_info.src_size = DMAC_TRANS_SIZE_256;      /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_256;      /* Transfer destination transfer size */
-    }
-    else if (dfacc == 1)
-    {
-        /* 16byte access */
-        trans_info.src_size = DMAC_TRANS_SIZE_128;      /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_128;      /* Transfer destination transfer size */
-    }
-    else
-    {
-        /* normal access */
-        if (size == 0)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_8;    /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_8;    /* Transfer destination transfer size */
-        }
-        else if (size == 1)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_16;   /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_16;   /* Transfer destination transfer size */
-        }
-        else if (size == 2)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_32;   /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_32;   /* Transfer destination transfer size */
-        }
-        else
-        {
-            printf("size error!!\n");
-        }
-    }
-#endif
-
-    if (dir == USB_FUNCTION_FIFO2BUF)
-    {
-        request_factor =DMAC_REQ_USB1_DMA1_RX;          /* USB_0 channel 0 receive FIFO full               */
-        trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer source address      */
-        trans_info.daddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer destination address */
-    }
-    else if (dir == USB_FUNCTION_BUF2FIFO)
-    {
-        request_factor =DMAC_REQ_USB1_DMA1_TX;          /* USB_0 channel 0 receive FIFO empty              */
-        trans_info.saddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer source address      */
-        trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer destination address */
-    }
-    else
-    {
-        /* Do Nothing */
-    }
-
-    /* ==== DMAC initialization ==== */
-    usb1_function_DMAC4_PeriReqInit((const dmac_transinfo_t *)&trans_info,
-                                    DMAC_MODE_REGISTER,
-                                    DMAC_SAMPLE_SINGLE,
-                                    request_factor,
-                                    0);     /* Don't care DMAC_REQ_REQD is setting in
-                                            usb1_function_DMAC4_PeriReqInit() */
-
-    /* ==== DMAC startup ==== */
-    ret = usb1_function_DMAC4_Open(DMAC_REQ_MODE_PERI);
-    if (ret != 0)
-    {
-        printf("DMAC4 Open error!!\n");
-    }
-
-    return;
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_stop_dma0
-* Description  : Disables DMA transfer.
-*              : This function should be executed to DMAC executed at the time
-*              : of specification of D0_FIF0_DMA in dma->fifo.
-* Arguments    : none
-* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
-*              : regarding to the bus width.
-*******************************************************************************/
-uint32_t Userdef_USB_usb1_function_stop_dma0 (void)
-{
-    uint32_t remain;
-
-    /* ==== DMAC release ==== */
-    usb1_function_DMAC3_Close(&remain);
-
-    return remain;
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_stop_dma1
-* Description  : Disables DMA transfer.
-*              : This function should be executed to DMAC executed at the time
-*              : of specification of D1_FIF0_DMA in dma->fifo.
-* Arguments    : none
-* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
-*              : regarding to the bus width.
-*******************************************************************************/
-uint32_t Userdef_USB_usb1_function_stop_dma1 (void)
-{
-    uint32_t remain;
-
-    /* ==== DMAC release ==== */
-    usb1_function_DMAC4_Close(&remain);
-
-    return remain;
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb_function_setting.h
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb_function_setting.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,173 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2014 - 2015 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-
-#ifndef USB_FUNCTION_SETTING_H
-#define USB_FUNCTION_SETTING_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define USB_FUNCTION_CH                       0
-#define USB_FUNCTION_HISPEED                  1
-
-#if (USB_FUNCTION_CH == 0)
-#include "usb0_function.h"
-#define USB20X                                USB200
-#define USBIX_IRQn                            USBI0_IRQn
-#define g_usbx_function_bit_set               g_usb0_function_bit_set
-#define g_usbx_function_PipeDataSize          g_usb0_function_PipeDataSize
-#define g_usbx_function_data_count            g_usb0_function_data_count
-#define g_usbx_function_PipeTbl               g_usb0_function_PipeTbl
-#define g_usbx_function_DmaStatus             g_usb0_function_DmaStatus
-#define g_usbx_function_pipecfg               g_usb0_function_pipecfg
-#define g_usbx_function_pipe_status           g_usb0_function_pipe_status
-#define g_usbx_function_data_pointer          g_usb0_function_data_pointer
-#define g_usbx_function_pipebuf               g_usb0_function_pipebuf
-#define g_usbx_function_pipemaxp              g_usb0_function_pipemaxp
-#define g_usbx_function_pipeperi              g_usb0_function_pipeperi
-#define g_usbx_function_TestModeFlag          g_usb0_function_TestModeFlag
-#define usbx_function_BRDYInterruptPIPE0      usb0_function_BRDYInterruptPIPE0
-#define usbx_function_BRDYInterrupt           usb0_function_BRDYInterrupt
-#define usbx_function_NRDYInterruptPIPE0      usb0_function_NRDYInterruptPIPE0
-#define usbx_function_NRDYInterrupt           usb0_function_NRDYInterrupt
-#define usbx_function_BEMPInterruptPIPE0      usb0_function_BEMPInterruptPIPE0
-#define usbx_function_BEMPInterrupt           usb0_function_BEMPInterrupt
-#define usbx_function_read_buffer_c           usb0_function_read_buffer_c
-#define usbx_function_set_pid_buf             usb0_function_set_pid_buf
-#define usbx_function_disable_brdy_int        usb0_function_disable_brdy_int
-#define usbx_function_set_pid_stall           usb0_function_set_pid_stall
-#define usbx_function_dma_interrupt_d0fifo    usb0_function_dma_interrupt_d0fifo
-#define usbx_function_read_dma                usb0_function_read_dma
-#define usbx_function_dma_interrupt_d1fifo    usb0_function_dma_interrupt_d1fifo
-#define usbx_function_write_buffer            usb0_function_write_buffer
-#define usbx_function_set_pid_nak             usb0_function_set_pid_nak
-#define usbx_function_get_mbw                 usb0_function_get_mbw
-#define usbx_function_set_curpipe             usb0_function_set_curpipe
-#define usbx_function_aclrm                   usb0_function_aclrm
-#define usbx_function_enable_nrdy_int         usb0_function_enable_nrdy_int
-#define usbx_function_enable_brdy_int         usb0_function_enable_brdy_int
-#define usbx_function_get_pid                 usb0_function_get_pid
-#define usbx_function_get_inbuf               usb0_function_get_inbuf
-#define usbx_function_disable_bemp_int        usb0_function_disable_bemp_int
-#define usbx_function_EpToPipe                usb0_function_EpToPipe
-#define usbx_function_clear_pipe_tbl          usb0_function_clear_pipe_tbl
-#define Userdef_USB_usbx_function_d0fifo_dmaintid Userdef_USB_usb0_function_d0fifo_dmaintid
-#define Userdef_USB_usbx_function_d1fifo_dmaintid Userdef_USB_usb0_function_d1fifo_dmaintid
-#define usbx_function_reset_module            usb0_function_reset_module
-#define usbx_function_init_status             usb0_function_init_status
-#define usbx_function_InitModule              usb0_function_InitModule
-#define usbx_function_clear_alt               usb0_function_clear_alt
-#define usbx_function_set_sqclr               usb0_function_set_sqclr
-#define usbx_api_function_CtrlWriteStart      usb0_api_function_CtrlWriteStart
-#define usbx_api_function_CtrlReadStart       usb0_api_function_CtrlReadStart
-#define usbx_function_write_buffer_c          usb0_function_write_buffer_c
-#define usbx_api_function_check_pipe_status   usb0_api_function_check_pipe_status
-#define usbx_api_function_set_pid_nak         usb0_api_function_set_pid_nak
-#define usbx_api_function_clear_pipe_status   usb0_api_function_clear_pipe_status
-#define usbx_api_function_start_receive_transfer usb0_api_function_start_receive_transfer
-#define usbx_function_read_buffer             usb0_function_read_buffer
-#define usbx_api_function_start_send_transfer usb0_api_function_start_send_transfer
-#define usbx_function_stop_transfer           usb0_function_stop_transfer
-#define usbx_function_clear_pid_stall         usb0_function_clear_pid_stall
-#define usbx_function_CheckVBUStaus           usb0_function_CheckVBUStaus
-#define usbx_function_USB_FUNCTION_Attach     usb0_function_USB_FUNCTION_Attach
-#define usbx_function_USB_FUNCTION_Detach     usb0_function_USB_FUNCTION_Detach
-#define usbx_function_is_hispeed              usb0_function_is_hispeed
-#define usbx_function_ResetDescriptor         usb0_function_ResetDescriptor
-#define usbx_function_USB_FUNCTION_Suspend    usb0_function_USB_FUNCTION_Suspend
-#define usbx_function_USB_FUNCTION_TestMode   usb0_function_USB_FUNCTION_TestMode
-#else
-#include "usb1_function.h"
-#define USB20X                                USB201
-#define USBIX_IRQn                            USBI1_IRQn
-#define g_usbx_function_bit_set               g_usb1_function_bit_set
-#define g_usbx_function_PipeDataSize          g_usb1_function_PipeDataSize
-#define g_usbx_function_data_count            g_usb1_function_data_count
-#define g_usbx_function_PipeTbl               g_usb1_function_PipeTbl
-#define g_usbx_function_DmaStatus             g_usb1_function_DmaStatus
-#define g_usbx_function_pipecfg               g_usb1_function_pipecfg
-#define g_usbx_function_pipe_status           g_usb1_function_pipe_status
-#define g_usbx_function_data_pointer          g_usb1_function_data_pointer
-#define g_usbx_function_pipebuf               g_usb1_function_pipebuf
-#define g_usbx_function_pipemaxp              g_usb1_function_pipemaxp
-#define g_usbx_function_pipeperi              g_usb1_function_pipeperi
-#define g_usbx_function_TestModeFlag          g_usb1_function_TestModeFlag
-#define usbx_function_BRDYInterruptPIPE0      usb1_function_BRDYInterruptPIPE0
-#define usbx_function_BRDYInterrupt           usb1_function_BRDYInterrupt
-#define usbx_function_NRDYInterruptPIPE0      usb1_function_NRDYInterruptPIPE0
-#define usbx_function_NRDYInterrupt           usb1_function_NRDYInterrupt
-#define usbx_function_BEMPInterruptPIPE0      usb1_function_BEMPInterruptPIPE0
-#define usbx_function_BEMPInterrupt           usb1_function_BEMPInterrupt
-#define usbx_function_read_buffer_c           usb1_function_read_buffer_c
-#define usbx_function_set_pid_buf             usb1_function_set_pid_buf
-#define usbx_function_disable_brdy_int        usb1_function_disable_brdy_int
-#define usbx_function_set_pid_stall           usb1_function_set_pid_stall
-#define usbx_function_dma_interrupt_d0fifo    usb1_function_dma_interrupt_d0fifo
-#define usbx_function_read_dma                usb1_function_read_dma
-#define usbx_function_dma_interrupt_d1fifo    usb1_function_dma_interrupt_d1fifo
-#define usbx_function_write_buffer            usb1_function_write_buffer
-#define usbx_function_set_pid_nak             usb1_function_set_pid_nak
-#define usbx_function_get_mbw                 usb1_function_get_mbw
-#define usbx_function_set_curpipe             usb1_function_set_curpipe
-#define usbx_function_aclrm                   usb1_function_aclrm
-#define usbx_function_enable_nrdy_int         usb1_function_enable_nrdy_int
-#define usbx_function_enable_brdy_int         usb1_function_enable_brdy_int
-#define usbx_function_get_pid                 usb1_function_get_pid
-#define usbx_function_get_inbuf               usb1_function_get_inbuf
-#define usbx_function_disable_bemp_int        usb1_function_disable_bemp_int
-#define usbx_function_EpToPipe                usb1_function_EpToPipe
-#define usbx_function_clear_pipe_tbl          usb1_function_clear_pipe_tbl
-#define Userdef_USB_usbx_function_d0fifo_dmaintid Userdef_USB_usb1_function_d0fifo_dmaintid
-#define Userdef_USB_usbx_function_d1fifo_dmaintid Userdef_USB_usb1_function_d1fifo_dmaintid
-#define usbx_function_reset_module            usb1_function_reset_module
-#define usbx_function_init_status             usb1_function_init_status
-#define usbx_function_InitModule              usb1_function_InitModule
-#define usbx_function_clear_alt               usb1_function_clear_alt
-#define usbx_function_set_sqclr               usb1_function_set_sqclr
-#define usbx_api_function_CtrlWriteStart      usb1_api_function_CtrlWriteStart
-#define usbx_api_function_CtrlReadStart       usb1_api_function_CtrlReadStart
-#define usbx_function_write_buffer_c          usb1_function_write_buffer_c
-#define usbx_api_function_check_pipe_status   usb1_api_function_check_pipe_status
-#define usbx_api_function_set_pid_nak         usb1_api_function_set_pid_nak
-#define usbx_api_function_clear_pipe_status   usb1_api_function_clear_pipe_status
-#define usbx_api_function_start_receive_transfer usb1_api_function_start_receive_transfer
-#define usbx_function_read_buffer             usb1_function_read_buffer
-#define usbx_api_function_start_send_transfer usb1_api_function_start_send_transfer
-#define usbx_function_stop_transfer           usb1_function_stop_transfer
-#define usbx_function_clear_pid_stall         usb1_function_clear_pid_stall
-#define usbx_function_CheckVBUStaus           usb1_function_CheckVBUStaus
-#define usbx_function_USB_FUNCTION_Attach     usb1_function_USB_FUNCTION_Attach
-#define usbx_function_USB_FUNCTION_Detach     usb1_function_USB_FUNCTION_Detach
-#define usbx_function_is_hispeed              usb1_function_is_hispeed
-#define usbx_function_ResetDescriptor         usb1_function_ResetDescriptor
-#define usbx_function_USB_FUNCTION_Suspend    usb1_function_USB_FUNCTION_Suspend
-#define usbx_function_USB_FUNCTION_TestMode   usb1_function_USB_FUNCTION_TestMode
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  /* USB_FUNCTION_SETTING_H */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/inc/devdrv_usb_function_api.h
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/inc/devdrv_usb_function_api.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,365 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : devdrv_usb_function_api.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description  : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-#ifndef USB_FUNCTION_API_H
-#define USB_FUNCTION_API_H
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include <VKRZA1H.h>
-#include "r_typedefs.h"
-#include "usb0_function_api.h"
-#include "usb1_function_api.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-typedef struct
-{
-    uint32_t fifo;
-    uint32_t buffer;
-    uint32_t bytes;
-    uint32_t dir;
-    uint32_t size;
-} USB_FUNCTION_DMA_t;
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-#define USBFCLOCK_X1_48MHZ                          (0x0000u)       /* USB_X1_48MHz */
-#define USBFCLOCK_EXTAL_12MHZ                       (0x0004u)       /* EXTAL_12MHz  */
-
-#define DEVDRV_USBF_ON                              (1)
-#define DEVDRV_USBF_OFF                             (0)
-#define DEVDRV_USBF_YES                             (1)
-#define DEVDRV_USBF_NO                              (0)
-
-#define DEVDRV_USBF_STALL                           (-2)
-
-#define DEVDRV_USBF_WRITEEND                        (0)
-#define DEVDRV_USBF_WRITESHRT                       (1)
-#define DEVDRV_USBF_WRITING                         (2)
-#define DEVDRV_USBF_WRITEDMA                        (3)
-
-#define DEVDRV_USBF_FIFOERROR                       (0xffff)
-
-#define DEVDRV_USBF_PIPE_IDLE                       (0x00)
-#define DEVDRV_USBF_PIPE_WAIT                       (0x01)
-#define DEVDRV_USBF_PIPE_DONE                       (0x02)
-#define DEVDRV_USBF_PIPE_NORES                      (0x03)
-#define DEVDRV_USBF_PIPE_STALL                      (0x04)
-
-#define DEVDRV_USBF_PID_NAK                         (0x0000u)
-#define DEVDRV_USBF_PID_BUF                         (0x0001u)
-#define DEVDRV_USBF_PID_STALL                       (0x0002u)
-#define DEVDRV_USBF_PID_STALL2                      (0x0003u)
-
-#define USB_FUNCTION_NON_SPEED                      (0)
-#define USB_FUNCTION_LOW_SPEED                      (1)
-#define USB_FUNCTION_FULL_SPEED                     (2)
-#define USB_FUNCTION_HIGH_SPEED                     (3)
-
-#define USB_FUNCTION_READEND                        (0)
-#define USB_FUNCTION_READSHRT                       (1)
-#define USB_FUNCTION_READING                        (2)
-#define USB_FUNCTION_READOVER                       (3)
-#define USB_FUNCTION_READZERO                       (4)
-
-#define USB_FUNCTION_MAX_PIPE_NO                    (15u)
-#define USB_FUNCTION_PIPE0                          (0)
-#define USB_FUNCTION_PIPE1                          (1)
-#define USB_FUNCTION_PIPE2                          (2)
-#define USB_FUNCTION_PIPE3                          (3)
-#define USB_FUNCTION_PIPE4                          (4)
-#define USB_FUNCTION_PIPE5                          (5)
-#define USB_FUNCTION_PIPE6                          (6)
-#define USB_FUNCTION_PIPE7                          (7)
-#define USB_FUNCTION_PIPE8                          (8)
-#define USB_FUNCTION_PIPE9                          (9)
-#define USB_FUNCTION_PIPEA                          (10)
-#define USB_FUNCTION_PIPEB                          (11)
-#define USB_FUNCTION_PIPEC                          (12)
-#define USB_FUNCTION_PIPED                          (13)
-#define USB_FUNCTION_PIPEE                          (14)
-#define USB_FUNCTION_PIPEF                          (15)
-
-#define USB_FUNCTION_ISO                            (0xc000u)
-#define USB_FUNCTION_INTERRUPT                      (0x8000u)
-#define USB_FUNCTION_BULK                           (0x4000u)
-
-#define USB_FUNCTION_NONE                           (0x0000u)
-#define USB_FUNCTON_BFREFIELD                       (0x0400u)
-#define USB_FUNCTION_BFREON                         (0x0400u)
-#define USB_FUNCTION_BFREOFF                        (0x0000u)
-#define USB_FUNCTION_DBLBFIELD                      (0x0200u)
-#define USB_FUNCTION_DBLBON                         (0x0200u)
-#define USB_FUNCTION_DBLBOFF                        (0x0000u)
-#define USB_FUNCTION_CNTMDFIELD                     (0x0100u)
-#define USB_FUNCTION_CNTMDON                        (0x0100u)
-#define USB_FUNCTION_CNTMDOFF                       (0x0000u)
-#define USB_FUNCTION_SHTNAKON                       (0x0080u)
-#define USB_FUNCTION_SHTNAKOFF                      (0x0000u)
-#define USB_FUNCTION_DIRFIELD                       (0x0010u)
-#define USB_FUNCTION_DIR_P_OUT                      (0x0000u)
-#define USB_FUNCTION_DIR_P_IN                       (0x0010u)
-#define USB_FUNCTION_EPNUMFIELD                     (0x000fu)
-#define USB_FUNCTION_MAX_EP_NO                      (15u)
-#define USB_FUNCTION_EP0                            (0u)
-#define USB_FUNCTION_EP1                            (1u)
-#define USB_FUNCTION_EP2                            (2u)
-#define USB_FUNCTION_EP3                            (3u)
-#define USB_FUNCTION_EP4                            (4u)
-#define USB_FUNCTION_EP5                            (5u)
-#define USB_FUNCTION_EP6                            (6u)
-#define USB_FUNCTION_EP7                            (7u)
-#define USB_FUNCTION_EP8                            (8u)
-#define USB_FUNCTION_EP9                            (9u)
-#define USB_FUNCTION_EP10                           (10u)
-#define USB_FUNCTION_EP11                           (11u)
-#define USB_FUNCTION_EP12                           (12u)
-#define USB_FUNCTION_EP13                           (13u)
-#define USB_FUNCTION_EP14                           (14u)
-#define USB_FUNCTION_EP15                           (15u)
-
-#define USB_FUNCTION_EPTABLE_LENGTH                 (5u)
-
-#define USB_FUNCTION_CUSE                           (0)
-#define USB_FUNCTION_D0USE                          (1)
-#define USB_FUNCTION_D0DMA                          (2)
-#define USB_FUNCTION_D1USE                          (3)
-#define USB_FUNCTION_D1DMA                          (4)
-
-#define USB_FUNCTION_CFIFO_USE                      (0x0000)
-#define USB_FUNCTION_D0FIFO_USE                     (0x1000)
-#define USB_FUNCTION_D1FIFO_USE                     (0x2000)
-#define USB_FUNCTION_D0FIFO_DMA                     (0x5000)
-#define USB_FUNCTION_D1FIFO_DMA                     (0x6000)
-
-#define USB_FUNCTION_BUF2FIFO                       (0)
-#define USB_FUNCTION_FIFO2BUF                       (1)
-
-#define USB_FUNCTION_DVST_POWERED                   (0x0001)
-#define USB_FUNCTION_DVST_DEFAULT                   (0x0002)
-#define USB_FUNCTION_DVST_ADDRESS                   (0x0003)
-#define USB_FUNCTION_DVST_CONFIGURED                (0x0004)
-#define USB_FUNCTION_DVST_SUSPEND                   (0x0005)
-#define USB_FUNCTION_DVST_CONFIGURED_SUSPEND        (0x0006)
-
-#define USB_FUNCTION_FUNCTION_TEST_SELECT           (0xff00u)
-#define USB_FUNCTION_FUNCTION_TEST_J                (0x0100u)
-#define USB_FUNCTION_FUNCTION_TEST_K                (0x0200u)
-#define USB_FUNCTION_FUNCTION_TEST_SE0_NAK          (0x0300u)
-#define USB_FUNCTION_FUNCTION_TEST_PACKET           (0x0400u)
-#define USB_FUNCTION_FUNCTION_TEST_FORCE_ENABLE     (0x0500u)
-#define USB_FUNCTION_FUNCTION_TEST_STSelectors      (0x0600u)
-#define USB_FUNCTION_FUNCTION_TEST_Reserved         (0x4000u)
-#define USB_FUNCTION_FUNCTION_TEST_VSTModes         (0xc000u)
-
-#define USB_FUNCTION_DT_TYPE                        (0xff00u)
-#define USB_FUNCTION_DT_INDEX                       (0xff)
-#define USB_FUNCTION_DT_DEVICE                      (0x01)
-#define USB_FUNCTION_DT_CONFIGURATION               (0x02)
-#define USB_FUNCTION_DT_STRING                      (0x03)
-#define USB_FUNCTION_DT_INTERFACE                   (0x04)
-#define USB_FUNCTION_DT_ENDPOINT                    (0x05)
-#define USB_FUNCTION_DT_DEVICE_QUALIFIER            (0x06)
-#define USB_FUNCTION_DT_OTHER_SPEED_CONFIGURATION   (0x07)
-#define USB_FUNCTION_DT_INTERFACE_POWER             (0x08)
-
-#define USB_FUNCTION_CF_RESERVED                    (0x80)
-#define USB_FUNCTION_CF_SELF                        (0x40)
-#define USB_FUNCTION_CF_RWUP                        (0x20)
-#define USB_FUNCTION_CF_NORWUP                      (0x00)
-#define USB_FUNCTION_EP_ERROR                       (0xff)
-
-#define USB_FUNCTION_EP_OUT                         (0x00)
-#define USB_FUNCTION_EP_IN                          (0x80)
-#define USB_FUNCTION_EP_CNTRL                       (0x00)
-#define USB_FUNCTION_EP_ISO                         (0x01)
-#define USB_FUNCTION_EP_BULK                        (0x02)
-#define USB_FUNCTION_EP_INT                         (0x03)
-
-#define USB_FUNCTION_STANDARD_REQUEST               (0x0000u)
-#define USB_FUNCTION_CLASS_REQUEST                  (0x0020u)
-#define USB_FUNCTION_VENDOR_REQUEST                 (0x0040u)
-#define USB_FUNCTION_DEVICE_REQUEST                 (0x0000u)
-#define USB_FUNCTION_INTERFACE_REQUEST              (0x0001u)
-#define USB_FUNCTION_ENDPOINT_REQUEST               (0x0002u)
-
-#define USB_FUNCTION_GETSTATUS_BUSPOWERD            (0x0000u)
-#define USB_FUNCTION_GETSTATUS_SELFPOWERD           (0x0001u)
-#define USB_FUNCTION_GETSTATUS_REMOTEWAKEUP         (0x0002u)
-#define USB_FUNCTION_GETSTATUS_NOTHALT              (0x0000u)
-#define USB_FUNCTION_GETSTATUS_HALT                 (0x0001u)
-
-#define USB_FUNCTION_FEATURE_ENDPOINT_HALT          (0x0000u)
-#define USB_FUNCTION_FEATURE_REMOTE_WAKEUP          (0x0001u)
-#define USB_FUNCTION_FEATURE_TEST_MODE              (0x0002u)
-
-#define USB_FUNCTION_bRequest                       (0xff00u)       /* b15-8:bRequest */
-#define USB_FUNCTION_bmRequestType                  (0x00ffu)       /* b7-0: bmRequestType */
-#define USB_FUNCTION_bmRequestTypeDir               (0x0080u)       /* b7  : Data transfer direction */
-#define USB_FUNCTION_bmRequestTypeType              (0x0060u)       /* b6-5: Type */
-#define USB_FUNCTION_bmRequestTypeRecip             (0x001fu)       /* b4-0: Recipient */
-
-
-/*******************************************************************************
-Variable Externs
-*******************************************************************************/
-
-
-/*******************************************************************************
-Functions Prototypes
-*******************************************************************************/
-#if 0
-void     R_USB_api_function_init(uint16_t root, uint8_t int_level, uint16_t mode, uint16_t clockmode);
-uint16_t R_USB_api_function_IsConfigured(uint16_t root);
-uint16_t R_USB_api_function_CtrlReadStart(uint16_t root, uint32_t size, uint8_t *data);
-void     R_USB_api_function_CtrlWriteStart(uint16_t root, uint32_t size, uint8_t *data);
-uint16_t R_USB_api_function_start_send_transfer(uint16_t root, uint16_t pipe, uint32_t size, uint8_t *data);
-uint16_t R_USB_api_function_check_pipe_status(uint16_t root, uint16_t pipe, uint32_t *size);
-void     R_USB_api_function_clear_pipe_status(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_start_receive_transfer(uint16_t root, uint16_t pipe, uint32_t size, uint8_t *data);
-void     R_USB_api_function_set_pid_buf(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_set_pid_nak(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_set_pid_stall(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_clear_pid_stall(uint16_t root, uint16_t pipe);
-uint16_t R_USB_api_function_get_pid(uint16_t root, uint16_t pipe);
-int32_t  R_USB_api_function_check_stall(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_set_sqclr(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_set_sqset(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_set_csclr(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_set_curpipe(uint16_t root, uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
-void     R_USB_api_function_clear_brdy_sts(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_clear_bemp_sts(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_clear_nrdy_sts(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_enable_brdy_int(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_disable_brdy_int(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_enable_bemp_int(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_disable_bemp_int(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_enable_nrdy_int(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_disable_nrdy_int(uint16_t root, uint16_t pipe);
-void     R_USB_api_function_stop_transfer(uint16_t root, uint16_t pipe);
-#endif
-
-#ifdef USB0_FUNCTION_API_H
-void     usb0_function_interrupt(uint32_t int_sense);
-void     usb0_function_dma_interrupt_d0fifo(uint32_t int_sense);
-void     usb0_function_dma_interrupt_d1fifo(uint32_t int_sense);
-
-void     usb0_function_Class0(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Class1(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Class2(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Class3(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Class4(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Class5(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Vendor0(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Vendor1(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Vendor2(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Vendor3(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Vendor4(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Vendor5(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_ResetDescriptor(uint16_t mode);
-
-IRQn_Type Userdef_USB_usb0_function_d0fifo_dmaintid(void);
-IRQn_Type Userdef_USB_usb0_function_d1fifo_dmaintid(void);
-void     Userdef_USB_usb0_function_attach(void);
-void     Userdef_USB_usb0_function_detach(void);
-void     Userdef_USB_usb0_function_delay_1ms(void);
-void     Userdef_USB_usb0_function_delay_xms(uint32_t msec);
-void     Userdef_USB_usb0_function_delay_10us(uint32_t usec);
-void     Userdef_USB_usb0_function_delay_500ns(void);
-void     Userdef_USB_usb0_function_start_dma(USB_FUNCTION_DMA_t *dma, uint16_t dfacc);
-uint32_t Userdef_USB_usb0_function_stop_dma0(void);
-uint32_t Userdef_USB_usb0_function_stop_dma1(void);
-
-void     usb0_function_stop_transfer(uint16_t pipe);
-void     usb0_function_enable_brdy_int(uint16_t pipe);
-void     usb0_function_disable_brdy_int(uint16_t pipe);
-void     usb0_function_enable_bemp_int(uint16_t pipe);
-void     usb0_function_disable_bemp_int(uint16_t pipe);
-void     usb0_function_enable_nrdy_int(uint16_t pipe);
-void     usb0_function_disable_nrdy_int(uint16_t pipe);
-#endif
-
-#ifdef  USB1_FUNCTION_API_H
-void     usb1_function_interrupt(uint32_t int_sense);
-void     usb1_function_dma_interrupt_d0fifo(uint32_t int_sense);
-void     usb1_function_dma_interrupt_d1fifo(uint32_t int_sense);
-
-void     usb1_function_Class0(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Class1(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Class2(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Class3(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Class4(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Class5(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Vendor0(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Vendor1(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Vendor2(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Vendor3(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Vendor4(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Vendor5(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_ResetDescriptor(uint16_t mode);
-
-IRQn_Type Userdef_USB_usb1_function_d0fifo_dmaintid(void);
-IRQn_Type Userdef_USB_usb1_function_d1fifo_dmaintid(void);
-void     Userdef_USB_usb1_function_attach(void);
-void     Userdef_USB_usb1_function_detach(void);
-void     Userdef_USB_usb1_function_delay_1ms(void);
-void     Userdef_USB_usb1_function_delay_xms(uint32_t msec);
-void     Userdef_USB_usb1_function_delay_10us(uint32_t usec);
-void     Userdef_USB_usb1_function_delay_500ns(void);
-void     Userdef_USB_usb1_function_start_dma(USB_FUNCTION_DMA_t *dma, uint16_t dfacc);
-uint32_t Userdef_USB_usb1_function_stop_dma0(void);
-uint32_t Userdef_USB_usb1_function_stop_dma1(void);
-
-void     usb1_function_stop_transfer(uint16_t pipe);
-void     usb1_function_enable_brdy_int(uint16_t pipe);
-void     usb1_function_disable_brdy_int(uint16_t pipe);
-void     usb1_function_enable_bemp_int(uint16_t pipe);
-void     usb1_function_disable_bemp_int(uint16_t pipe);
-void     usb1_function_enable_nrdy_int(uint16_t pipe);
-void     usb1_function_disable_nrdy_int(uint16_t pipe);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* USB_FUNCTION_API_H */
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/inc/usb_function.h
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/inc/usb_function.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,143 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb_function.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description  : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-#ifndef USB_FUNCTION_H
-#define USB_FUNCTION_H
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "r_typedefs.h"
-#include "iodefine.h"
-#include "rza_io_regrw.h"
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-#define USB_FUNCTION_ALT_NO         (255)
-#define USB_FUNCTION_ALT_SET        (0xff)
-
-#define USB_FUNCTION_BITUPLLE       (0x0002u)
-#define USB_FUNCTION_BITUCKSEL      (0x0004u)
-#define USB_FUNCTION_BITBWAIT       (0x003fu)
-
-#define USB_FUNCTION_BUSWAIT_02     (0x0000u)
-#define USB_FUNCTION_BUSWAIT_03     (0x0001u)
-#define USB_FUNCTION_BUSWAIT_04     (0x0002u)
-#define USB_FUNCTION_BUSWAIT_05     (0x0003u)
-#define USB_FUNCTION_BUSWAIT_06     (0x0004u)
-#define USB_FUNCTION_BUSWAIT_07     (0x0005u)
-#define USB_FUNCTION_BUSWAIT_08     (0x0006u)
-#define USB_FUNCTION_BUSWAIT_09     (0x0007u)
-#define USB_FUNCTION_BUSWAIT_10     (0x0008u)
-#define USB_FUNCTION_BUSWAIT_11     (0x0009u)
-#define USB_FUNCTION_BUSWAIT_12     (0x000au)
-#define USB_FUNCTION_BUSWAIT_13     (0x000bu)
-#define USB_FUNCTION_BUSWAIT_14     (0x000cu)
-#define USB_FUNCTION_BUSWAIT_15     (0x000du)
-#define USB_FUNCTION_BUSWAIT_16     (0x000eu)
-#define USB_FUNCTION_BUSWAIT_17     (0x000fu)
-
-#define USB_FUNCTION_BITRESUME      (0x0020u)
-#define USB_FUNCTION_BITUACT        (0x0010u)
-#define USB_FUNCTION_HSPROC         (0x0004u)
-#define USB_FUNCTION_HSMODE         (0x0003u)
-#define USB_FUNCTION_FSMODE         (0x0002u)
-#define USB_FUNCTION_LSMODE         (0x0001u)
-#define USB_FUNCTION_UNDECID        (0x0000u)
-
-#define USB_FUNCTION_BITRCNT        (0x8000u)
-#define USB_FUNCTION_BITDREQE       (0x1000u)
-#define USB_FUNCTION_BITMBW         (0x0c00u)
-#define USB_FUNCTION_BITMBW_8       (0x0000u)
-#define USB_FUNCTION_BITMBW_16      (0x0400u)
-#define USB_FUNCTION_BITMBW_32      (0x0800u)
-#define USB_FUNCTION_BITBYTE_LITTLE (0x0000u)
-#define USB_FUNCTION_BITBYTE_BIG    (0x0100u)
-#define USB_FUNCTION_BITISEL        (0x0020u)
-#define USB_FUNCTION_BITCURPIPE     (0x000fu)
-
-#define USB_FUNCTION_CFIFO_READ     (0x0000u)
-#define USB_FUNCTION_CFIFO_WRITE    (0x0020u)
-
-#define USB_FUNCTION_BITBVAL        (0x8000u)
-#define USB_FUNCTION_BITBCLR        (0x4000u)
-#define USB_FUNCTION_BITFRDY        (0x2000u)
-#define USB_FUNCTION_BITDTLN        (0x0fffu)
-
-#define USB_FUNCTION_BITVBSE        (0x8000u)
-#define USB_FUNCTION_BITRSME        (0x4000u)
-#define USB_FUNCTION_BITSOFE        (0x2000u)
-#define USB_FUNCTION_BITDVSE        (0x1000u)
-#define USB_FUNCTION_BITCTRE        (0x0800u)
-#define USB_FUNCTION_BITVBINT       (0x8000u)
-#define USB_FUNCTION_BITRESM        (0x4000u)
-#define USB_FUNCTION_BITSOFR        (0x2000u)
-#define USB_FUNCTION_BITDVST        (0x1000u)
-#define USB_FUNCTION_BITCTRT        (0x0800u)
-
-#define USB_FUNCTION_BITBEMPE       (0x0400u)
-#define USB_FUNCTION_BITNRDYE       (0x0200u)
-#define USB_FUNCTION_BITBRDYE       (0x0100u)
-#define USB_FUNCTION_BITBEMP        (0x0400u)
-#define USB_FUNCTION_BITNRDY        (0x0200u)
-#define USB_FUNCTION_BITBRDY        (0x0100u)
-
-#define USB_FUNCTION_BITDVSQ        (0x0070u)
-#define USB_FUNCTION_BITDVSQS       (0x0030u)
-#define USB_FUNCTION_DS_SPD_CNFG    (0x0070u)
-#define USB_FUNCTION_DS_SPD_ADDR    (0x0060u)
-#define USB_FUNCTION_DS_SPD_DFLT    (0x0050u)
-#define USB_FUNCTION_DS_SPD_POWR    (0x0040u)
-#define USB_FUNCTION_DS_CNFG        (0x0030u)
-#define USB_FUNCTION_DS_ADDS        (0x0020u)
-#define USB_FUNCTION_DS_DFLT        (0x0010u)
-#define USB_FUNCTION_DS_POWR        (0x0000u)
-#define USB_FUNCTION_BITVALID       (0x0008u)
-#define USB_FUNCTION_BITCTSQ        (0x0007u)
-#define USB_FUNCTION_CS_SQER        (0x0006u)
-#define USB_FUNCTION_CS_WRND        (0x0005u)
-#define USB_FUNCTION_CS_WRSS        (0x0004u)
-#define USB_FUNCTION_CS_WRDS        (0x0003u)
-#define USB_FUNCTION_CS_RDSS        (0x0002u)
-#define USB_FUNCTION_CS_RDDS        (0x0001u)
-#define USB_FUNCTION_CS_IDST        (0x0000u)
-
-#define USB_FUNCTION_PIPExBUF       (64u)
-
-#define USB_FUNCTION_D0FIFO         (0)
-#define USB_FUNCTION_D1FIFO         (1)
-#define USB_FUNCTION_DMA_READY      (0)
-#define USB_FUNCTION_DMA_BUSY       (1)
-#define USB_FUNCTION_DMA_BUSYEND    (2)
-
-#define USB_FUNCTION_FIFO_USE       (0x7000)
-
-#endif /* USB_FUNCTION_FUNCTION_H */
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/inc/usb_function_version.h
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/inc/usb_function_version.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb_function_version.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description  : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-
-#define USB_FUNCTION_LOCAL_Rev  "VER080_140709"
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/inc/usb0_function.h
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/inc/usb0_function.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,171 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description  : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-#ifndef USB0_FUNCTION_H
-#define USB0_FUNCTION_H
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "devdrv_usb_function_api.h"
-#include "usb_function.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-extern const uint16_t       g_usb0_function_bit_set[];
-extern uint32_t             g_usb0_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
-extern uint8_t              *g_usb0_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-extern uint16_t             g_usb0_function_PipeIgnore[];
-extern uint16_t             g_usb0_function_PipeTbl[];
-extern uint16_t             g_usb0_function_pipe_status[];
-extern uint32_t             g_usb0_function_PipeDataSize[];
-
-extern USB_FUNCTION_DMA_t   g_usb0_function_DmaInfo[];
-extern uint16_t             g_usb0_function_DmaPipe[];
-extern uint16_t             g_usb0_function_DmaBval[];
-extern uint16_t             g_usb0_function_DmaStatus[];
-
-extern uint16_t             g_usb0_function_CtrZeroLengthFlag;
-
-extern uint16_t             g_usb0_function_ConfigNum;
-extern uint16_t             g_usb0_function_Alternate[USB_FUNCTION_ALT_NO];
-extern uint16_t             g_usb0_function_RemoteWakeupFlag;
-extern uint16_t             g_usb0_function_TestModeFlag;
-extern uint16_t             g_usb0_function_TestModeSelectors;
-
-extern uint16_t             g_usb0_function_ReqType;
-extern uint16_t             g_usb0_function_ReqTypeType;
-extern uint16_t             g_usb0_function_ReqTypeRecip;
-extern uint16_t             g_usb0_function_ReqRequest;
-extern uint16_t             g_usb0_function_ReqValue;
-extern uint16_t             g_usb0_function_ReqIndex;
-extern uint16_t             g_usb0_function_ReqLength;
-
-extern uint16_t             g_usb0_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
-
-extern uint16_t             g_usb0_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
-extern uint16_t             g_usb0_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
-extern uint16_t             g_usb0_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
-extern uint16_t             g_usb0_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-/* ==== common ==== */
-void     usb0_function_dma_stop_d0(uint16_t pipe, uint32_t remain);
-void     usb0_function_dma_stop_d1(uint16_t pipe, uint32_t remain);
-uint16_t usb0_function_is_hispeed(void);
-uint16_t usb0_function_is_hispeed_enable(void);
-uint16_t usb0_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
-uint16_t usb0_function_write_buffer(uint16_t pipe);
-uint16_t usb0_function_write_buffer_c(uint16_t pipe);
-uint16_t usb0_function_write_buffer_d0(uint16_t pipe);
-uint16_t usb0_function_write_buffer_d1(uint16_t pipe);
-void     usb0_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
-uint16_t usb0_function_read_buffer(uint16_t pipe);
-uint16_t usb0_function_read_buffer_c(uint16_t pipe);
-uint16_t usb0_function_read_buffer_d0(uint16_t pipe);
-uint16_t usb0_function_read_buffer_d1(uint16_t pipe);
-uint16_t usb0_function_change_fifo_port(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
-void     usb0_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
-void     usb0_function_set_curpipe2(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc);
-uint16_t usb0_function_get_mbw(uint32_t trncount, uint32_t dtptr);
-uint16_t usb0_function_read_dma(uint16_t pipe);
-void     usb0_function_brdy_int(uint16_t status, uint16_t int_enb);
-void     usb0_function_nrdy_int(uint16_t status, uint16_t int_enb);
-void     usb0_function_bemp_int(uint16_t status, uint16_t int_enb);
-void     usb0_function_setting_interrupt(uint8_t level);
-void     usb0_function_reset_module(uint16_t clockmode);
-uint16_t usb0_function_get_buf_size(uint16_t pipe);
-uint16_t usb0_function_get_mxps(uint16_t pipe);
-void     usb0_function_clear_brdy_sts(uint16_t pipe);
-void     usb0_function_clear_bemp_sts(uint16_t pipe);
-void     usb0_function_clear_nrdy_sts(uint16_t pipe);
-void     usb0_function_set_pid_buf(uint16_t pipe);
-void     usb0_function_set_pid_nak(uint16_t pipe);
-void     usb0_function_set_pid_stall(uint16_t pipe);
-void     usb0_function_clear_pid_stall(uint16_t pipe);
-uint16_t usb0_function_get_pid(uint16_t pipe);
-void     usb0_function_set_sqclr(uint16_t pipe);
-void     usb0_function_set_sqset(uint16_t pipe);
-void     usb0_function_set_csclr(uint16_t pipe);
-void     usb0_function_aclrm(uint16_t pipe);
-void     usb0_function_set_aclrm(uint16_t pipe);
-void     usb0_function_clr_aclrm(uint16_t pipe);
-uint16_t usb0_function_get_sqmon(uint16_t pipe);
-uint16_t usb0_function_get_inbuf(uint16_t pipe);
-
-/* ==== function ==== */
-void     usb0_function_init_status(void);
-void     usb0_function_InitModule(uint16_t mode);
-uint16_t usb0_function_CheckVBUStaus(void);
-void     usb0_function_USB_FUNCTION_Attach(void);
-void     usb0_function_USB_FUNCTION_Detach(void);
-void     usb0_function_USB_FUNCTION_BusReset(void);
-void     usb0_function_USB_FUNCTION_Resume(void);
-void     usb0_function_USB_FUNCTION_Suspend(void);
-void     usb0_function_USB_FUNCTION_TestMode(void);
-void     usb0_function_ResetDCP(void);
-void     usb0_function_ResetEP(uint16_t num);
-uint16_t usb0_function_EpToPipe(uint16_t ep);
-void     usb0_function_InitEPTable(uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num);
-uint16_t usb0_function_GetConfigNum(void);
-uint16_t usb0_function_GetAltNum(uint16_t Con_Num, uint16_t Int_Num);
-uint16_t usb0_function_CheckRemoteWakeup(void);
-void     usb0_function_clear_alt(void);
-void     usb0_function_clear_pipe_tbl(void);
-void     usb0_function_clear_ep_table_index(void);
-uint16_t usb0_function_GetInterfaceNum(uint16_t num);
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* USB0_FUNCTION_H */
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/inc/usb0_function_api.h
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/inc/usb0_function_api.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,104 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_api.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description  : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-#ifndef USB0_FUNCTION_API_H
-#define USB0_FUNCTION_API_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Variable Externs
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-void     usb0_api_function_init(uint8_t int_level, uint16_t mode, uint16_t clockmode);
-uint16_t usb0_api_function_IsConfigured(void);
-uint16_t usb0_function_GetDeviceState(void);
-uint16_t usb0_api_function_CtrlReadStart(uint32_t size, uint8_t *data);
-void     usb0_api_function_CtrlWriteStart(uint32_t size, uint8_t *data);
-uint16_t usb0_api_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
-uint16_t usb0_api_function_check_pipe_status(uint16_t pipe, uint32_t *size);
-void     usb0_api_function_clear_pipe_status(uint16_t pipe);
-void     usb0_api_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
-void     usb0_api_function_set_pid_buf(uint16_t pipe);
-void     usb0_api_function_set_pid_nak(uint16_t pipe);
-void     usb0_api_function_set_pid_stall(uint16_t pipe);
-void     usb0_api_function_clear_pid_stall(uint16_t pipe);
-uint16_t usb0_api_function_get_pid(uint16_t pipe);
-int32_t  usb0_api_function_check_stall(uint16_t pipe);
-void     usb0_api_function_set_sqclr(uint16_t pipe);
-void     usb0_api_function_set_sqset(uint16_t pipe);
-void     usb0_api_function_set_csclr(uint16_t pipe);
-void     usb0_api_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
-void     usb0_api_function_clear_brdy_sts(uint16_t pipe);
-void     usb0_api_function_clear_bemp_sts(uint16_t pipe);
-void     usb0_api_function_clear_nrdy_sts(uint16_t pipe);
-
-void     usb0_function_ClearFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_SetFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_SetAddress(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_SetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_SetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_SetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_SynchFrame(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_GetStatus(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_GetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_GetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_GetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Resrv_0(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Resrv_123(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Resrv_4(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb0_function_Resrv_5(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* USB0_FUNCTION_API_H */
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/inc/usb0_function_dmacdrv.h
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/inc/usb0_function_dmacdrv.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_dmacdrv.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description  : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-#ifndef USB0_FUNCTION_DMACDRV_H
-#define USB0_FUNCTION_DMACDRV_H
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-typedef struct dmac_transinfo
-{
-    uint32_t src_addr;      /* Transfer source address                */
-    uint32_t dst_addr;      /* Transfer destination address           */
-    uint32_t count;         /* Transfer byte count                    */
-    uint32_t src_size;      /* Transfer source data size              */
-    uint32_t dst_size;      /* Transfer destination data size         */
-    uint32_t saddr_dir;     /* Transfer source address direction      */
-    uint32_t daddr_dir;     /* Transfer destination address direction */
-} dmac_transinfo_t;
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-/* ==== Transfer specification of the sample program ==== */
-#define DMAC_SAMPLE_SINGLE          (0)     /* Single transfer                   */
-#define DMAC_SAMPLE_CONTINUATION    (1)     /* Continuous transfer (use REN bit) */
-
-/* ==== DMA modes ==== */
-#define DMAC_MODE_REGISTER          (0)     /* Register mode */
-#define DMAC_MODE_LINK              (1)     /* Link mode     */
-
-/* ==== Transfer requests ==== */
-#define DMAC_REQ_MODE_EXT           (0)     /* External request                   */
-#define DMAC_REQ_MODE_PERI          (1)     /* On-chip peripheral module request  */
-#define DMAC_REQ_MODE_SOFT          (2)     /* Auto-request (request by software) */
-
-/* ==== DMAC transfer sizes ==== */
-#define DMAC_TRANS_SIZE_8           (0)     /* 8 bits    */
-#define DMAC_TRANS_SIZE_16          (1)     /* 16 bits   */
-#define DMAC_TRANS_SIZE_32          (2)     /* 32 bits   */
-#define DMAC_TRANS_SIZE_64          (3)     /* 64 bits   */
-#define DMAC_TRANS_SIZE_128         (4)     /* 128 bits  */
-#define DMAC_TRANS_SIZE_256         (5)     /* 256 bits  */
-#define DMAC_TRANS_SIZE_512         (6)     /* 512 bits  */
-#define DMAC_TRANS_SIZE_1024        (7)     /* 1024 bits */
-
-/* ==== Address increment for transferring ==== */
-#define DMAC_TRANS_ADR_NO_INC       (1)     /* Not increment */
-#define DMAC_TRANS_ADR_INC          (0)     /* Increment     */
-
-/* ==== Method for detecting DMA request ==== */
-#define DMAC_REQ_DET_FALL           (0)     /* Falling edge detection */
-#define DMAC_REQ_DET_RISE           (1)     /* Rising edge detection  */
-#define DMAC_REQ_DET_LOW            (2)     /* Low level detection    */
-#define DMAC_REQ_DET_HIGH           (3)     /* High level detection   */
-
-/* ==== Request Direction ==== */
-#define DMAC_REQ_DIR_SRC            (0)     /* DMAREQ is the source/ DMAACK is active when reading      */
-#define DMAC_REQ_DIR_DST            (1)     /* DMAREQ is the destination/ DMAACK is active when writing */
-
-/* ==== Descriptors ==== */
-#define DMAC_DESC_HEADER            (0)     /* Header              */
-#define DMAC_DESC_SRC_ADDR          (1)     /* Source Address      */
-#define DMAC_DESC_DST_ADDR          (2)     /* Destination Address */
-#define DMAC_DESC_COUNT             (3)     /* Transaction Byte    */
-#define DMAC_DESC_CHCFG             (4)     /* Channel Confg       */
-#define DMAC_DESC_CHITVL            (5)     /* Channel Interval    */
-#define DMAC_DESC_CHEXT             (6)     /* Channel Extension   */
-#define DMAC_DESC_LINK_ADDR         (7)     /* Link Address        */
-
-/* ==== On-chip peripheral module requests ===== */
-typedef enum dmac_request_factor
-{
-    DMAC_REQ_USB0_DMA0_TX,      /* USB_0 channel 0 transmit FIFO empty            */
-    DMAC_REQ_USB0_DMA0_RX,      /* USB_0 channel 0 receive FIFO full              */
-    DMAC_REQ_USB0_DMA1_TX,      /* USB_0 channel 1 transmit FIFO empty            */
-    DMAC_REQ_USB0_DMA1_RX,      /* USB_0 channel 1 receive FIFO full              */
-    DMAC_REQ_USB1_DMA0_TX,      /* USB_1 channel 0 transmit FIFO empty            */
-    DMAC_REQ_USB1_DMA0_RX,      /* USB_1 channel 0 receive FIFO full              */
-    DMAC_REQ_USB1_DMA1_TX,      /* USB_1 channel 1 transmit FIFO empty            */
-    DMAC_REQ_USB1_DMA1_RX,      /* USB_1 channel 1 receive FIFO full              */
-} dmac_request_factor_t;
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-void usb0_function_DMAC1_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
-                                        uint32_t request_factor, uint32_t req_direction);
-int32_t usb0_function_DMAC1_Open(uint32_t req);
-void usb0_function_DMAC1_Close(uint32_t *remain);
-void usb0_function_DMAC1_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
-
-void usb0_function_DMAC2_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
-                                        uint32_t request_factor, uint32_t req_direction);
-int32_t usb0_function_DMAC2_Open(uint32_t req);
-void usb0_function_DMAC2_Close(uint32_t *remain);
-void usb0_function_DMAC2_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* USB0_FUNCTION_DMACDRV_H */
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_dataio.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_dataio.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2933 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_dataio.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb0_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-static uint16_t g_usb0_function_mbw[(USB_FUNCTION_MAX_PIPE_NO + 1)];
-
-static void     usb0_function_start_receive_trns_c(uint16_t pipe, uint32_t size, uint8_t *data);
-static void     usb0_function_start_receive_trns_d0(uint16_t pipe, uint32_t size, uint8_t *data);
-static void     usb0_function_start_receive_trns_d1(uint16_t pipe, uint32_t size, uint8_t *data);
-static void     usb0_function_start_receive_dma_d0(uint16_t pipe, uint32_t size, uint8_t *data);
-static void     usb0_function_start_receive_dma_d1(uint16_t pipe, uint32_t size, uint8_t *data);
-static uint16_t usb0_function_read_dma_d0(uint16_t pipe);
-static uint16_t usb0_function_read_dma_d1(uint16_t pipe);
-static uint16_t usb0_function_write_dma_d0(uint16_t pipe);
-static uint16_t usb0_function_write_dma_d1(uint16_t pipe);
-
-static void     usb0_function_read_c_fifo(uint16_t pipe, uint16_t count);
-static void     usb0_function_write_c_fifo(uint16_t Pipe, uint16_t count);
-static void     usb0_function_read_d0_fifo(uint16_t pipe, uint16_t count);
-static void     usb0_function_write_d0_fifo(uint16_t pipe, uint16_t count);
-static void     usb0_function_read_d1_fifo(uint16_t pipe, uint16_t count);
-static void     usb0_function_write_d1_fifo(uint16_t pipe, uint16_t count);
-
-static void     usb0_function_clear_transaction_counter(uint16_t pipe);
-static void     usb0_function_set_transaction_counter(uint16_t pipe, uint32_t count);
-
-static uint32_t usb0_function_com_get_dmasize(uint32_t trncount, uint32_t dtptr);
-
-static uint16_t usb0_function_set_dfacc_d0(uint16_t mbw, uint32_t count);
-static uint16_t usb0_function_set_dfacc_d1(uint16_t mbw, uint32_t count);
-
-
-/*******************************************************************************
-* Function Name: usb0_function_start_send_transfer
-* Description  : Starts the USB data communication using pipe specified by the argument.
-* Arguments    : uint16_t  pipe    ; Pipe Number
-*              : uint32_t size     ; Data Size
-*              : uint8_t  *data    ; Data Address
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t status;
-    uint16_t usefifo;
-    uint16_t mbw;
-
-    g_usb0_function_data_count[pipe]   = size;
-    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    usb0_function_clear_bemp_sts(pipe);
-    usb0_function_clear_brdy_sts(pipe);
-    usb0_function_clear_nrdy_sts(pipe);
-
-    mbw = usb0_function_get_mbw(size, (uint32_t)data);
-
-    usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
-    switch (usefifo)
-    {
-        case USB_FUNCTION_D0FIFO_USE:
-        case USB_FUNCTION_D0FIFO_DMA:
-            usefifo = USB_FUNCTION_D0USE;
-        break;
-
-        case USB_FUNCTION_D1FIFO_USE:
-        case USB_FUNCTION_D1FIFO_DMA:
-            usefifo = USB_FUNCTION_D1USE;
-        break;
-
-        default:
-            usefifo = USB_FUNCTION_CUSE;
-        break;
-    };
-
-    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, usefifo, DEVDRV_USBF_NO, mbw);
-
-    usb0_function_clear_transaction_counter(pipe);
-
-    usb0_function_aclrm(pipe);
-
-    status = usb0_function_write_buffer(pipe);
-
-    if (status != DEVDRV_USBF_FIFOERROR)
-    {
-        usb0_function_set_pid_buf(pipe);
-    }
-
-    return status;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_buffer
-* Description  : Writes data in the buffer allocated in the pipe specified by
-*              : the argument. The FIFO for using is set in the pipe definition table.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_write_buffer (uint16_t pipe)
-{
-    uint16_t status;
-    uint16_t usefifo;
-
-    g_usb0_function_PipeIgnore[pipe] = 0;
-    usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
-    switch (usefifo)
-    {
-        case USB_FUNCTION_D0FIFO_USE:
-            status = usb0_function_write_buffer_d0(pipe);
-        break;
-
-        case USB_FUNCTION_D1FIFO_USE:
-            status = usb0_function_write_buffer_d1(pipe);
-        break;
-
-        case USB_FUNCTION_D0FIFO_DMA:
-            status = usb0_function_write_dma_d0(pipe);
-        break;
-
-        case USB_FUNCTION_D1FIFO_DMA:
-            status = usb0_function_write_dma_d1(pipe);
-        break;
-
-        default:
-            status = usb0_function_write_buffer_c(pipe);
-        break;
-    };
-
-    switch (status)
-    {
-        case DEVDRV_USBF_WRITING:                       /* Continue of data write */
-            usb0_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
-            usb0_function_enable_brdy_int(pipe);        /* Enable Ready Interrupt */
-        break;
-
-        case DEVDRV_USBF_WRITEEND:                      /* End of data write */
-        case DEVDRV_USBF_WRITESHRT:                     /* End of data write */
-            usb0_function_disable_brdy_int(pipe);       /* Disable Ready Interrupt */
-            usb0_function_clear_nrdy_sts(pipe);
-            usb0_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
-            /* for last transfer */
-            usb0_function_enable_bemp_int(pipe);        /* Enable Empty Interrupt */
-        break;
-
-        case DEVDRV_USBF_WRITEDMA:                      /* DMA write */
-            usb0_function_clear_nrdy_sts(pipe);
-            usb0_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
-        break;
-
-        case DEVDRV_USBF_FIFOERROR:                     /* FIFO access status */
-        default:
-            usb0_function_disable_brdy_int(pipe);       /* Disable Ready Interrupt */
-            usb0_function_disable_bemp_int(pipe);       /* Disable Empty Interrupt */
-            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
-        break;
-    }
-
-    return status;                      /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_buffer_c
-* Description  : Writes data in the buffer allocated in the pipe specified in
-*              : the argument. Writes data by CPU transfer using CFIFO.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_write_buffer_c (uint16_t pipe)
-{
-    uint32_t count;
-    uint16_t size;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-
-    if (g_usb0_function_CtrZeroLengthFlag == 1)
-    {
-        g_usb0_function_CtrZeroLengthFlag = 0;                  /* Zero Length Packet Flag CLR */
-        return DEVDRV_USBF_WRITEEND;
-    }
-
-    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-    if (pipe == USB_FUNCTION_PIPE0)
-    {
-        buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
-    }
-    else
-    {
-        buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
-    }
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    size = usb0_function_get_buf_size(pipe);                    /* Data buffer size */
-    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb0_function_data_count[pipe] <= (uint32_t)size)
-    {
-        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
-        count  = g_usb0_function_data_count[pipe];
-
-        if (count == 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
-        }
-    }
-    else
-    {
-        status = DEVDRV_USBF_WRITING;                           /* write continues */
-        count  = (uint32_t)size;
-    }
-
-    usb0_function_write_c_fifo(pipe, (uint16_t)count);
-
-    if (g_usb0_function_data_count[pipe] < (uint32_t)size)
-    {
-        g_usb0_function_data_count[pipe] = 0;
-
-        if (RZA_IO_RegRead_16(&USB200.CFIFOCTR, USB_CFIFOCTR_BVAL_SHIFT, USB_CFIFOCTR_BVAL) == 0)
-        {
-            USB200.CFIFOCTR = USB_FUNCTION_BITBVAL;             /* Short Packet */
-            g_usb0_function_CtrZeroLengthFlag = 1;              /* Zero Length Packet Flag */
-        }
-    }
-    else
-    {
-        g_usb0_function_data_count[pipe] -= count;
-    }
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_buffer_d0
-* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
-*              : Writes data by CPU transfer using D0FIFO.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_write_buffer_d0 (uint16_t pipe)
-{
-    uint32_t count;
-    uint16_t size;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-
-    mbw    = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    size = usb0_function_get_buf_size(pipe);                    /* Data buffer size */
-    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb0_function_data_count[pipe] <= (uint32_t)size)
-    {
-        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
-        count  = g_usb0_function_data_count[pipe];
-
-        if (count == 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
-        }
-    }
-    else
-    {
-        status = DEVDRV_USBF_WRITING;                           /* write continues */
-        count  = (uint32_t)size;
-    }
-
-    usb0_function_write_d0_fifo(pipe, (uint16_t)count);
-
-    if (g_usb0_function_data_count[pipe] < (uint32_t)size)
-    {
-        g_usb0_function_data_count[pipe] = 0;
-        if (RZA_IO_RegRead_16(&USB200.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
-        {
-            USB200.D0FIFOCTR = USB_FUNCTION_BITBVAL;            /* Short Packet */
-        }
-    }
-    else
-    {
-        g_usb0_function_data_count[pipe] -= count;
-    }
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_buffer_d1
-* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
-*              : Writes data by CPU transfer using D1FIFO.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_write_buffer_d1 (uint16_t pipe)
-{
-    uint32_t count;
-    uint16_t size;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-
-    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    size = usb0_function_get_buf_size(pipe);                    /* Data buffer size */
-    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb0_function_data_count[pipe] <= (uint32_t)size)
-    {
-        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
-        count  = g_usb0_function_data_count[pipe];
-
-        if (count == 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
-        }
-    }
-    else
-    {
-        status = DEVDRV_USBF_WRITING;                           /* write continues */
-        count  = (uint32_t)size;
-    }
-
-    usb0_function_write_d1_fifo(pipe, (uint16_t)count);
-
-    if (g_usb0_function_data_count[pipe] < (uint32_t)size)
-    {
-        g_usb0_function_data_count[pipe] = 0;
-
-        if (RZA_IO_RegRead_16(&USB200.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
-        {
-            USB200.D1FIFOCTR = USB_FUNCTION_BITBVAL;            /* Short Packet */
-        }
-    }
-    else
-    {
-        g_usb0_function_data_count[pipe] -= count;
-    }
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_dma_d0
-* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
-*              : Writes data by DMA transfer using D0FIFO.
-*              : The DMA-ch for using is specified by Userdef_USB_usb0_function_start_dma().
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           : Write end
-*              : DEVDRV_USBF_WRITESHRT          : short data
-*              : DEVDRV_USBF_WRITING            : Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           : Write DMA
-*              : DEVDRV_USBF_FIFOERROR          : FIFO status
-*******************************************************************************/
-static uint16_t usb0_function_write_dma_d0 (uint16_t pipe)
-{
-    uint32_t count;
-    uint16_t size;
-    uint16_t buffer;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t dfacc = 0;
-
-    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                            /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    size  = usb0_function_get_buf_size(pipe);                       /* Data buffer size */
-    count = g_usb0_function_data_count[pipe];
-
-    if (count != 0)
-    {
-        g_usb0_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe;
-
-        if ((count % size) != 0)
-        {
-            g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] = 1;
-        }
-        else
-        {
-            g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] = 0;
-        }
-
-        dfacc = usb0_function_set_dfacc_d0(mbw, count);
-
-        if (mbw == USB_FUNCTION_BITMBW_32)
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2;  /* 32bit transfer */
-        }
-        else if (mbw == USB_FUNCTION_BITMBW_16)
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1;  /* 16bit transfer */
-        }
-        else
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0;  /* 8bit transfer */
-        }
-
-        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo   = USB_FUNCTION_D0FIFO_DMA;
-        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].dir    = USB_FUNCTION_BUF2FIFO;
-        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
-        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes  = count;
-
-        Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
-
-        usb0_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
-
-        RZA_IO_RegWrite_16(&USB200.D0FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
-
-        g_usb0_function_data_count[pipe]    = 0;
-        g_usb0_function_data_pointer[pipe] += count;
-        status = DEVDRV_USBF_WRITEDMA;                              /* DMA write  */
-    }
-    else
-    {
-        if (RZA_IO_RegRead_16(&USB200.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
-        {
-            RZA_IO_RegWrite_16(&USB200.D0FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
-        }
-        status = DEVDRV_USBF_WRITESHRT;                             /* Short Packet is end of write */
-    }
-
-    return status;                                                  /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_dma_d1
-* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
-*              : Writes data by DMA transfer using D1FIFO.
-*              : The DMA-ch for using is specified by Userdef_USB_usb0_function_start_dma().
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           : Write end
-*              : DEVDRV_USBF_WRITESHRT          : short data
-*              : DEVDRV_USBF_WRITING            : Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           : Write DMA
-*              : DEVDRV_USBF_FIFOERROR          : FIFO status
-*******************************************************************************/
-static uint16_t usb0_function_write_dma_d1 (uint16_t pipe)
-{
-    uint32_t count;
-    uint16_t size;
-    uint16_t buffer;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t dfacc=0;
-
-    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                            /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    size  = usb0_function_get_buf_size(pipe);                       /* Data buffer size */
-    count = g_usb0_function_data_count[pipe];
-
-    if (count != 0)
-    {
-        g_usb0_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe;
-        if ((count % size) != 0)
-        {
-            g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] = 1;
-        }
-        else
-        {
-            g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] = 0;
-        }
-
-        dfacc = usb0_function_set_dfacc_d1(mbw, count);
-
-        if (mbw == USB_FUNCTION_BITMBW_32)
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2;  /* 32bit transfer */
-        }
-        else if (mbw == USB_FUNCTION_BITMBW_16)
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1;  /* 16bit transfer */
-        }
-        else
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0;  /* 8bit transfer */
-        }
-
-        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo   = USB_FUNCTION_D1FIFO_DMA;
-        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].dir    = USB_FUNCTION_BUF2FIFO;
-        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
-        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes  = count;
-
-        Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
-
-        usb0_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
-
-        RZA_IO_RegWrite_16(&USB200.D1FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
-
-        g_usb0_function_data_count[pipe]    = 0;
-        g_usb0_function_data_pointer[pipe] += count;
-
-        status = DEVDRV_USBF_WRITEDMA;                             /* DMA write  */
-    }
-    else
-    {
-        if (RZA_IO_RegRead_16(&USB200.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
-        {
-            RZA_IO_RegWrite_16(&USB200.D1FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
-        }
-        status = DEVDRV_USBF_WRITESHRT;                             /* Short Packet is end of write */
-    }
-
-    return status;                                                  /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_start_receive_transfer
-* Description  : Starts USB data reception using the pipe specified in the argument.
-*              : The FIFO for using is set in the pipe definition table.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-void usb0_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t usefifo;
-
-    usb0_function_clear_bemp_sts(pipe);
-    usb0_function_clear_brdy_sts(pipe);
-    usb0_function_clear_nrdy_sts(pipe);
-
-    usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
-    switch (usefifo)
-    {
-        case USB_FUNCTION_D0FIFO_USE:
-            usb0_function_start_receive_trns_d0(pipe, size, data);
-        break;
-
-        case USB_FUNCTION_D1FIFO_USE:
-            usb0_function_start_receive_trns_d1(pipe, size, data);
-        break;
-
-        case USB_FUNCTION_D0FIFO_DMA:
-            usb0_function_start_receive_dma_d0(pipe, size, data);
-        break;
-
-        case USB_FUNCTION_D1FIFO_DMA:
-            usb0_function_start_receive_dma_d1(pipe, size, data);
-        break;
-
-        default:
-            usb0_function_start_receive_trns_c(pipe, size, data);
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_start_receive_trns_c
-* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by CPU transfer using CFIFO.
-*              : When storing data in the buffer allocated in the pipe specified in the
-*              : argument, BRDY interrupt is generated to read data
-*              : in the interrupt.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_start_receive_trns_c (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb0_function_set_pid_nak(pipe);
-    g_usb0_function_data_count[pipe]   = size;
-    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb0_function_PipeIgnore[pipe]   = 0;
-
-    g_usb0_function_PipeDataSize[pipe] = size;
-    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    mbw = usb0_function_get_mbw(size, (uint32_t)data);
-    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_READ, mbw);
-    USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;
-
-    usb0_function_set_transaction_counter(pipe, size);
-
-    usb0_function_aclrm(pipe);
-
-    usb0_function_enable_nrdy_int(pipe);
-    usb0_function_enable_brdy_int(pipe);
-
-    usb0_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_start_receive_trns_d0
-* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by CPU transfer using D0FIFO.
-*              : This function does not read data from the buffer.
-*              : When storing data in the buffer allocated in the pipe specified
-*              : in the argument, BRDY interrupt is generated to read data in the
-*              : interrupt.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_start_receive_trns_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb0_function_set_pid_nak(pipe);
-    g_usb0_function_data_count[pipe]   = size;
-    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb0_function_PipeIgnore[pipe]   = 0;
-
-    g_usb0_function_PipeDataSize[pipe] = size;
-    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    mbw = usb0_function_get_mbw(size, (uint32_t)data);
-    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
-
-    usb0_function_set_transaction_counter(pipe, size);
-
-    usb0_function_aclrm(pipe);
-
-    usb0_function_enable_nrdy_int(pipe);
-    usb0_function_enable_brdy_int(pipe);
-
-    usb0_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_start_receive_trns_d1
-* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by CPU transfer using D1FIFO.
-*              : This function does not read data from the buffer.
-*              : When storing data in the buffer allocated in the pipe specified
-*              : in the argument, BRDY interrupt is generated to read data.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_start_receive_trns_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb0_function_set_pid_nak(pipe);
-    g_usb0_function_data_count[pipe]   = size;
-    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb0_function_PipeIgnore[pipe]   = 0;
-
-    g_usb0_function_PipeDataSize[pipe] = size;
-    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    mbw = usb0_function_get_mbw(size, (uint32_t)data);
-    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
-
-    usb0_function_set_transaction_counter(pipe, size);
-
-    usb0_function_aclrm(pipe);
-
-    usb0_function_enable_nrdy_int(pipe);
-    usb0_function_enable_brdy_int(pipe);
-
-    usb0_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_start_receive_dma_d0
-* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by DMA transfer using D0FIFO.
-*              : This function does not read data from the buffer.
-*              : When storing data in the buffer allocated in the pipe specified
-*              : in the argument, delivered read request to DMAC to read data from
-*              : the buffer by DMAC.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_start_receive_dma_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb0_function_set_pid_nak(pipe);
-    g_usb0_function_data_count[pipe]   = size;
-    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb0_function_PipeIgnore[pipe]   = 0;
-
-    g_usb0_function_PipeDataSize[pipe] = 0;
-    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    mbw = usb0_function_get_mbw(size, (uint32_t)data);
-    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
-
-    usb0_function_set_transaction_counter(pipe, size);
-
-    usb0_function_aclrm(pipe);
-
-    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        usb0_function_read_dma(pipe);
-
-        usb0_function_enable_nrdy_int(pipe);
-        usb0_function_enable_brdy_int(pipe);
-    }
-    else
-    {
-        usb0_function_enable_nrdy_int(pipe);
-        usb0_function_enable_brdy_int(pipe);
-    }
-
-    usb0_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_start_receive_dma_d1
-* Description  : Read data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by DMA transfer using D0FIFO.
-*              : This function does not read data from the buffer.
-*              : When storing data in the buffer allocated in the pipe specified
-*              : in the argument, delivered read request to DMAC to read data from
-*              : the buffer by DMAC.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_start_receive_dma_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb0_function_set_pid_nak(pipe);
-    g_usb0_function_data_count[pipe]   = size;
-    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb0_function_PipeIgnore[pipe]   = 0;
-
-    g_usb0_function_PipeDataSize[pipe] = 0;
-    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    mbw = usb0_function_get_mbw(size, (uint32_t)data);
-    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
-
-    usb0_function_set_transaction_counter(pipe, size);
-
-    usb0_function_aclrm(pipe);
-
-    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        usb0_function_read_dma(pipe);
-
-        usb0_function_enable_nrdy_int(pipe);
-        usb0_function_enable_brdy_int(pipe);
-    }
-    else
-    {
-        usb0_function_enable_nrdy_int(pipe);
-        usb0_function_enable_brdy_int(pipe);
-    }
-
-    usb0_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_buffer
-* Description  : Reads data from the buffer allocated in the pipe specified
-*              : in the argument.
-*              : Uses FIF0 set in the pipe definition table.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_read_buffer (uint16_t pipe)
-{
-    uint16_t status;
-
-    g_usb0_function_PipeIgnore[pipe] = 0;
-
-    if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
-    {
-        status = usb0_function_read_buffer_d0(pipe);
-    }
-    else if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
-    {
-        status = usb0_function_read_buffer_d1(pipe);
-    }
-    else
-    {
-        status = usb0_function_read_buffer_c(pipe);
-    }
-
-    switch (status)
-    {
-        case USB_FUNCTION_READING:                                      /* Continue of data read */
-        break;
-
-        case USB_FUNCTION_READEND:                                      /* End of data read */
-        case USB_FUNCTION_READSHRT:                                     /* End of data read */
-            usb0_function_disable_brdy_int(pipe);
-            g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
-            g_usb0_function_pipe_status[pipe]   = DEVDRV_USBF_PIPE_DONE;
-        break;
-
-        case USB_FUNCTION_READOVER:                                     /* buffer over */
-            if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
-            {
-                USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-            }
-            else if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
-            {
-                USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-            }
-            else
-            {
-                USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;                 /* Clear BCLR */
-            }
-            usb0_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
-            g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
-            g_usb0_function_pipe_status[pipe]   = DEVDRV_USBF_FIFOERROR;
-        break;
-
-        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access status */
-        default:
-            usb0_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
-            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
-        break;
-    }
-
-    return status;                                                      /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_buffer_c
-* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by CPU transfer using CFIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_read_buffer_c (uint16_t pipe)
-{
-    uint32_t count;
-    uint32_t dtln;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-
-    mbw    = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
-    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb0_function_data_count[pipe] < dtln)                /* Buffer Over ? */
-    {
-        status = USB_FUNCTION_READOVER;
-        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = g_usb0_function_data_count[pipe];
-    }
-    else if (g_usb0_function_data_count[pipe] == dtln)          /* just Receive Size */
-    {
-        status = USB_FUNCTION_READEND;
-        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = dtln;
-
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-        }
-    }
-    else                                                        /* continue Receive data */
-    {
-        status = USB_FUNCTION_READING;
-        count  = dtln;
-
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-    }
-
-    if (count == 0)                                             /* 0 length packet */
-    {
-        USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;                 /* Clear BCLR */
-    }
-    else
-    {
-        usb0_function_read_c_fifo(pipe, (uint16_t)count);
-    }
-
-    g_usb0_function_data_count[pipe] -= count;
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_buffer_d0
-* Description  : Reads data from the buffer allocated in the pipe specified in
-*              : the argument.
-*              : Reads data by CPU transfer using D0FIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_read_buffer_d0 (uint16_t pipe)
-{
-    uint32_t count;
-    uint32_t dtln;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t pipebuf_size;
-
-    mbw    = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
-    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb0_function_data_count[pipe] < dtln)                /* Buffer Over ? */
-    {
-        status = USB_FUNCTION_READOVER;
-        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = g_usb0_function_data_count[pipe];
-    }
-    else if (g_usb0_function_data_count[pipe] == dtln)          /* just Receive Size */
-    {
-        status = USB_FUNCTION_READEND;
-        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = dtln;
-
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-        }
-    }
-    else                                                        /* continue Receive data */
-    {
-        status = USB_FUNCTION_READING;
-        count  = dtln;
-
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-        else
-        {
-            pipebuf_size = usb0_function_get_buf_size(pipe);    /* Data buffer size */
-
-            if (count != pipebuf_size)
-            {
-                status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
-                usb0_function_set_pid_nak(pipe);                /* Set NAK */
-            }
-        }
-    }
-
-    if (count == 0)                                             /* 0 length packet */
-    {
-        USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-    }
-    else
-    {
-        usb0_function_read_d0_fifo(pipe, (uint16_t)count);
-    }
-
-    g_usb0_function_data_count[pipe] -= count;
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_buffer_d1
-* Description  : Reads data from the buffer allocated in the pipe specified
-*              : in the argument.
-*              : Reads data by CPU transfer using D1FIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_read_buffer_d1 (uint16_t pipe)
-{
-    uint32_t count;
-    uint32_t dtln;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t pipebuf_size;
-
-    mbw    = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
-    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb0_function_data_count[pipe] < dtln)                /* Buffer Over ? */
-    {
-        status = USB_FUNCTION_READOVER;
-        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = g_usb0_function_data_count[pipe];
-    }
-    else if (g_usb0_function_data_count[pipe] == dtln)          /* just Receive Size */
-    {
-        status = USB_FUNCTION_READEND;
-        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = dtln;
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-        }
-    }
-    else                                                        /* continue Receive data */
-    {
-        status = USB_FUNCTION_READING;
-        count  = dtln;
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-        else
-        {
-            pipebuf_size = usb0_function_get_buf_size(pipe);    /* Data buffer size */
-
-            if (count != pipebuf_size)
-            {
-                status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
-                usb0_function_set_pid_nak(pipe);                /* Set NAK */
-            }
-        }
-    }
-
-    if (count == 0)                                             /* 0 length packet */
-    {
-        USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-    }
-    else
-    {
-        usb0_function_read_d1_fifo(pipe, (uint16_t)count);
-    }
-
-    g_usb0_function_data_count[pipe] -= count;
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_dma
-* Description  : Reads data from the buffer allocated in the pipe specified
-*              : in the argument.
-*              : Reads data by DMA transfer using D0FIFO or D1FIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_read_dma (uint16_t pipe)
-{
-    uint16_t status;
-
-    g_usb0_function_PipeIgnore[pipe] = 0;
-    if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
-    {
-        status = usb0_function_read_dma_d0(pipe);
-    }
-    else
-    {
-        status = usb0_function_read_dma_d1(pipe);
-    }
-
-    switch (status)
-    {
-        case USB_FUNCTION_READING:                                      /* Continue of data read */
-        break;
-
-        case USB_FUNCTION_READZERO:                                     /* End of data read */
-            usb0_function_disable_brdy_int(pipe);
-            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-        break;
-
-        case USB_FUNCTION_READEND:                                      /* End of data read */
-        case USB_FUNCTION_READSHRT:                                     /* End of data read */
-            usb0_function_disable_brdy_int(pipe);
-
-            if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-            {
-                g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
-            }
-        break;
-
-        case USB_FUNCTION_READOVER:                                     /* buffer over */
-            usb0_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
-
-            if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-            {
-                g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
-            }
-            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
-        break;
-
-        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access status */
-        default:
-            usb0_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
-            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
-        break;
-    }
-
-    return status;                                                      /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_dma_d0
-* Description  : Writes data in the buffer allocated in the pipe specified
-*              : in the argument.
-*              : Reads data by DMA transfer using D0FIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READZERO         ; zero data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-static uint16_t usb0_function_read_dma_d0 (uint16_t pipe)
-{
-    uint32_t count;
-    uint32_t dtln;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t dfacc = 0;
-    uint16_t pipebuf_size;
-
-    g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
-
-    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-
-    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        count  = g_usb0_function_data_count[pipe];
-        status = USB_FUNCTION_READING;
-    }
-    else
-    {
-        buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
-
-        if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-        {
-            return DEVDRV_USBF_FIFOERROR;
-        }
-
-        dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
-        mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
-
-        if (g_usb0_function_data_count[pipe] < dtln)                /* Buffer Over ? */
-        {
-            status = USB_FUNCTION_READOVER;
-            count  = g_usb0_function_data_count[pipe];
-        }
-        else if (g_usb0_function_data_count[pipe] == dtln)          /* just Receive Size */
-        {
-            status = USB_FUNCTION_READEND;
-            count  = dtln;
-            if (count == 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            }
-
-            if ((count % mxps) != 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            }
-        }
-        else                                                        /* continue Receive data */
-        {
-            status = USB_FUNCTION_READING;
-            count  = dtln;
-
-            if (count == 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            }
-
-            if ((count % mxps) != 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            }
-            else
-            {
-                pipebuf_size = usb0_function_get_buf_size(pipe);    /* Data buffer size */
-                if (count != pipebuf_size)
-                {
-                    status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
-                }
-            }
-        }
-    }
-
-    if (count == 0)                                                 /* 0 length packet */
-    {
-        if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-        {
-            USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-            status = USB_FUNCTION_READZERO;                         /* Null Packet receive */
-        }
-        else
-        {
-            usb0_function_set_curpipe(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
-                                                                    /* transaction counter No set */
-                                                                    /* FRDY = 1, DTLN = 0 -> BRDY */
-        }
-    }
-    else
-    {
-        dfacc = usb0_function_set_dfacc_d0(mbw, count);
-
-        if (mbw == USB_FUNCTION_BITMBW_32)
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2;  /* 32bit transfer */
-        }
-        else if (mbw == USB_FUNCTION_BITMBW_16)
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1;  /* 16bit transfer */
-        }
-        else
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0;  /* 8bit transfer */
-        }
-
-        g_usb0_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe;        /* not use in read operation */
-        g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] = 0;           /* not use in read operation */
-
-        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo   = USB_FUNCTION_D0FIFO_DMA;
-        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].dir    = USB_FUNCTION_FIFO2BUF;
-        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
-        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes  = count;
-
-        if (status == USB_FUNCTION_READING)
-        {
-            g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSY;
-        }
-        else
-        {
-            g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSYEND;
-        }
-
-        Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
-
-        usb0_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
-
-        RZA_IO_RegWrite_16(&USB200.D0FIFOSEL,
-                            1,
-                            USB_DnFIFOSEL_DREQE_SHIFT,
-                            USB_DnFIFOSEL_DREQE);
-    }
-
-    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-    {
-        g_usb0_function_data_count[pipe]   -= count;
-        g_usb0_function_data_pointer[pipe] += count;
-        g_usb0_function_PipeDataSize[pipe] += count;
-    }
-
-    return status;                                                  /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_dma_d1
-* Description  : Reads data from the buffer allocated in the pipe specified in
-*              : the argument.
-*              : Reads data by DMA transfer using D1FIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READZERO         ; zero data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-static uint16_t usb0_function_read_dma_d1 (uint16_t pipe)
-{
-    uint32_t count;
-    uint32_t dtln;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t dfacc=0;
-    uint16_t pipebuf_size;
-
-    g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
-
-    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-
-    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        count  = g_usb0_function_data_count[pipe];
-        status = USB_FUNCTION_READING;
-    }
-    else
-    {
-        buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
-        if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-        {
-            return DEVDRV_USBF_FIFOERROR;
-        }
-
-        dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
-        mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
-
-        if (g_usb0_function_data_count[pipe] < dtln)                /* Buffer Over ? */
-        {
-            status = USB_FUNCTION_READOVER;
-            count  = g_usb0_function_data_count[pipe];
-        }
-        else if (g_usb0_function_data_count[pipe] == dtln)          /* just Receive Size */
-        {
-            status = USB_FUNCTION_READEND;
-            count  = dtln;
-            if (count == 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            }
-
-            if ((count % mxps) != 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            }
-        }
-        else                                                        /* continue Receive data */
-        {
-            status = USB_FUNCTION_READING;
-            count  = dtln;
-            if (count == 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            }
-
-            if ((count % mxps) != 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            }
-            else
-            {
-                pipebuf_size = usb0_function_get_buf_size(pipe);    /* Data buffer size */
-                if (count != pipebuf_size)
-                {
-                    status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
-                }
-            }
-        }
-    }
-
-    if (count == 0)                                                 /* 0 length packet */
-    {
-        if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-        {
-            USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-            status = USB_FUNCTION_READZERO;                         /* Null Packet receive */
-        }
-        else
-        {
-            usb0_function_set_curpipe(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
-                                                                    /* transaction counter No set */
-                                                                    /* FRDY = 1, DTLN = 0 -> BRDY */
-        }
-    }
-    else
-    {
-        dfacc = usb0_function_set_dfacc_d1(mbw, count);
-
-        if (mbw == USB_FUNCTION_BITMBW_32)
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2;  /* 32bit transfer */
-        }
-        else if (mbw == USB_FUNCTION_BITMBW_16)
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1;  /* 16bit transfer */
-        }
-        else
-        {
-            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0;  /* 8bit transfer */
-        }
-
-        g_usb0_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe;        /* not use in read operation */
-        g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] = 0;           /* not use in read operation */
-
-        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo   = USB_FUNCTION_D1FIFO_DMA;
-        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].dir    = USB_FUNCTION_FIFO2BUF;
-        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
-        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes  = count;
-
-        if (status == USB_FUNCTION_READING)
-        {
-            g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSY;
-        }
-        else
-        {
-            g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSYEND;
-        }
-
-        Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
-
-        usb0_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
-
-        RZA_IO_RegWrite_16(&USB200.D1FIFOSEL,
-                            1,
-                            USB_DnFIFOSEL_DREQE_SHIFT,
-                            USB_DnFIFOSEL_DREQE);
-    }
-
-    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-    {
-        g_usb0_function_data_count[pipe]   -= count;
-        g_usb0_function_data_pointer[pipe] += count;
-        g_usb0_function_PipeDataSize[pipe] += count;
-    }
-
-    return status;                                                  /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_change_fifo_port
-* Description  : Allocates FIF0 specified by the argument in the pipe assigned
-*              : by the argument. After allocating FIF0, waits in the software
-*              : till the corresponding pipe becomes ready.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t fifosel   ; Select FIFO
-*              : uint16_t isel      ; FIFO Access Direction
-*              : uint16_t mbw       ; FIFO Port Access Bit Width
-* Return Value : DEVDRV_USBF_FIFOERROR         ; Error
-*              : Others            ; CFIFOCTR/D0FIFOCTR/D1FIFOCTR Register Value
-*******************************************************************************/
-uint16_t usb0_function_change_fifo_port (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
-{
-    uint16_t buffer;
-    uint32_t loop;
-    volatile uint32_t loop2;
-
-    usb0_function_set_curpipe(pipe, fifosel, isel, mbw);
-
-    for (loop = 0; loop < 4; loop++)
-    {
-        switch (fifosel)
-        {
-            case USB_FUNCTION_CUSE:
-                buffer = USB200.CFIFOCTR;
-            break;
-
-            case USB_FUNCTION_D0USE:
-            case USB_FUNCTION_D0DMA:
-                buffer = USB200.D0FIFOCTR;
-            break;
-
-            case USB_FUNCTION_D1USE:
-            case USB_FUNCTION_D1DMA:
-                buffer = USB200.D1FIFOCTR;
-            break;
-
-            default:
-                buffer = 0;
-            break;
-        }
-
-        if ((buffer & USB_FUNCTION_BITFRDY) == USB_FUNCTION_BITFRDY)
-        {
-            return buffer;
-        }
-
-        loop2 = 25;
-        while (loop2-- > 0)
-        {
-            /* wait */
-        }
-    }
-
-    return DEVDRV_USBF_FIFOERROR;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_curpipe
-* Description  : Allocates FIF0 specified by the argument in the pipe assigned
-*              : by the argument.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t fifosel   ; Select FIFO
-*              : uint16_t isel      ; FIFO Access Direction
-*              : uint16_t mbw       ; FIFO Port Access Bit Width
-* Return Value : none
-*******************************************************************************/
-void usb0_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
-{
-    uint16_t buffer;
-    uint32_t loop;
-    volatile uint32_t loop2;
-
-    g_usb0_function_mbw[pipe] = mbw;
-
-    switch (fifosel)
-    {
-        case USB_FUNCTION_CUSE:
-            buffer  = USB200.CFIFOSEL;
-            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
-            buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
-            USB200.CFIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
-                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(isel | pipe | mbw);
-            USB200.CFIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
-                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        case USB_FUNCTION_D0DMA:
-        case USB_FUNCTION_D0USE:
-            buffer  = USB200.D0FIFOSEL;
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
-            USB200.D0FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
-                        (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(pipe | mbw);
-            USB200.D0FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
-                        (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        case USB_FUNCTION_D1DMA:
-        case USB_FUNCTION_D1USE:
-            buffer  = USB200.D1FIFOSEL;
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
-            USB200.D1FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
-                        (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(pipe | mbw);
-            USB200.D1FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
-                        (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        default:
-        break;
-    }
-
-    /* Cautions !!!
-     * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
-     * For details, please look at the data sheet.   */
-    loop2 = 100;
-
-    while (loop2-- > 0)
-    {
-        /* wait */
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_curpipe2
-* Description  : Allocates FIF0 specified by the argument in the pipe assigned
-*              : by the argument.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t fifosel   ; Select FIFO
-*              : uint16_t isel      ; FIFO Access Direction
-*              : uint16_t mbw       ; FIFO Port Access Bit Width
-*              : uint16_t dfacc     ; DFACC Access mode
-* Return Value : none
-*******************************************************************************/
-void usb0_function_set_curpipe2 (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc)
-{
-    uint16_t buffer;
-    uint32_t loop;
-#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
-    uint32_t dummy;
-#endif
-    volatile uint32_t loop2;
-
-    g_usb0_function_mbw[pipe] = mbw;
-
-    switch (fifosel)
-    {
-        case USB_FUNCTION_CUSE:
-            buffer  = USB200.CFIFOSEL;
-            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
-            buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
-            USB200.CFIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
-                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(isel | pipe | mbw);
-            USB200.CFIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
-                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        case USB_FUNCTION_D0DMA:
-        case USB_FUNCTION_D0USE:
-            buffer  = USB200.D0FIFOSEL;
-#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-
-            if (dfacc != 0)
-            {
-                buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
-            }
-#else
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
-#endif
-            USB200.D0FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-
-#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
-            if (dfacc != 0)
-            {
-                dummy = USB200.D0FIFO.UINT32;
-            }
-#endif
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(pipe | mbw);
-            USB200.D0FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        case USB_FUNCTION_D1DMA:
-        case USB_FUNCTION_D1USE:
-            buffer  = USB200.D1FIFOSEL;
-#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-
-            if (dfacc != 0)
-            {
-                buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
-            }
-#else
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
-#endif
-            USB200.D1FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
-            if (dfacc != 0)
-            {
-                dummy = USB200.D1FIFO.UINT32;
-                loop = dummy;                   // avoid warning.
-            }
-#endif
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(pipe | mbw);
-            USB200.D1FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        default:
-        break;
-    }
-
-    /* Cautions !!!
-     * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
-     * For details, please look at the data sheet.   */
-    loop2 = 100;
-
-    while (loop2-- > 0)
-    {
-        /* wait */
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_c_fifo
-* Description  : Writes data in CFIFO.
-*              : Writes data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating CFIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb0_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_write_c_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            USB200.CFIFO.UINT8[HH] = *g_usb0_function_data_pointer[pipe];
-            g_usb0_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)(count / 2); even; --even)
-        {
-            USB200.CFIFO.UINT16[H] = *((uint16_t *)g_usb0_function_data_pointer[pipe]);
-            g_usb0_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)(count / 4); even; --even)
-        {
-            USB200.CFIFO.UINT32 = *((uint32_t *)g_usb0_function_data_pointer[pipe]);
-            g_usb0_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_c_fifo
-* Description  : Reads data from CFIFO.
-*              : Reads data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating CFIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb0_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_read_c_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            *g_usb0_function_data_pointer[pipe] = USB200.CFIFO.UINT8[HH];
-            g_usb0_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)((count + 1) / 2); even; --even)
-        {
-            *((uint16_t *)g_usb0_function_data_pointer[pipe]) = USB200.CFIFO.UINT16[H];
-            g_usb0_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)((count + 3) / 4); even; --even)
-        {
-            *((uint32_t *)g_usb0_function_data_pointer[pipe]) = USB200.CFIFO.UINT32;
-            g_usb0_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_d0_fifo
-* Description  : Writes data in D0FIFO.
-*              : Writes data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating CFIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb0_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_write_d0_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            USB200.D0FIFO.UINT8[HH] = *g_usb0_function_data_pointer[pipe];
-            g_usb0_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)(count / 2); even; --even)
-        {
-            USB200.D0FIFO.UINT16[H] = *((uint16_t *)g_usb0_function_data_pointer[pipe]);
-            g_usb0_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)(count / 4); even; --even)
-        {
-            USB200.D0FIFO.UINT32 = *((uint32_t *)g_usb0_function_data_pointer[pipe]);
-            g_usb0_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_d0_fifo
-* Description  : Reads data from D0FIFO.
-*              : Reads data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating DOFIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb0_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_read_d0_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            *g_usb0_function_data_pointer[pipe] = USB200.D0FIFO.UINT8[HH];
-            g_usb0_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)((count + 1) / 2); even; --even)
-        {
-            *((uint16_t *)g_usb0_function_data_pointer[pipe]) = USB200.D0FIFO.UINT16[H];
-            g_usb0_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)((count + 3) / 4); even; --even)
-        {
-            *((uint32_t *)g_usb0_function_data_pointer[pipe]) = USB200.D0FIFO.UINT32;
-            g_usb0_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_d1_fifo
-* Description  : Writes data in D1FIFO.
-*              : Writes data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating D1FIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb0_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_write_d1_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            USB200.D1FIFO.UINT8[HH] = *g_usb0_function_data_pointer[pipe];
-            g_usb0_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)(count / 2); even; --even)
-        {
-            USB200.D1FIFO.UINT16[H] = *((uint16_t *)g_usb0_function_data_pointer[pipe]);
-            g_usb0_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)(count / 4); even; --even)
-        {
-            USB200.D1FIFO.UINT32 = *((uint32_t *)g_usb0_function_data_pointer[pipe]);
-            g_usb0_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_d1_fifo
-* Description  : Reads data from D1FIFO.
-*              : Reads data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating D1FIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb0_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_read_d1_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            *g_usb0_function_data_pointer[pipe] = USB200.D1FIFO.UINT8[HH];
-            g_usb0_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)((count + 1) / 2); even; --even)
-        {
-            *((uint16_t *)g_usb0_function_data_pointer[pipe]) = USB200.D1FIFO.UINT16[H];
-            g_usb0_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)((count + 3) / 4); even; --even)
-        {
-            *((uint32_t *)g_usb0_function_data_pointer[pipe]) = USB200.D1FIFO.UINT32;
-            g_usb0_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_com_get_dmasize
-* Description  : Calculates access width of DMA transfer by the argument to
-*              : return as the Return Value.
-* Arguments    : uint32_t trncount   : transfer byte
-*              : uint32_t dtptr      : transfer data pointer
-* Return Value : DMA transfer size    : 0   8bit
-*              :                      : 1  16bit
-*              :                      : 2  32bit
-*******************************************************************************/
-static uint32_t usb0_function_com_get_dmasize (uint32_t trncount, uint32_t dtptr)
-{
-    uint32_t size;
-
-    if (((trncount & 0x0001) != 0) || ((dtptr & 0x00000001) != 0))
-    {
-        /*  When transfer byte count is odd         */
-        /* or transfer data area is 8-bit alignment */
-        size = 0;           /* 8bit */
-    }
-    else if (((trncount & 0x0003) != 0) || ((dtptr & 0x00000003) != 0))
-    {
-        /* When the transfer byte count is multiples of 2 */
-        /* or the transfer data area is 16-bit alignment */
-        size = 1;           /* 16bit */
-    }
-    else
-    {
-        /* When the transfer byte count is multiples of 4 */
-        /* or the transfer data area is 32-bit alignment */
-        size = 2;           /* 32bit */
-    }
-
-    return size;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_get_mbw
-* Description  : Calculates access width of DMA to return the value set in MBW.
-* Arguments    : uint32_t trncount   : transfer byte
-*              : uint32_t dtptr      : transfer data pointer
-* Return Value : FIFO transfer size   : USB_FUNCTION_BITMBW_8    8bit
-*              :                      : USB_FUNCTION_BITMBW_16  16bit
-*              :                      : USB_FUNCTION_BITMBW_32  32bit
-*******************************************************************************/
-uint16_t usb0_function_get_mbw (uint32_t trncount, uint32_t dtptr)
-{
-    uint32_t size;
-    uint16_t mbw;
-
-    size = usb0_function_com_get_dmasize(trncount, dtptr);
-
-    if (size == 0)
-    {
-        /* 8bit */
-        mbw = USB_FUNCTION_BITMBW_8;
-    }
-    else if (size == 1)
-    {
-        /* 16bit */
-        mbw = USB_FUNCTION_BITMBW_16;
-    }
-    else
-    {
-        /* 32bit */
-        mbw = USB_FUNCTION_BITMBW_32;
-    }
-
-    return mbw;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_transaction_counter
-* Description  : Sets transaction counter by the argument(PIPEnTRN).
-*              : Clears transaction before setting to enable transaction counter setting.
-* Arguments    : uint16_t pipe     ; Pipe number
-*              : uint32_t bsize    : Data transfer size
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_set_transaction_counter (uint16_t pipe, uint32_t bsize)
-{
-    uint16_t mxps;
-    uint16_t cnt;
-
-    if (bsize  == 0)
-    {
-        return;
-    }
-
-    mxps = usb0_function_get_mxps(pipe);            /* Max Packet Size */
-
-    if ((bsize % mxps) == 0)
-    {
-        cnt = (uint16_t)(bsize / mxps);
-    }
-    else
-    {
-        cnt = (uint16_t)((bsize / mxps) + 1);
-    }
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPE1TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPE2TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPE3TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPE4TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPE5TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPE9TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB200.PIPEATRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPEATRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPEATRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPEBTRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB200.PIPECTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPECTRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPECTRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPEDTRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB200.PIPEETRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPEETRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPEETRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB200.PIPEFTRN             = cnt;
-            RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_clear_transaction_counter
-* Description  : Clears the transaction counter by the argument.
-*              : After executing this function, the transaction counter is invalid.
-* Arguments    : uint16_t pipe     ; Pipe number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_clear_transaction_counter (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB200.PIPEATRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPEATRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB200.PIPECTRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPECTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB200.PIPEETRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPEETRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_stop_transfer
-* Description  : Stops the USB transfer in the pipe specified by the argument.
-*              : After stopping the USB transfer, clears the buffer allocated in
-*              : the pipe.
-*              : After executing this function, allocation in FIF0 becomes USB_FUNCTION_PIPE0;
-*              : invalid. After executing this function, BRDY/NRDY/BEMP interrupt
-*              : in the corresponding pipe becomes invalid. Sequence bit is also
-*              : cleared.
-* Arguments    : uint16_t  pipe     ; Pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_stop_transfer (uint16_t pipe)
-{
-    uint16_t usefifo;
-    uint32_t remain;
-    uint16_t fifo;
-
-    usb0_function_set_pid_nak(pipe);
-
-    usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-    switch (usefifo)
-    {
-        case USB_FUNCTION_D0FIFO_USE:
-            usb0_function_clear_transaction_counter(pipe);
-            USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
-            fifo = USB_FUNCTION_D0USE;
-        break;
-
-        case USB_FUNCTION_D1FIFO_USE:
-            usb0_function_clear_transaction_counter(pipe);
-            USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
-            fifo = USB_FUNCTION_D1USE;
-        break;
-
-        case USB_FUNCTION_D0FIFO_DMA:
-            remain = Userdef_USB_usb0_function_stop_dma0();
-            usb0_function_dma_stop_d0(pipe, remain);
-            usb0_function_clear_transaction_counter(pipe);
-            USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
-            fifo = USB_FUNCTION_D0DMA;
-        break;
-
-        case USB_FUNCTION_D1FIFO_DMA:
-            remain = Userdef_USB_usb0_function_stop_dma1();
-            usb0_function_dma_stop_d1(pipe, remain);
-            usb0_function_clear_transaction_counter(pipe);
-            USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
-            fifo = USB_FUNCTION_D1DMA;
-        break;
-
-        default:
-            usb0_function_clear_transaction_counter(pipe);
-            USB200.CFIFOCTR =  USB_FUNCTION_BITBCLR;        /* Buffer Clear */
-            fifo = USB_FUNCTION_CUSE;
-        break;
-    }
-
-    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, fifo, DEVDRV_USBF_NO, USB_FUNCTION_BITMBW_16);
-
-    /* Interrupt of pipe set is disabled */
-    usb0_function_disable_brdy_int(pipe);
-    usb0_function_disable_nrdy_int(pipe);
-    usb0_function_disable_bemp_int(pipe);
-
-    usb0_function_aclrm(pipe);
-    usb0_function_set_csclr(pipe);
-
-    if ( g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT )
-    {
-        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
-    }
-
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_dfacc_d0
-* Description  : Sets the DFACC setting value in D0FIFO using the transfer size.
-* Arguments    : uint16_t mbw     ; MBW
-*              : uint16_t count   ; data count
-* Return Value : DFACC Access mode
-*******************************************************************************/
-static uint16_t usb0_function_set_dfacc_d0 (uint16_t mbw, uint32_t count)
-{
-    uint16_t dfacc = 0;
-
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-    RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                        0,
-                        USB_DnFBCFG_DFACC_SHIFT,
-                        USB_DnFBCFG_DFACC);
-    RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                        0,
-                        USB_DnFBCFG_TENDE_SHIFT,
-                        USB_DnFBCFG_TENDE);
-    dfacc = 0;
-#else
-    if (mbw == USB_FUNCTION_BITMBW_32)
-    {
-        if ((count % 32) == 0)
-        {
-            /* 32byte transfer */
-            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                                2,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 2;
-        }
-        else if ((count % 16) == 0)
-        {
-            /* 16byte transfer */
-            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                                1,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 1;
-        }
-        else
-        {
-            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                                0,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 0;
-        }
-    }
-    else if (mbw == USB_FUNCTION_BITMBW_16)
-    {
-        RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                            0,
-                            USB_DnFBCFG_DFACC_SHIFT,
-                            USB_DnFBCFG_DFACC);
-        RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                            0,
-                            USB_DnFBCFG_TENDE_SHIFT,
-                            USB_DnFBCFG_TENDE);
-        dfacc = 0;
-    }
-    else
-    {
-        RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                            0,
-                            USB_DnFBCFG_DFACC_SHIFT,
-                            USB_DnFBCFG_DFACC);
-        RZA_IO_RegWrite_16(&USB200.D0FBCFG,
-                            0,
-                            USB_DnFBCFG_TENDE_SHIFT,
-                            USB_DnFBCFG_TENDE);
-        dfacc = 0;
-    }
-#endif
-    return dfacc;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_dfacc_d1
-* Description  : Set the DFACC setting value in D1FIFO using the transfer size.
-* Arguments    : uint16_t mbw     ; MBW
-*              : uint16_t count   ; data count
-* Return Value : DFACC Access mode
-*******************************************************************************/
-static uint16_t usb0_function_set_dfacc_d1 (uint16_t mbw, uint32_t count)
-{
-    uint16_t dfacc = 0;
-
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-    RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                        0,
-                        USB_DnFBCFG_DFACC_SHIFT,
-                        USB_DnFBCFG_DFACC);
-    RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                        0,
-                        USB_DnFBCFG_TENDE_SHIFT,
-                        USB_DnFBCFG_TENDE);
-    dfacc = 0;
-#else
-    if (mbw == USB_FUNCTION_BITMBW_32)
-    {
-        if ((count % 32) == 0)
-        {
-            /* 32byte transfer */
-            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                                2,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 2;
-        }
-        else if ((count % 16) == 0)
-        {
-            /* 16byte transfer */
-            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                                1,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 1;
-        }
-        else
-        {
-            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                                0,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 0;
-        }
-    }
-    else if (mbw == USB_FUNCTION_BITMBW_16)
-    {
-        RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                            0,
-                            USB_DnFBCFG_DFACC_SHIFT,
-                            USB_DnFBCFG_DFACC);
-        RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                            0,
-                            USB_DnFBCFG_TENDE_SHIFT,
-                            USB_DnFBCFG_TENDE);
-        dfacc = 0;
-    }
-    else
-    {
-        RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                            0,
-                            USB_DnFBCFG_DFACC_SHIFT,
-                            USB_DnFBCFG_DFACC);
-        RZA_IO_RegWrite_16(&USB200.D1FBCFG,
-                            0,
-                            USB_DnFBCFG_TENDE_SHIFT,
-                            USB_DnFBCFG_TENDE);
-        dfacc = 0;
-    }
-#endif
-
-    return dfacc;
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_dma.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_dma.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,346 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_dma.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb0_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-static void usb0_function_dmaint(uint16_t fifo);
-static void usb0_function_dmaint_buf2fifo(uint16_t pipe);
-static void usb0_function_dmaint_fifo2buf(uint16_t pipe);
-
-
-/*******************************************************************************
-* Function Name: usb0_function_dma_stop_d0
-* Description  : D0FIFO DMA stop
-* Arguments    : uint16_t pipe      : pipe number
-*              : uint32_t remain    : transfer byte
-* Return Value : none
-*******************************************************************************/
-void usb0_function_dma_stop_d0 (uint16_t pipe, uint32_t remain)
-{
-    uint16_t dtln;
-    uint16_t dfacc;
-    uint16_t buffer;
-    uint16_t sds_b = 1;
-
-    dfacc = RZA_IO_RegRead_16(&USB200.D0FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
-
-    if (dfacc == 2)
-    {
-        sds_b = 32;
-    }
-    else if (dfacc == 1)
-    {
-        sds_b = 16;
-    }
-    else
-    {
-        if (g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 2)
-        {
-            sds_b = 4;
-        }
-        else if (g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 1)
-        {
-            sds_b = 2;
-        }
-        else
-        {
-            sds_b = 1;
-        }
-    }
-
-    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
-        {
-            buffer = USB200.D0FIFOCTR;
-            dtln   = (buffer & USB_FUNCTION_BITDTLN);
-
-            if ((dtln % sds_b) != 0)
-            {
-                remain += (sds_b - (dtln % sds_b));
-            }
-            g_usb0_function_PipeDataSize[pipe] = (g_usb0_function_data_count[pipe] - remain);
-            g_usb0_function_data_count[pipe]   = remain;
-        }
-    }
-
-    RZA_IO_RegWrite_16(&USB200.D0FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_dma_stop_d1
-* Description  : D1FIFO DMA stop
-* Arguments    : uint16_t pipe      : pipe number
-*              : uint32_t remain    : transfer byte
-* Return Value : none
-*******************************************************************************/
-void usb0_function_dma_stop_d1 (uint16_t pipe, uint32_t remain)
-{
-    uint16_t dtln;
-    uint16_t dfacc;
-    uint16_t buffer;
-    uint16_t sds_b = 1;
-
-    dfacc = RZA_IO_RegRead_16(&USB200.D1FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
-
-    if (dfacc == 2)
-    {
-        sds_b = 32;
-    }
-    else if (dfacc == 1)
-    {
-        sds_b = 16;
-    }
-    else
-    {
-        if (g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 2)
-        {
-            sds_b = 4;
-        }
-        else if (g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 1)
-        {
-            sds_b = 2;
-        }
-        else
-        {
-            sds_b = 1;
-        }
-    }
-
-    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
-        {
-            buffer = USB200.D1FIFOCTR;
-            dtln   = (buffer & USB_FUNCTION_BITDTLN);
-
-            if ((dtln % sds_b) != 0)
-            {
-                remain += (sds_b - (dtln % sds_b));
-            }
-            g_usb0_function_PipeDataSize[pipe] = (g_usb0_function_data_count[pipe] - remain);
-            g_usb0_function_data_count[pipe]   = remain;
-        }
-    }
-
-    RZA_IO_RegWrite_16(&USB200.D1FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_dma_interrupt_d0fifo
-* Description  : This function is DMA interrupt handler entry.
-*              : Execute usb0_function_dmaint() after disabling DMA interrupt in this function.
-*              : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D0FIFO_DMA is
-*              : specified by dma->fifo.
-*              : Register this function as DMA complete interrupt.
-* Arguments    : uint32_t int_sense ; Interrupts detection mode
-*              :                    ;  INTC_LEVEL_SENSITIVE : Level sense
-*              :                    ;  INTC_EDGE_TRIGGER : Edge trigger
-* Return Value : none
-*******************************************************************************/
-void usb0_function_dma_interrupt_d0fifo (uint32_t int_sense)
-{
-    usb0_function_dmaint(USB_FUNCTION_D0FIFO);
-    g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_dma_interrupt_d1fifo
-* Description  : This function is DMA interrupt handler entry.
-*              : Execute usb0_function_dmaint() after disabling DMA interrupt in this function.
-*              : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D1FIFO_DMA is
-*              : specified by dma->fifo.
-*              : Register this function as DMA complete interrupt.
-* Arguments    : uint32_t int_sense ; Interrupts detection mode
-*              :                    ;  INTC_LEVEL_SENSITIVE : Level sense
-*              :                    ;  INTC_EDGE_TRIGGER : Edge trigger
-* Return Value : none
-*******************************************************************************/
-void usb0_function_dma_interrupt_d1fifo (uint32_t int_sense)
-{
-    usb0_function_dmaint(USB_FUNCTION_D1FIFO);
-    g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_dmaint
-* Description  : This function is DMA transfer end interrupt
-* Arguments    : uint16_t fifo  ; fifo number
-*              :                ;  USB_FUNCTION_D0FIFO
-*              :                ;  USB_FUNCTION_D1FIFO
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_dmaint (uint16_t fifo)
-{
-    uint16_t pipe;
-
-    pipe = g_usb0_function_DmaPipe[fifo];
-
-    if (g_usb0_function_DmaInfo[fifo].dir == USB_FUNCTION_BUF2FIFO)
-    {
-        usb0_function_dmaint_buf2fifo(pipe);
-    }
-    else
-    {
-        usb0_function_dmaint_fifo2buf(pipe);
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_dmaint_fifo2buf
-* Description  : Executes read completion from FIFO by DMAC.
-* Arguments    : uint16_t pipe      : pipe number
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_dmaint_fifo2buf (uint16_t pipe)
-{
-    uint32_t remain;
-    uint16_t useport;
-
-    if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
-    {
-        useport = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
-        if (useport == USB_FUNCTION_D0FIFO_DMA)
-        {
-            remain = Userdef_USB_usb0_function_stop_dma0();
-            usb0_function_dma_stop_d0(pipe, remain);
-
-            if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-            {
-                if (g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] == USB_FUNCTION_DMA_BUSYEND)
-                {
-                    USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;
-                    g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                }
-                else
-                {
-                    usb0_function_enable_brdy_int(pipe);
-                }
-            }
-        }
-        else
-        {
-            remain = Userdef_USB_usb0_function_stop_dma1();
-            usb0_function_dma_stop_d1(pipe, remain);
-
-            if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-            {
-                if (g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] == USB_FUNCTION_DMA_BUSYEND)
-                {
-                    USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;
-                    g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                }
-                else
-                {
-                    usb0_function_enable_brdy_int(pipe);
-                }
-            }
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_dmaint_buf2fifo
-* Description  : Executes write completion in FIFO by DMAC.
-* Arguments    : uint16_t pipe      : pipe number
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_dmaint_buf2fifo (uint16_t pipe)
-{
-    uint32_t remain;
-    uint16_t useport;
-
-    useport = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
-    if (useport == USB_FUNCTION_D0FIFO_DMA)
-    {
-        remain = Userdef_USB_usb0_function_stop_dma0();
-        usb0_function_dma_stop_d0(pipe, remain);
-
-        if (g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] != 0)
-        {
-            RZA_IO_RegWrite_16(&USB200.D0FIFOCTR,
-                                1,
-                                USB_DnFIFOCTR_BVAL_SHIFT,
-                                USB_DnFIFOCTR_BVAL);
-        }
-    }
-    else
-    {
-        remain = Userdef_USB_usb0_function_stop_dma1();
-        usb0_function_dma_stop_d1(pipe, remain);
-
-        if (g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] != 0)
-        {
-            RZA_IO_RegWrite_16(&USB200.D1FIFOCTR,
-                                1,
-                                USB_DnFIFOCTR_BVAL_SHIFT,
-                                USB_DnFIFOCTR_BVAL);
-        }
-    }
-
-    usb0_function_enable_bemp_int(pipe);
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_intrn.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_intrn.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,249 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_intrn.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb0_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb0_function_brdy_int
-* Description  : Executes BRDY interrupt(USB_FUNCTION_PIPE1-9).
-*              : According to the pipe that interrupt is generated in,
-*              : reads/writes buffer allocated in the pipe.
-*              : This function is executed in the BRDY interrupt handler.
-*              : This function clears BRDY interrupt status and BEMP interrupt
-*              : status.
-* Arguments    : uint16_t Status       ; BRDYSTS Register Value
-*              : uint16_t Int_enbl     ; BRDYENB Register Value
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb0_function_brdy_int (uint16_t status, uint16_t int_enb)
-{
-    uint32_t int_sense = 0;
-    uint16_t pipe;
-    uint16_t pipebit;
-
-    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
-    {
-        pipebit = g_usb0_function_bit_set[pipe];
-
-        if ((status & pipebit) && (int_enb & pipebit))
-        {
-            USB200.BRDYSTS = (uint16_t)~pipebit;
-            USB200.BEMPSTS = (uint16_t)~pipebit;
-            if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
-            {
-                if (g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] != USB_FUNCTION_DMA_READY)
-                {
-                    usb0_function_dma_interrupt_d0fifo(int_sense);
-                }
-
-                if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-                {
-                    usb0_function_read_dma(pipe);
-                    usb0_function_disable_brdy_int(pipe);
-                }
-                else
-                {
-                    USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;
-                    g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                }
-            }
-            else if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA)
-            {
-                if (g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] != USB_FUNCTION_DMA_READY)
-                {
-                    usb0_function_dma_interrupt_d1fifo(int_sense);
-                }
-
-                if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-                {
-                    usb0_function_read_dma(pipe);
-                    usb0_function_disable_brdy_int(pipe);
-                }
-                else
-                {
-                    USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;
-                    g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                }
-            }
-            else
-            {
-                if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0)
-                {
-                    usb0_function_read_buffer(pipe);
-                }
-                else
-                {
-                    usb0_function_write_buffer(pipe);
-                }
-            }
-        }
-    }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_nrdy_int
-* Description  : Executes NRDY interrupt(USB_FUNCTION_PIPE1-9).
-*              : Checks NRDY interrupt cause by PID. When the cause if STALL,
-*              : regards the pipe state as STALL and ends the processing.
-*              : Then the cause is not STALL, increments the error count to
-*              : communicate again. When the error count is 3, determines
-*              : the pipe state as DEVDRV_USBF_PIPE_NORES and ends the processing.
-*              : This function is executed in the NRDY interrupt handler.
-*              : This function clears NRDY interrupt status.
-* Arguments    : uint16_t status       ; NRDYSTS Register Value
-*              : uint16_t int_enb      ; NRDYENB Register Value
-* Return Value : none
-*******************************************************************************/
-void usb0_function_nrdy_int (uint16_t status, uint16_t int_enb)
-{
-    uint16_t pid;
-    uint16_t pipe;
-    uint16_t bitcheck;
-
-    bitcheck = (uint16_t)(status & int_enb);
-
-    USB200.NRDYSTS = (uint16_t)~status;
-
-    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
-    {
-        if ((bitcheck&g_usb0_function_bit_set[pipe]) == g_usb0_function_bit_set[pipe])
-        {
-            if (RZA_IO_RegRead_16(&USB200.SYSCFG0, USB_SYSCFG_DCFM_SHIFT, USB_SYSCFG_DCFM) == 1)
-            {
-                if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT)
-                {
-                    pid = usb0_function_get_pid(pipe);
-                    if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
-                    {
-                        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
-                    }
-                    else
-                    {
-                        g_usb0_function_PipeIgnore[pipe]++;
-                        if (g_usb0_function_PipeIgnore[pipe] == 3)
-                        {
-                            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
-                        }
-                        else
-                        {
-                            usb0_function_set_pid_buf(pipe);
-                        }
-                    }
-                }
-            }
-            else
-            {
-                /* USB Function */
-            }
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_bemp_int
-* Description  : Executes BEMP interrupt(USB_FUNCTION_PIPE1-9).
-* Arguments    : uint16_t status       ; BEMPSTS Register Value
-*              : uint16_t int_enb      ; BEMPENB Register Value
-* Return Value : none
-*******************************************************************************/
-void usb0_function_bemp_int (uint16_t status, uint16_t int_enb)
-{
-    uint16_t pid;
-    uint16_t pipe;
-    uint16_t bitcheck;
-    uint16_t inbuf;
-
-    bitcheck = (uint16_t)(status & int_enb);
-
-    USB200.BEMPSTS = (uint16_t)~status;
-
-    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
-    {
-        if ((bitcheck&g_usb0_function_bit_set[pipe]) == g_usb0_function_bit_set[pipe])
-        {
-            pid = usb0_function_get_pid(pipe);
-
-            if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
-            {
-                g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
-            }
-            else
-            {
-                inbuf = usb0_function_get_inbuf(pipe);
-
-                if (inbuf == 0)
-                {
-                    usb0_function_disable_bemp_int(pipe);
-                    usb0_function_set_pid_nak(pipe);
-                    g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                }
-            }
-        }
-    }
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_lib.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_lib.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2026 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_lib.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb0_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb0_function_enable_brdy_int
-* Description  : Enables BRDY interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
-*              : BRDY. Enables BRDY interrupt in the pipe specified by the argument
-*              : in the disabled status. After enabling BRDY, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe           ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_enable_brdy_int (uint16_t pipe)
-{
-    /* enable brdy interrupt */
-    USB200.BRDYENB |= (uint16_t)g_usb0_function_bit_set[pipe];
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_disable_brdy_int
-* Description  : Disables BRDY interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
-*              : BRDY. Enables BRDY interrupt in the pipe specified by the argument
-*              : in the disabled status. After disabling BRDY, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_disable_brdy_int (uint16_t pipe)
-{
-    /* disable brdy interrupt */
-    USB200.BRDYENB &= (uint16_t)~(g_usb0_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_clear_brdy_sts
-* Description  : Clear BRDY interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_clear_brdy_sts (uint16_t pipe)
-{
-    /* clear brdy status */
-    USB200.BRDYSTS = (uint16_t)~(g_usb0_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_enable_bemp_int
-* Description  : Enables BEMP interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
-*              : BEMP. Enables BEMP interrupt in the pipe specified by the argument
-*              : in the disabled status. After enabling BEMP, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe           ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_enable_bemp_int (uint16_t pipe)
-{
-    /* enable bemp interrupt */
-    USB200.BEMPENB |= (uint16_t)g_usb0_function_bit_set[pipe];
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_disable_bemp_int
-* Description  : Disables BEMP interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
-*              : BEMP. Enables BEMP interrupt in the pipe specified by the argument
-*              : in the disabled status. After enabling BEMP, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe           ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_disable_bemp_int (uint16_t pipe)
-{
-    /* disable bemp interrupt */
-    USB200.BEMPENB &= (uint16_t)~(g_usb0_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_clear_bemp_sts
-* Description  : Clear BEMP interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_clear_bemp_sts (uint16_t pipe)
-{
-    /* clear bemp status */
-    USB200.BEMPSTS = (uint16_t)~(g_usb0_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_enable_nrdy_int
-* Description  : Enables NRDY interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
-*              : NRDY. Enables NRDY interrupt in the pipe specified by the argument
-*              : in the disabled status. After enabling NRDY, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe             ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_enable_nrdy_int (uint16_t pipe)
-{
-    /* enable nrdy interrupt */
-    USB200.NRDYENB |= (uint16_t)g_usb0_function_bit_set[pipe];
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_disable_nrdy_int
-* Description  : Disables NRDY interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
-*              : NRDY. Disables NRDY interrupt in the pipe specified by the argument
-*              : in the disabled status. After disabling NRDY, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_disable_nrdy_int (uint16_t pipe)
-{
-    /* disable nrdy interrupt */
-    USB200.NRDYENB &= (uint16_t)~(g_usb0_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_clear_nrdy_sts
-* Description  : Clear NRDY interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_clear_nrdy_sts (uint16_t pipe)
-{
-    /* clear nrdy status */
-    USB200.NRDYSTS = (uint16_t)~(g_usb0_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_is_hispeed
-* Description  : Returns the result of USB reset hand shake (RHST) as
-*              : return value.
-* Arguments    : none
-* Return Value : USB_FUNCTION_HIGH_SPEED    ; Hi-Speed
-*              : USB_FUNCTION_FULL_SPEED    ; Full-Speed
-*              : LOW_SPEED                  ; Low-Speed
-*              : USB_FUNCTION_NON_SPEED     ; error
-*******************************************************************************/
-uint16_t usb0_function_is_hispeed (void)
-{
-    uint16_t rhst;
-    uint16_t speed;
-
-    rhst = RZA_IO_RegRead_16(&USB200.DVSTCTR0, USB_DVSTCTR0_RHST_SHIFT, USB_DVSTCTR0_RHST);
-
-    if (rhst == USB_FUNCTION_HSMODE)
-    {
-        speed = USB_FUNCTION_HIGH_SPEED;
-    }
-    else if (rhst == USB_FUNCTION_FSMODE)
-    {
-        speed = USB_FUNCTION_FULL_SPEED;
-    }
-    else if (rhst == USB_FUNCTION_LSMODE)
-    {
-        speed = USB_FUNCTION_LOW_SPEED;
-    }
-    else
-    {
-        speed = USB_FUNCTION_NON_SPEED;
-    }
-
-    return speed;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_is_hispeed_enable
-* Description  : Returns the USB High-Speed connection enabled status as
-*              : return value.
-* Arguments    : none
-* Return Value : DEVDRV_USBF_YES  : Hi-Speed Enable
-*              : DEVDRV_USBF_NO   : Hi-Speed Disable
-*******************************************************************************/
-uint16_t usb0_function_is_hispeed_enable (void)
-{
-    uint16_t ret;
-
-    ret = DEVDRV_USBF_NO;
-
-    if (RZA_IO_RegRead_16(&USB200.SYSCFG0, USB_SYSCFG_HSE_SHIFT, USB_SYSCFG_HSE) == 1)
-    {
-        ret = DEVDRV_USBF_YES;
-    }
-
-    return ret;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_pid_buf
-* Description  : Enables communicaqtion in the pipe specified by the argument
-*              : (BUF).
-* Arguments    : uint16_t pipe             ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_set_pid_buf (uint16_t pipe)
-{
-    uint16_t pid;
-
-    pid = usb0_function_get_pid(pipe);
-
-    if (pid == DEVDRV_USBF_PID_STALL2)
-    {
-        usb0_function_set_pid_nak(pipe);
-    }
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            RZA_IO_RegWrite_16(&USB200.DCPCTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_DCPCTR_PID_SHIFT,
-                                USB_DCPCTR_PID);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_9_PID_SHIFT,
-                                USB_PIPEnCTR_9_PID);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_pid_nak
-* Description  : Disables communication (NAK) in the pipe specified by the argument.
-*              : When the pipe status was enabling communication (BUF) before
-*              : executing before executing this function, waits in the software
-*              : until the pipe becomes ready after setting disabled.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_set_pid_nak (uint16_t pipe)
-{
-    uint16_t pid;
-    uint16_t pbusy;
-    uint32_t loop;
-
-    pid = usb0_function_get_pid(pipe);
-
-    if (pid == DEVDRV_USBF_PID_STALL2)
-    {
-        usb0_function_set_pid_stall(pipe);
-    }
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            RZA_IO_RegWrite_16(&USB200.DCPCTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_DCPCTR_PID_SHIFT,
-                                USB_DCPCTR_PID);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_9_PID_SHIFT,
-                                USB_PIPEnCTR_9_PID);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        default:
-        break;
-    }
-
-    if (pid == DEVDRV_USBF_PID_BUF)
-    {
-        for (loop = 0; loop < 200; loop++)
-        {
-            switch (pipe)
-            {
-                case USB_FUNCTION_PIPE0:
-                    pbusy = RZA_IO_RegRead_16(&USB200.DCPCTR,
-                                                USB_DCPCTR_PBUSY_SHIFT,
-                                                USB_DCPCTR_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE1:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
-                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_1_5_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE2:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
-                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_1_5_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE3:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
-                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_1_5_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE4:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
-                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_1_5_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE5:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
-                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_1_5_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE6:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE6CTR,
-                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_6_8_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE7:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE7CTR,
-                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_6_8_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE8:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE8CTR,
-                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_6_8_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE9:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
-                                                USB_PIPEnCTR_9_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_9_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPEA:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEACTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPEB:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPEC:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPECCTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPED:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPEE:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEECTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPEF:
-                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                default:
-                    pbusy   = 1;
-                break;
-            }
-
-            if (pbusy == 0)
-            {
-                break;
-            }
-            Userdef_USB_usb0_function_delay_500ns();
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_pid_stall
-* Description  : Disables communication (STALL) in the pipe specified by the
-*              : argument.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_set_pid_stall (uint16_t pipe)
-{
-    uint16_t pid;
-
-    pid = usb0_function_get_pid(pipe);
-    if (pid == DEVDRV_USBF_PID_BUF)
-    {
-        switch (pipe)
-        {
-            case USB_FUNCTION_PIPE0:
-                RZA_IO_RegWrite_16(&USB200.DCPCTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_DCPCTR_PID_SHIFT,
-                                    USB_DCPCTR_PID);
-            break;
-
-            case USB_FUNCTION_PIPE1:
-                RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE2:
-                RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE3:
-                RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE4:
-                RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE5:
-                RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE6:
-                RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE7:
-                RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE8:
-                RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE9:
-                RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_9_PID_SHIFT,
-                                    USB_PIPEnCTR_9_PID);
-            break;
-
-            case USB_FUNCTION_PIPEA:
-                RZA_IO_RegWrite_16(&USB200.PIPEACTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEB:
-                RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEC:
-                RZA_IO_RegWrite_16(&USB200.PIPECCTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPED:
-                RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEE:
-                RZA_IO_RegWrite_16(&USB200.PIPEECTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEF:
-                RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            default:
-            break;
-        }
-    }
-    else
-    {
-        switch (pipe)
-        {
-            case USB_FUNCTION_PIPE0:
-                RZA_IO_RegWrite_16(&USB200.DCPCTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_DCPCTR_PID_SHIFT,
-                                    USB_DCPCTR_PID);
-            break;
-
-            case USB_FUNCTION_PIPE1:
-                RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE2:
-                RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE3:
-                RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE4:
-                RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE5:
-                RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE6:
-                RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE7:
-                RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE8:
-                RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE9:
-                RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_9_PID_SHIFT,
-                                    USB_PIPEnCTR_9_PID);
-            break;
-
-            case USB_FUNCTION_PIPEA:
-                RZA_IO_RegWrite_16(&USB200.PIPEACTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEB:
-                RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEC:
-                RZA_IO_RegWrite_16(&USB200.PIPECCTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPED:
-                RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEE:
-                RZA_IO_RegWrite_16(&USB200.PIPEECTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEF:
-                RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            default:
-            break;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_clear_pid_stall
-* Description  : Disables communication (NAK) in the pipe specified by the argument.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_clear_pid_stall (uint16_t pipe)
-{
-    usb0_function_set_pid_nak(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_get_pid
-* Description  : Returns the pipe state specified by the argument.
-* Arguments    : uint16_t pipe          ; Pipe Number
-* Return Value : PID
-*******************************************************************************/
-uint16_t usb0_function_get_pid (uint16_t pipe)
-{
-    uint16_t pid;
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            pid = RZA_IO_RegRead_16(&USB200.DCPCTR,
-                                    USB_DCPCTR_PID_SHIFT,
-                                    USB_DCPCTR_PID);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            pid = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            pid = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            pid = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            pid = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            pid = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            pid = RZA_IO_RegRead_16(&USB200.PIPE6CTR,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            pid = RZA_IO_RegRead_16(&USB200.PIPE7CTR,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            pid = RZA_IO_RegRead_16(&USB200.PIPE8CTR,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            pid = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
-                                    USB_PIPEnCTR_9_PID_SHIFT,
-                                    USB_PIPEnCTR_9_PID);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            pid = RZA_IO_RegRead_16(&USB200.PIPEACTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            pid = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            pid = RZA_IO_RegRead_16(&USB200.PIPECCTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            pid = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            pid = RZA_IO_RegRead_16(&USB200.PIPEECTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            pid = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        default:
-            pid = 0;
-        break;
-    }
-
-    return pid;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_csclr
-* Description  : CSPLIT status clear setting of sprit transaction in specified
-*              : pipe is performed.
-*              : When SQSET bit or SQCLR bit, and SQSET bit or SQCLR bit
-*              : in DCPCTR register are continuously changed (when the sequence
-*              : toggle bit of data PID is continuously changed over two or more pipes),
-*              : the access cycle with 120 ns and more than 5 cycle bus clock is necessary.
-*              : Do not set both SQCLR bit and SQSET bit to 1 at the same time.
-*              : In addition, both bits should be operated after PID is set to NAK.
-*              : However, when it is set to the isochronous transfer as the transfer type
-*              : (TYPE=11), writing in SQSET bit is disabled.
-* Arguments    : uint16_t pipe     ; Pipe number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_set_csclr (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            RZA_IO_RegWrite_16(&USB200.DCPCTR,
-                                1,
-                                USB_DCPCTR_CSCLR_SHIFT,
-                                USB_DCPCTR_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
-                                1,
-                                USB_PIPEnCTR_9_CSCLR_SHIFT,
-                                USB_PIPEnCTR_9_CSCLR);
-        break;
-
-        default:
-            /* PIPEA-F have not CSCLR */
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_sqclr
-* Description  : Sets the sequence bit of the pipe specified by the argument to
-*              : DATA0.
-* Arguments    : uint16_t pipe              ; Pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_set_sqclr (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            RZA_IO_RegWrite_16(&USB200.DCPCTR,
-                                1,
-                                USB_DCPCTR_SQCLR_SHIFT,
-                                USB_DCPCTR_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
-                                1,
-                                USB_PIPEnCTR_9_SQCLR_SHIFT,
-                                USB_PIPEnCTR_9_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_sqset
-* Description  : Sets the sequence bit of the pipe specified by the argument to
-*              : DATA1.
-* Arguments    : uint16_t pipe   ; Pipe number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_set_sqset (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            RZA_IO_RegWrite_16(&USB200.DCPCTR,
-                                1,
-                                USB_DCPCTR_SQSET_SHIFT,
-                                USB_DCPCTR_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
-                                USB_PIPEnCTR_1_5_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
-                                USB_PIPEnCTR_1_5_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
-                                USB_PIPEnCTR_1_5_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
-                                USB_PIPEnCTR_1_5_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
-                                USB_PIPEnCTR_1_5_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
-                                USB_PIPEnCTR_6_8_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
-                                USB_PIPEnCTR_6_8_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
-                                USB_PIPEnCTR_6_8_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
-                                1,
-                                USB_PIPEnCTR_9_SQSET_SHIFT,
-                                USB_PIPEnCTR_9_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_get_sqmon
-* Description  : Toggle bit of specified pipe is obtained
-* Arguments    : uint16_t pipe   ; Pipe number
-* Return Value : sqmon
-*******************************************************************************/
-uint16_t usb0_function_get_sqmon (uint16_t pipe)
-{
-    uint16_t sqmon;
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            sqmon = RZA_IO_RegRead_16(&USB200.DCPCTR,
-                                        USB_DCPCTR_SQMON_SHIFT,
-                                        USB_DCPCTR_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
-                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
-                                        USB_PIPEnCTR_1_5_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
-                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
-                                        USB_PIPEnCTR_1_5_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
-                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
-                                        USB_PIPEnCTR_1_5_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
-                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
-                                        USB_PIPEnCTR_1_5_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
-                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
-                                        USB_PIPEnCTR_1_5_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPE6CTR,
-                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
-                                        USB_PIPEnCTR_6_8_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPE7CTR,
-                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
-                                        USB_PIPEnCTR_6_8_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPE8CTR,
-                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
-                                        USB_PIPEnCTR_6_8_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
-                                        USB_PIPEnCTR_9_SQMON_SHIFT,
-                                        USB_PIPEnCTR_9_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPEACTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPECCTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPEECTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            sqmon = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        default:
-            sqmon = 0;
-        break;
-    }
-
-    return sqmon;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_aclrm
-* Description  : The buffer of specified pipe is initialized
-* Arguments    : uint16_t pipe    : Pipe
-* Return Value : none
-*******************************************************************************/
-void usb0_function_aclrm (uint16_t pipe)
-{
-    usb0_function_set_aclrm(pipe);
-    usb0_function_clr_aclrm(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_aclrm
-* Description  : The auto buffer clear mode of specified pipe is enabled
-* Arguments    : uint16_t pipe    : Pipe
-* Return Value : none
-*******************************************************************************/
-void usb0_function_set_aclrm (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
-                                1,
-                                USB_PIPEnCTR_9_ACLRM_SHIFT,
-                                USB_PIPEnCTR_9_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_clr_aclrm
-* Description  : The auto buffer clear mode of specified pipe is enabled
-* Arguments    : uint16_t pipe    : Pipe
-* Return Value : none
-*******************************************************************************/
-void usb0_function_clr_aclrm (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
-                                0,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
-                                0,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
-                                0,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
-                                0,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
-                                0,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
-                                0,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
-                                0,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
-                                0,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
-                                0,
-                                USB_PIPEnCTR_9_ACLRM_SHIFT,
-                                USB_PIPEnCTR_9_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_get_inbuf
-* Description  : Returns INBUFM of the pipe specified by the argument.
-* Arguments    : uint16_t pipe             ; Pipe Number
-* Return Value : inbuf
-*******************************************************************************/
-uint16_t usb0_function_get_inbuf (uint16_t pipe)
-{
-    uint16_t inbuf;
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            inbuf = 0;
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
-                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_1_5_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
-                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_1_5_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
-                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_1_5_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
-                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_1_5_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
-                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_1_5_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            inbuf = 0;
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            inbuf = 0;
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            inbuf = 0;
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
-                                    USB_PIPEnCTR_9_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_9_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPEACTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPECCTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPEECTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            inbuf = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        default:
-            inbuf = 0;
-        break;
-    }
-
-    return inbuf;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_setting_interrupt
-* Description  : Sets the USB module interrupt level.
-* Arguments    : uint8_t level ;interrupt level
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb0_function_setting_interrupt (uint8_t level)
-{
-    uint16_t d0fifo_dmaintid;
-    uint16_t d1fifo_dmaintid;
-
-    R_INTC_RegistIntFunc(INTC_ID_USBI0, usb0_function_interrupt);
-    R_INTC_SetPriority(INTC_ID_USBI0, level);
-    R_INTC_Enable(INTC_ID_USBI0);
-
-    d0fifo_dmaintid = Userdef_USB_usb0_function_d0fifo_dmaintid();
-
-    if (d0fifo_dmaintid != 0xFFFF)
-    {
-        R_INTC_RegistIntFunc(d0fifo_dmaintid, usb0_function_dma_interrupt_d0fifo);
-        R_INTC_SetPriority(d0fifo_dmaintid, level);
-        R_INTC_Enable(d0fifo_dmaintid);
-    }
-
-    d1fifo_dmaintid = Userdef_USB_usb0_function_d1fifo_dmaintid();
-
-    if (d1fifo_dmaintid != 0xFFFF)
-    {
-        R_INTC_RegistIntFunc(d1fifo_dmaintid, usb0_function_dma_interrupt_d1fifo);
-        R_INTC_SetPriority(d1fifo_dmaintid, level);
-        R_INTC_Enable(d1fifo_dmaintid);
-    }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_reset_module
-* Description  : Initializes the USB module.
-*              : Enables providing clock to the USB module.
-*              : Sets USB bus wait register.
-* Arguments    : uint16_t clockmode ; 48MHz ; USBFCLOCK_X1_48MHZ
-*              :                    ; 12MHz ; USBFCLOCK_EXTAL_12MHZ
-* Return Value : none
-*******************************************************************************/
-void usb0_function_reset_module (uint16_t clockmode)
-{
-    /* UPLLE bit is only USB0 */
-    if (RZA_IO_RegRead_16(&USB200.SYSCFG0,
-                                USB_SYSCFG_UPLLE_SHIFT,
-                                USB_SYSCFG_UPLLE) == 1)
-    {
-        if ((USB200.SYSCFG0 & USB_FUNCTION_BITUCKSEL) != clockmode)
-        {
-            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
-                                0,
-                                USB_SUSPMODE_SUSPM_SHIFT,
-                                USB_SUSPMODE_SUSPM);
-            USB200.SYSCFG0 = 0;
-            USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
-            Userdef_USB_usb0_function_delay_xms(1);
-            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
-                                1,
-                                USB_SUSPMODE_SUSPM_SHIFT,
-                                USB_SUSPMODE_SUSPM);
-        }
-        else
-        {
-            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
-                                0,
-                                USB_SUSPMODE_SUSPM_SHIFT,
-                                USB_SUSPMODE_SUSPM);
-            Userdef_USB_usb0_function_delay_xms(1);
-            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
-                                1,
-                                USB_SUSPMODE_SUSPM_SHIFT,
-                                USB_SUSPMODE_SUSPM);
-        }
-    }
-    else
-    {
-        RZA_IO_RegWrite_16(&USB200.SUSPMODE,
-                            0,
-                            USB_SUSPMODE_SUSPM_SHIFT,
-                            USB_SUSPMODE_SUSPM);
-        USB200.SYSCFG0 = 0;
-        USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
-        Userdef_USB_usb0_function_delay_xms(1);
-        RZA_IO_RegWrite_16(&USB200.SUSPMODE,
-                            1,
-                            USB_SUSPMODE_SUSPM_SHIFT,
-                            USB_SUSPMODE_SUSPM);
-    }
-
-    USB200.BUSWAIT = (uint16_t)(USB_FUNCTION_BUSWAIT_05 & USB_FUNCTION_BITBWAIT);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_get_buf_size
-* Description  : Obtains pipe buffer size specified by the argument and
-*              : maximum packet size of the USB device in use.
-*              : When USB_FUNCTION_PIPE0 is specified by the argument, obtains the maximum
-*              : packet size of the USB device using the corresponding pipe.
-*              : For the case that USB_FUNCTION_PIPE0 is not assigned by the argument, when the
-*              : corresponding pipe is in continuous transfer mode,
-*              : obtains the buffer size allocated in the corresponcing pipe,
-*              : when incontinuous transfer, obtains maximum packet size.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : Maximum packet size or buffer size
-*******************************************************************************/
-uint16_t usb0_function_get_buf_size (uint16_t pipe)
-{
-    uint16_t size;
-    uint16_t bufsize;
-
-    if (pipe == USB_FUNCTION_PIPE0)
-    {
-        size = RZA_IO_RegRead_16(&USB200.DCPMAXP,
-                                USB_DCPMAXP_MXPS_SHIFT,
-                                USB_DCPMAXP_MXPS);
-    }
-    else
-    {
-        if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_CNTMD_SHIFT, USB_PIPECFG_CNTMD) == 1)
-        {
-            bufsize = RZA_IO_RegRead_16(&g_usb0_function_pipebuf[pipe], USB_PIPEBUF_BUFSIZE_SHIFT, USB_PIPEBUF_BUFSIZE);
-            size = (uint16_t)((bufsize + 1) * USB_FUNCTION_PIPExBUF);
-        }
-        else
-        {
-            size = RZA_IO_RegRead_16(&g_usb0_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
-        }
-    }
-    return size;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_get_mxps
-* Description  : Obtains maximum packet size of the USB device using the pipe
-*              : specified by the argument.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : Max Packet Size
-*******************************************************************************/
-uint16_t usb0_function_get_mxps (uint16_t pipe)
-{
-    uint16_t size;
-
-    if (pipe == USB_FUNCTION_PIPE0)
-    {
-        size = RZA_IO_RegRead_16(&USB200.DCPMAXP,
-                                USB_DCPMAXP_MXPS_SHIFT,
-                                USB_DCPMAXP_MXPS);
-    }
-    else
-    {
-        size = RZA_IO_RegRead_16(&g_usb0_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
-    }
-    return size;
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_api.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_api.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,441 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_api.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb0_function.h"
-#include "dev_drv.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb0_api_function_init
-* Description  : Initializes the USB module in the USB function mode.
-* Arguments    : uint8_t  int_level ; interruput level
-*              : uint16_t mode      : Speed modes
-*              :                    :  USB_FUCNTION_HIGH_SPEED: High-speed device
-*              :                    :  USB_FUCNTION_FULL_SPEED: Full-speed device
-*              : uint16_t clockmode ; 48MHz ; USBFCLOCK_X1_48MHZ
-*              :                    ; 12MHz ; USBFCLOCK_EXTAL_12MHZ
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb0_api_function_init (uint8_t int_level, uint16_t mode, uint16_t clockmode)
-{
-    volatile uint8_t dummy_buf;
-
-    CPG.STBCR7  &= 0xfd;                        /* The clock of USB0 modules is permitted */
-    dummy_buf   = CPG.STBCR7;                   /* (Dummy read) */
-
-    usb0_function_setting_interrupt(int_level);
-
-    usb0_function_reset_module(clockmode);      /* reset USB module with setting tranciever */
-                                                /* and HSE=1                                */
-
-    usb0_function_init_status();                /* clear variables                          */
-
-    usb0_function_InitModule(mode);             /* select USB Function and Interrupt Enable */
-                                                /* Detect USB Device to attach or detach    */
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_api_function_IsConfigured
-* Description  : Checks if the USB device is configured to return the result as
-*              : the return value.
-* Arguments    : none
-* Return Value : DEVDRV_USBF_YES  : Configured & Configured Suspend
-*              : DEVDRV_USBF_NO   : not Configured
-*******************************************************************************/
-uint16_t usb0_api_function_IsConfigured (void)
-{
-    uint16_t dvst;
-
-    dvst = usb0_function_GetDeviceState();
-
-    if ((dvst == USB_FUNCTION_DVST_CONFIGURED) ||
-        (dvst == USB_FUNCTION_DVST_CONFIGURED_SUSPEND))
-    {
-        return DEVDRV_USBF_YES;
-    }
-
-    return DEVDRV_USBF_NO;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_GetDeviceState
-* Description  : Returns the state of USB device.
-* Arguments    : none
-* Return Value : Device States
-*******************************************************************************/
-uint16_t usb0_function_GetDeviceState (void)
-{
-    uint16_t dvsq;
-    uint16_t dvst;
-
-    dvsq = USB200.INTSTS0;
-    switch(dvsq & USB_FUNCTION_BITDVSQ)
-    {
-        case USB_FUNCTION_DS_POWR:                      /* Power state *//* power-on */
-            dvst = USB_FUNCTION_DVST_POWERED;
-        break;
-
-        case USB_FUNCTION_DS_DFLT:                      /* Default state *//* bus-reset */
-            dvst = USB_FUNCTION_DVST_DEFAULT;
-        break;
-
-        case USB_FUNCTION_DS_ADDS:                      /* Address state */
-            dvst = USB_FUNCTION_DVST_ADDRESS;
-        break;
-
-        case USB_FUNCTION_DS_CNFG:                      /* Configured state */
-            dvst = USB_FUNCTION_DVST_CONFIGURED;
-        break;
-
-        case USB_FUNCTION_DS_SPD_CNFG:                  /* Configured Suspend state */
-            dvst = USB_FUNCTION_DVST_CONFIGURED_SUSPEND;
-        break;
-
-        case USB_FUNCTION_DS_SPD_POWR:                  /* Power      Suspend state */
-        case USB_FUNCTION_DS_SPD_DFLT:                  /* Default    Suspend state */
-        case USB_FUNCTION_DS_SPD_ADDR:                  /* Address    Suspend state */
-            dvst = USB_FUNCTION_DVST_SUSPEND;
-        break;
-
-        default:                                        /* error */
-            dvst = USB_FUNCTION_DVST_SUSPEND;
-        break;
-    }
-
-    return dvst;
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_start_receive_transfer
-* Description  : Starts USB data reception using the pipe specified in the argument.
-*              : The FIFO for using is set in the pipe definition table.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data data Address
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    usb0_function_start_receive_transfer(pipe, size, data);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_start_send_transfer
-* Description  : Starts the USB data communication using pipe specified by the argument.
-* Arguments    : uint16_t pipe     ; Pipe Number
-*              : uint32_t size     ; Data Size
-*              : uint8_t *data     ; Data data Address
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb0_api_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t status;
-
-    status = usb0_function_start_send_transfer(pipe, size, data);
-
-    return status;
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_check_pipe_status
-* Description  : Starts USB data reception using the pipe specified in the argument.
-*              : The FIFO for using is set in the pipe definition table.
-* Arguments    : uint16_t  pipe     ; Pipe Number
-*              : uint32_t *size     ; Data Size
-* Return Value : Pipe Status
-*******************************************************************************/
-uint16_t usb0_api_function_check_pipe_status (uint16_t pipe, uint32_t * size)
-{
-    if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_DONE)
-    {
-        *size = g_usb0_function_PipeDataSize[pipe];
-        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
-
-        return DEVDRV_USBF_PIPE_DONE;
-    }
-    else if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_NORES)
-    {
-        *size = 0;
-        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
-
-        return DEVDRV_USBF_PIPE_NORES;
-    }
-    else if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_STALL)
-    {
-        *size = 0;
-        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
-
-        return DEVDRV_USBF_PIPE_STALL;
-    }
-    else if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_FIFOERROR)
-    {
-        *size = 0;
-        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
-
-        return DEVDRV_USBF_FIFOERROR;
-    }
-    else
-    {
-        /* Do Nothing */
-    }
-
-    return g_usb0_function_pipe_status[pipe];
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_clear_pipe_status
-* Description  : Starts USB data reception using the pipe specified in the argument.
-*              : The FIFO for using is set in the pipe definition table.
-* Arguments    : uint16_t  pipe     ; Pipe Number
-* Return Value : Pipe Status
-*******************************************************************************/
-void usb0_api_function_clear_pipe_status (uint16_t pipe)
-{
-    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
-    g_usb0_function_PipeDataSize[pipe] = 0;
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_set_pid_buf
-* Description  : Enables communicaqtion in the pipe specified by the argument
-*              : (BUF).
-* Arguments    : uint16_t pipe             ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_set_pid_buf (uint16_t pipe)
-{
-    usb0_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_set_pid_nak
-* Description  : Disables communication (NAK) in the pipe specified by the argument.
-*              : When the pipe status was enabling communication (BUF) before
-*              : executing before executing this function, waits in the software
-*              : until the pipe becomes ready after setting disabled.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_set_pid_nak (uint16_t pipe)
-{
-    usb0_function_set_pid_nak(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_set_pid_stall
-* Description  : Disables communication (STALL) in the pipe specified by the
-*              : argument.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_set_pid_stall (uint16_t pipe)
-{
-    usb0_function_set_pid_stall(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_clear_pid_stall
-* Description  : Disables communication (NAK) in the pipe specified by the argument.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_clear_pid_stall (uint16_t pipe)
-{
-    usb0_function_clear_pid_stall(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_get_pid
-* Description  : Returns the pipe state specified by the argument.
-* Arguments    : uint16_t pipe          ; Pipe Number
-* Return Value : PID
-*******************************************************************************/
-uint16_t usb0_api_function_get_pid (uint16_t pipe)
-{
-    uint16_t pid;
-
-    pid = usb0_function_get_pid(pipe);
-
-    return pid;
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_check_stall
-* Description  :
-* Arguments    : uint16_t pipe          ; Pipe Number
-* Return Value : PID
-*******************************************************************************/
-int32_t usb0_api_function_check_stall (uint16_t pipe)
-{
-    uint16_t pid;
-
-    pid = usb0_function_get_pid(pipe);
-
-    if ((pid & DEVDRV_USBF_PID_STALL) == DEVDRV_USBF_PID_STALL)
-    {
-        return DEVDRV_USBF_STALL;
-    }
-
-    return DEVDRV_SUCCESS;
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_set_sqclr
-* Description  : Sets the sequence bit of the pipe specified by the argument to
-*              : DATA0.
-* Arguments    : uint16_t pipe              ; Pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_set_sqclr (uint16_t pipe)
-{
-    usb0_function_set_sqclr(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_set_sqset
-* Description  : Sets the sequence bit of the pipe specified by the argument to
-*              : DATA1.
-* Arguments    : uint16_t pipe   ; Pipe number
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_set_sqset (uint16_t pipe)
-{
-    usb0_function_set_sqset(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_set_csclr
-* Description  : CSPLIT status clear setting of sprit transaction in specified
-*              : pipe is performed.
-*              : When SQSET bit or SQCLR bit, and SQSET bit or SQCLR bit
-*              : in DCPCTR register are continuously changed (when the sequence
-*              : toggle bit of data PID is continuously changed over two or more pipes),
-*              : the access cycle with 120 ns and more than 5 cycle bus clock is necessary.
-*              : Do not set both SQCLR bit and SQSET bit to 1 at the same time.
-*              : In addition, both bits should be operated after PID is set to NAK.
-*              : However, when it is set to the isochronous transfer as the transfer type
-*              : (TYPE=11), writing in SQSET bit is disabled.
-* Arguments    : uint16_t pipe     ; Pipe number
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_set_csclr (uint16_t pipe)
-{
-    usb0_function_set_csclr(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_set_curpipe
-* Description  : Allocates FIF0 specifed by the argument in the pipe assigned
-*              : by the argument.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t fifosel   ; Select FIFO
-*              : uint16_t isel      ; FIFO Access Direction
-*              : uint16_t mbw       ; FIFO Port Access Bit Width
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
-{
-    usb0_function_set_curpipe(pipe, fifosel, isel, mbw);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_clear_brdy_sts
-* Description  : Clear BRDY interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_clear_brdy_sts (uint16_t pipe)
-{
-    usb0_function_clear_brdy_sts(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_clear_bemp_sts
-* Description  : Clear BEMP interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_clear_bemp_sts (uint16_t pipe)
-{
-    usb0_function_clear_bemp_sts(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_clear_nrdy_sts
-* Description  : Clear NRDY interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_clear_nrdy_sts (uint16_t pipe)
-{
-    usb0_function_clear_nrdy_sts(pipe);
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_controlrw.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_controlrw.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_controlrw.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb0_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb0_api_function_CtrlReadStart
-* Description  : Executes the USB control read transfer.
-*              : USB host controller <- USB device
-* Arguments    : uint16_t size     ; Data Size
-*              : uint8_t  *data    ; Data Address
-* Return Value : DEVDRV_USBF_WRITEEND          ; End of data write
-*              : DEVDRV_USBF_WRITESHRT         ; End of short data write
-*              : DEVDRV_USBF_WRITING           ; Continue of data write
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO access error
-*******************************************************************************/
-uint16_t usb0_api_function_CtrlReadStart (uint32_t size, uint8_t * data)
-{
-    uint16_t status;
-    uint16_t mbw;
-
-    usb0_function_set_pid_nak(USB_FUNCTION_PIPE0);
-
-    g_usb0_function_data_count[USB_FUNCTION_PIPE0]   = size;
-    g_usb0_function_data_pointer[USB_FUNCTION_PIPE0] = data;
-
-    mbw = usb0_function_get_mbw(g_usb0_function_data_count[USB_FUNCTION_PIPE0],
-                                 (uint32_t)g_usb0_function_data_pointer[USB_FUNCTION_PIPE0]);
-    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
-    USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;
-
-    status = usb0_function_write_buffer_c(USB_FUNCTION_PIPE0);
-
-    /* Peripheral Control sequence */
-    switch (status)
-    {
-        case DEVDRV_USBF_WRITESHRT:                                     /* End of data write */
-        case DEVDRV_USBF_WRITEEND:                                      /* End of data write (not null) */
-        case DEVDRV_USBF_WRITING:                                       /* Continue of data write */
-            usb0_function_enable_bemp_int(USB_FUNCTION_PIPE0);          /* Enable Empty Interrupt */
-            usb0_function_set_pid_buf(USB_FUNCTION_PIPE0);              /* Set BUF */
-        break;
-
-        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access error */
-        break;
-
-        default:
-        break;
-    }
-
-    return status;                                                      /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_CtrlWriteStart
-* Description  : Executes the USB control write transfer.
-*              : USB host controller -> USB device
-* Arguments    : uint16_t  size         ; Data Size
-*              : uint8_t  *data         ; Data Address
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_CtrlWriteStart (uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb0_function_set_pid_nak(USB_FUNCTION_PIPE0);
-
-    g_usb0_function_data_count[USB_FUNCTION_PIPE0]   = size;
-    g_usb0_function_data_pointer[USB_FUNCTION_PIPE0] = data;
-
-    mbw = usb0_function_get_mbw(g_usb0_function_data_count[USB_FUNCTION_PIPE0],
-                                (uint32_t)g_usb0_function_data_pointer[USB_FUNCTION_PIPE0]);
-    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
-    USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;
-
-    usb0_function_enable_brdy_int(USB_FUNCTION_PIPE0);
-    usb0_function_set_pid_buf(USB_FUNCTION_PIPE0);
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_global.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_global.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_global.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb0_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-const uint16_t g_usb0_function_bit_set[16] =
-{
-    0x0001, 0x0002, 0x0004, 0x0008,
-    0x0010, 0x0020, 0x0040, 0x0080,
-    0x0100, 0x0200, 0x0400, 0x0800,
-    0x1000, 0x2000, 0x4000, 0x8000
-};
-
-uint32_t g_usb0_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint8_t  * g_usb0_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-uint16_t g_usb0_function_PipeIgnore[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb0_function_PipeTbl[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb0_function_pipe_status[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint32_t g_usb0_function_PipeDataSize[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-USB_FUNCTION_DMA_t g_usb0_function_DmaInfo[2];
-uint16_t g_usb0_function_DmaPipe[2];
-uint16_t g_usb0_function_DmaBval[2];
-uint16_t g_usb0_function_DmaStatus[2];
-
-uint16_t g_usb0_function_CtrZeroLengthFlag;
-
-//uint16_t g_usb0_function_ConfigNum;
-//uint16_t g_usb0_function_Alternate[USB_FUNCTION_ALT_NO];
-//uint16_t g_usb0_function_RemoteWakeupFlag;
-uint16_t g_usb0_function_TestModeFlag;
-uint16_t g_usb0_function_TestModeSelectors;
-
-//uint16_t g_usb0_function_ReqType;
-//uint16_t g_usb0_function_ReqTypeType;
-//uint16_t g_usb0_function_ReqTypeRecip;
-//uint16_t g_usb0_function_ReqRequest;
-//uint16_t g_usb0_function_ReqValue;
-//uint16_t g_usb0_function_ReqIndex;
-//uint16_t g_usb0_function_ReqLength;
-
-//uint16_t g_usb0_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
-
-uint16_t g_usb0_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb0_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb0_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb0_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-
-/*******************************************************************************
-* Function Name: usb0_function_init_status
-* Description  : Initialization USB Sample Driver Variable.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb0_function_init_status (void)
-{
-    uint16_t pipe;
-
-    //g_usb0_function_ConfigNum         = 0;
-    //g_usb0_function_RemoteWakeupFlag  = DEVDRV_USBF_OFF;
-    g_usb0_function_TestModeFlag      = DEVDRV_USBF_OFF;
-    g_usb0_function_CtrZeroLengthFlag = 0;
-
-#if 0
-    usb0_function_clear_alt();
-#endif
-
-    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
-    {
-        g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
-        g_usb0_function_PipeDataSize[pipe] = 0;
-        g_usb0_function_data_count[pipe]   = 0;
-
-        /* pipe configuration in usb0_function_ResetEP() */
-        g_usb0_function_pipecfg[pipe]  = 0;
-        g_usb0_function_pipebuf[pipe]  = 0;
-        g_usb0_function_pipemaxp[pipe] = 0;
-        g_usb0_function_pipeperi[pipe] = 0;
-    }
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_sig.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_sig.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,330 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_sig.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb0_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-static void usb0_function_EnableINTModule(void);
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb0_function_InitModule
-* Description  : Initializes the USB module in the USB function mode.
-* Arguments    : uint16_t mode  ; USB_FUNCTION_HIGH_SPEED ; Hi-Speed Mode
-*              :                ; other                   ; Full-speed Mode
-* Return Value : none
-*******************************************************************************/
-void usb0_function_InitModule (uint16_t mode)
-{
-    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
-                        0,
-                        USB_SYSCFG_DCFM_SHIFT,
-                        USB_SYSCFG_DCFM);           /* USB function */
-
-    /* USB module operation enabled     */
-    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
-                        1,
-                        USB_SYSCFG_USBE_SHIFT,
-                        USB_SYSCFG_USBE);
-
-    if (mode == USB_FUNCTION_HIGH_SPEED)
-    {
-        RZA_IO_RegWrite_16(&USB200.SYSCFG0,
-                            1,
-                            USB_SYSCFG_HSE_SHIFT,
-                            USB_SYSCFG_HSE);        /* Hi-Speed Mode */
-    }
-    else
-    {
-        RZA_IO_RegWrite_16(&USB200.SYSCFG0,
-                            0,
-                            USB_SYSCFG_HSE_SHIFT,
-                            USB_SYSCFG_HSE);
-    }
-
-    /* for power-on                     */
-    if (usb0_function_CheckVBUStaus() == DEVDRV_USBF_ON)
-    {
-        usb0_function_EnableINTModule();            /* Interrupt Enable         */
-        usb0_function_USB_FUNCTION_Attach();        /* pull-up D+ and open D-   */
-    }
-    else
-    {
-        usb0_function_USB_FUNCTION_Detach();        /* USB Detach               */
-                                                    /* with Interrupt Enable    */
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_CheckVBUStaus
-* Description  : Checks the USB-VBUS state to returns the connection state to
-*              : the USB host.
-* Arguments    : none
-* Return Value : DEVDRV_USBF_ON     :   VBUS ON
-*              : DEVDRV_USBF_OFF    :   VBUS OFF
-*******************************************************************************/
-uint16_t usb0_function_CheckVBUStaus (void)
-{
-    uint16_t buf1;
-    uint16_t buf2;
-    uint16_t buf3;
-
-    /* monitor VBUS pins */
-    do
-    {
-        buf1 = RZA_IO_RegRead_16(&USB200.INTSTS0,
-                                USB_INTSTS0_VBSTS_SHIFT,
-                                USB_INTSTS0_VBSTS);
-        Userdef_USB_usb0_function_delay_10us(1);
-        buf2 = RZA_IO_RegRead_16(&USB200.INTSTS0,
-                                USB_INTSTS0_VBSTS_SHIFT,
-                                USB_INTSTS0_VBSTS);
-        Userdef_USB_usb0_function_delay_10us(1);
-        buf3 = RZA_IO_RegRead_16(&USB200.INTSTS0,
-                                USB_INTSTS0_VBSTS_SHIFT,
-                                USB_INTSTS0_VBSTS);
-    } while ((buf1 != buf2) || (buf2 != buf3));
-
-    if (buf1 == DEVDRV_USBF_OFF)
-    {
-        return DEVDRV_USBF_OFF;         /* detach */
-    }
-
-    return DEVDRV_USBF_ON;              /* attach */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_USB_FUNCTION_Attach
-* Description  : Connects to the USB host controller.
-*              : This function pulls up D+.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb0_function_USB_FUNCTION_Attach (void)
-{
-    Userdef_USB_usb0_function_attach();
-
-    Userdef_USB_usb0_function_delay_xms(10);
-
-    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
-                        1,
-                        USB_SYSCFG_DPRPU_SHIFT,
-                        USB_SYSCFG_DPRPU);      /* Pull-up D+ and open D- */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_USB_FUNCTION_Detach
-* Description  : Disconnects from the USB host controller.
-*              : This function opens D+/D-.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb0_function_USB_FUNCTION_Detach (void)
-{
-    uint16_t pipe;
-
-    Userdef_USB_usb0_function_detach();
-
-    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
-    {
-        if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_IDLE)
-        {
-            usb0_function_stop_transfer(pipe);
-        }
-    }
-
-    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
-                        0,
-                        USB_SYSCFG_DPRPU_SHIFT,
-                        USB_SYSCFG_DPRPU);                  /* open D+ and D- */
-
-    /* Detach Recovery */
-    Userdef_USB_usb0_function_delay_500ns();                /* need 1us=500ns * 2 wait */
-    Userdef_USB_usb0_function_delay_500ns();
-
-    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
-                        1,
-                        USB_SYSCFG_DCFM_SHIFT,
-                        USB_SYSCFG_DCFM);
-    Userdef_USB_usb0_function_delay_500ns();                /* need 100ns wait but 500ns S/W wait */
-
-    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
-                        0,
-                        USB_SYSCFG_DCFM_SHIFT,
-                        USB_SYSCFG_DCFM);
-
-    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
-                        0,
-                        USB_SYSCFG_USBE_SHIFT,
-                        USB_SYSCFG_USBE);       /* soft reset module */
-    Userdef_USB_usb0_function_delay_500ns();
-
-    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
-                        1,
-                        USB_SYSCFG_USBE_SHIFT,
-                        USB_SYSCFG_USBE);
-
-    usb0_function_EnableINTModule();            /* Interrupt Enable */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_USB_FUNCTION_BusReset
-* Description  : This function is executed when the USB device is transitioned
-*              : to POWERD_STATE. Sets the device descriptor according to the
-*              : connection speed determined by the USB reset hand shake.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-#if 0	/*The USBHAL in mbed does not need this function*/
-void usb0_function_USB_FUNCTION_BusReset (void)
-{
-    usb0_function_init_status();                                    /* memory clear */
-
-    if (usb0_function_is_hispeed() == USB_FUNCTION_HIGH_SPEED)
-    {
-        usb0_function_ResetDescriptor(USB_FUNCTION_HIGH_SPEED);     /* Device Descriptor reset */
-    }
-    else
-    {
-        usb0_function_ResetDescriptor(USB_FUNCTION_FULL_SPEED);     /* Device Descriptor reset */
-    }
-
-    usb0_function_ResetDCP();                                       /* Default Control PIPE reset */
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_USB_FUNCTION_Resume
-* Description  : This function is executed when the USB device detects a resume
-*              : signal.
-*              : The USB sample driver does not operate for this function.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-#if 0	/*The USBHAL in mbed does not need this function*/
-void usb0_function_USB_FUNCTION_Resume (void)
-{
-    /* NOP */
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_USB_FUNCTION_Suspend
-* Description  : This function is executed when the USB device detects a suspend
-*              : signal.
-*              : The USB sample driver does not operate for this function.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-#if 0	/*The USBHAL in mbed does not need this function*/
-void usb0_function_USB_FUNCTION_Suspend (void)
-{
-    /* NOP */
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_USB_FUNCTION_TestMode
-* Description  : This function is executed when the USB device is transitioned U
-*              : to TEST_MODE by the USB standard request.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb0_function_USB_FUNCTION_TestMode (void)
-{
-    switch (g_usb0_function_TestModeSelectors & USB_FUNCTION_FUNCTION_TEST_SELECT)
-    {
-        case USB_FUNCTION_FUNCTION_TEST_J:
-        case USB_FUNCTION_FUNCTION_TEST_K:
-        case USB_FUNCTION_FUNCTION_TEST_SE0_NAK:
-        case USB_FUNCTION_FUNCTION_TEST_PACKET:
-            RZA_IO_RegWrite_16(&USB200.TESTMODE,
-                                (g_usb0_function_TestModeSelectors >> 8),
-                                USB_TESTMODE_UTST_SHIFT,
-                                USB_TESTMODE_UTST);
-        break;
-
-        case USB_FUNCTION_FUNCTION_TEST_FORCE_ENABLE:
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_EnableINTModule
-* Description  : Enables USB interrupt.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_EnableINTModule (void)
-{
-    uint16_t buf;
-
-    buf  = USB200.INTENB0;
-    buf |= (USB_FUNCTION_BITVBSE | USB_FUNCTION_BITDVSE | USB_FUNCTION_BITCTRE |
-             USB_FUNCTION_BITBEMPE | USB_FUNCTION_BITNRDYE | USB_FUNCTION_BITBRDYE);
-    USB200.INTENB0 = buf;
-
-    usb0_function_enable_bemp_int(USB_FUNCTION_PIPE0);
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_sub.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_sub.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,453 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_sub.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb0_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-#if 0
-extern const uint16_t *g_usb0_function_EndPntPtr[];
-extern uint8_t         g_usb0_function_DeviceDescriptor[];
-extern uint8_t        *g_usb0_function_ConfigurationPtr[];
-#endif
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb0_function_ResetDCP
-* Description  : Initializes the default control pipe(DCP).
-* Outline      : Reset default control pipe
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb0_function_ResetDCP (void)
-{
-    USB200.DCPCFG  = 0;
-#if 0
-    USB200.DCPMAXP = g_usb0_function_DeviceDescriptor[7];
-#else
-    USB200.DCPMAXP = 64;
-#endif
-
-    USB200.CFIFOSEL  = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
-    USB200.D0FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
-    USB200.D1FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_ResetEP
-* Description  : Initializes the end point.
-* Arguments    : uint16_t num          ; Configuration Number
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb0_function_ResetEP (uint16_t num)
-{
-    uint16_t   pipe;
-    uint16_t   ep;
-    uint16_t   index;
-    uint16_t   buf;
-    uint16_t * tbl;
-
-    tbl = (uint16_t *)(g_usb0_function_EndPntPtr[num - 1]);
-
-    for (ep = 1; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
-    {
-        if (g_usb0_function_EPTableIndex[ep] != USB_FUNCTION_EP_ERROR)
-        {
-            index = (uint16_t)(USB_FUNCTION_EPTABLE_LENGTH * g_usb0_function_EPTableIndex[ep]);
-            pipe  = (uint16_t)(tbl[index + 0] & USB_FUNCTION_BITCURPIPE);
-
-            g_usb0_function_PipeTbl[pipe] = (uint16_t)( ((tbl[index + 1] & USB_FUNCTION_DIRFIELD) << 3) |
-                                                         ep                                             |
-                                                         (tbl[index + 0] & USB_FUNCTION_FIFO_USE)          );
-
-            if ((tbl[index + 1] & USB_FUNCTION_DIRFIELD) == USB_FUNCTION_DIR_P_OUT)
-            {
-                tbl[index + 1] |= USB_FUNCTION_SHTNAKON;
-#ifdef  __USB_DMA_BFRE_ENABLE__
-                /* this routine cannnot be perfomred if read operation is executed in buffer size */
-                if (((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA) ||
-                    ((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA))
-                {
-                    tbl[index + 1] |= USB_FUNCTION_BFREON;
-                }
-#endif
-            }
-
-            /* Interrupt Disable */
-            buf  = USB200.BRDYENB;
-            buf &= (uint16_t)~g_usb0_function_bit_set[pipe];
-            USB200.BRDYENB = buf;
-            buf  = USB200.NRDYENB;
-            buf &= (uint16_t)~g_usb0_function_bit_set[pipe];
-            USB200.NRDYENB = buf;
-            buf  = USB200.BEMPENB;
-            buf &= (uint16_t)~g_usb0_function_bit_set[pipe];
-            USB200.BEMPENB = buf;
-
-            usb0_function_set_pid_nak(pipe);
-
-            /* CurrentPIPE Clear */
-            if (RZA_IO_RegRead_16(&USB200.CFIFOSEL,
-                                    USB_CFIFOSEL_CURPIPE_SHIFT,
-                                    USB_CFIFOSEL_CURPIPE) == pipe)
-            {
-                RZA_IO_RegWrite_16(&USB200.CFIFOSEL,
-                                    0,
-                                    USB_CFIFOSEL_CURPIPE_SHIFT,
-                                    USB_CFIFOSEL_CURPIPE);
-            }
-
-            if (RZA_IO_RegRead_16(&USB200.D0FIFOSEL,
-                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
-                                    USB_DnFIFOSEL_CURPIPE) == pipe)
-            {
-                RZA_IO_RegWrite_16(&USB200.D0FIFOSEL,
-                                    0,
-                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
-                                    USB_DnFIFOSEL_CURPIPE);
-            }
-
-            if (RZA_IO_RegRead_16(&USB200.D1FIFOSEL,
-                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
-                                    USB_DnFIFOSEL_CURPIPE) == pipe)
-            {
-                RZA_IO_RegWrite_16(&USB200.D1FIFOSEL,
-                                    0,
-                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
-                                    USB_DnFIFOSEL_CURPIPE);
-            }
-
-            /* PIPE Configuration */
-            USB200.PIPESEL  = pipe;
-            USB200.PIPECFG  = tbl[index + 1];
-            USB200.PIPEBUF  = tbl[index + 2];
-            USB200.PIPEMAXP = tbl[index + 3];
-            USB200.PIPEPERI = tbl[index + 4];
-
-            g_usb0_function_pipecfg[pipe]  = tbl[index + 1];
-            g_usb0_function_pipebuf[pipe]  = tbl[index + 2];
-            g_usb0_function_pipemaxp[pipe] = tbl[index + 3];
-            g_usb0_function_pipeperi[pipe] = tbl[index + 4];
-
-            /* Buffer Clear */
-            usb0_function_set_sqclr(pipe);
-            usb0_function_aclrm(pipe);
-
-            /* init Global */
-            g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
-            g_usb0_function_PipeDataSize[pipe] = 0;
-        }
-    }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_EpToPipe
-* Description  : Returns the pipe which end point specified by the argument is
-*              : allocated to.
-* Arguments    : uint16_t ep       ; Direction + Endpoint Number
-* Return Value : USB_FUNCTION_EP_ERROR         : Error
-*              : Others           : Pipe Number
-*******************************************************************************/
-uint16_t usb0_function_EpToPipe (uint16_t ep)
-{
-    uint16_t pipe;
-
-    for (pipe = 1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
-    {
-        if ((g_usb0_function_PipeTbl[pipe] & 0x00ff) == ep)
-        {
-            return pipe;
-        }
-    }
-
-    return USB_FUNCTION_EP_ERROR;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_InitEPTable
-* Description  : Sets the end point by the Alternate setting value of the
-*              : configuration number and the interface number specified by the
-*              : argument.
-* Arguments    : uint16_t Con_Num       ; Configuration Number
-*              : uint16_t Int_Num       ; Interface Number
-*              : uint16_t Alt_Num       ; Alternate Setting
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb0_function_InitEPTable (uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num)
-{
-    uint8_t  * ptr;
-    uint16_t   point_interface;
-    uint16_t   point_endpoint;
-    uint16_t   length;
-    uint16_t   start;
-    uint16_t   numbers;
-    uint16_t   endpoint;
-
-    ptr = (uint8_t *)g_usb0_function_ConfigurationPtr[Con_Num - 1];
-    point_interface = *ptr;
-    length = (uint16_t)((uint16_t)*(ptr + 3) << 8 | (uint16_t)*(ptr + 2));
-    ptr  += *ptr;
-    start   = 0;
-    numbers = 0;
-    point_endpoint = 0;
-
-    for (; point_interface < length;)
-    {
-        switch (*(ptr + 1))                                     /* Descriptor Type ? */
-        {
-            case USB_FUNCTION_DT_INTERFACE:                     /* Interface */
-                if ((*(ptr + 2) == Int_Num) && (*(ptr + 3) == Alt_Num))
-                {
-                    numbers = *(ptr + 4);
-                }
-                else
-                {
-                    start  += *(ptr + 4);
-                }
-                point_interface += *ptr;
-                ptr += *ptr;
-            break;
-
-            case USB_FUNCTION_DT_ENDPOINT:                      /* Endpoint */
-                if (point_endpoint < numbers)
-                {
-                    endpoint = (uint16_t)(*(ptr + 2) & 0x0f);
-                    g_usb0_function_EPTableIndex[endpoint] = (uint16_t)(start + point_endpoint);
-                    ++point_endpoint;
-                }
-                point_interface += *ptr;
-                ptr += *ptr;
-            break;
-
-            case USB_FUNCTION_DT_DEVICE:                        /* Device */
-            case USB_FUNCTION_DT_CONFIGURATION:                 /* Configuration */
-            case USB_FUNCTION_DT_STRING:                        /* String */
-            default:                                            /* Class, Vendor, else */
-                point_interface += *ptr;
-                ptr += *ptr;
-            break;
-        }
-    }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_GetConfigNum
-* Description  : Returns the number of configuration referring to the number of
-*              : configuration described in the device descriptor.
-* Arguments    : none
-* Return Value : Number of possible configurations (bNumConfigurations).
-*******************************************************************************/
-#if 0
-uint16_t usb0_function_GetConfigNum (void)
-{
-    return (uint16_t)g_usb0_function_DeviceDescriptor[17];
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_GetInterfaceNum
-* Description  : Returns the number of interface referring to the number of
-*              : interface described in the configuration descriptor.
-* Arguments    : uint16_t num       ; Configuration Number
-* Return Value : Number of this interface (bNumInterfaces).
-*******************************************************************************/
-#if 0
-uint16_t usb0_function_GetInterfaceNum (uint16_t num)
-{
-    return (uint16_t)(*(g_usb0_function_ConfigurationPtr[num - 1] + 4));
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_GetAltNum
-* Description  : Returns the Alternate setting value of the configuration number
-*              : and the interface number specified by the argument.
-* Arguments    : uint16_t Con_Num       ; Configuration Number
-*              : uint16_t Int_Num       ; Interface Number
-* Return Value : Value used to select this alternate setting(bAlternateSetting).
-*******************************************************************************/
-#if 0
-uint16_t usb0_function_GetAltNum (uint16_t Con_Num, uint16_t Int_Num)
-{
-    uint8_t  * ptr;
-    uint16_t   point;
-    uint16_t   alt_num = 0;
-    uint16_t   length;
-
-    ptr = (uint8_t *)(g_usb0_function_ConfigurationPtr[Con_Num - 1]);
-    point = ptr[0];
-    ptr  += ptr[0];                                 /* InterfaceDescriptor[0] */
-    length  = (uint16_t)(*(g_usb0_function_ConfigurationPtr[Con_Num - 1] + 2));
-    length |= (uint16_t)((uint16_t)(*(g_usb0_function_ConfigurationPtr[Con_Num - 1] + 3)) << 8);
-
-    for (; point < length;)                                 /* Search Descriptor Table size */
-    {
-        switch (ptr[1])                                     /* Descriptor Type ? */
-        {
-            case USB_FUNCTION_DT_INTERFACE:                 /* Interface */
-                if (Int_Num == ptr[2])
-                {
-                    alt_num = (uint16_t)ptr[3];             /* Alternate Number count */
-                }
-                point += ptr[0];
-                ptr += ptr[0];
-            break;
-
-            case USB_FUNCTION_DT_DEVICE:                    /* Device */
-            case USB_FUNCTION_DT_CONFIGURATION:             /* Configuration */
-            case USB_FUNCTION_DT_STRING:                    /* String */
-            case USB_FUNCTION_DT_ENDPOINT:                  /* Endpoint */
-            default:                                        /* Class, Vendor, else */
-                point += ptr[0];
-                ptr   += ptr[0];
-            break;
-        }
-    }
-    return alt_num;
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_CheckRemoteWakeup
-* Description  : Returns the result of the remote wake up function is supported
-*              : or not referring to the configuration descriptor.
-* Arguments    : none
-* Return Value : DEVDRV_USBF_ON     :   Support Remote Wakeup
-*              : DEVDRV_USBF_OFF    :   not Support Remote Wakeup
-*******************************************************************************/
-#if 0
-uint16_t usb0_function_CheckRemoteWakeup (void)
-{
-    uint8_t atr;
-
-    if (g_usb0_function_ConfigNum == 0)
-    {
-        return DEVDRV_USBF_OFF;
-    }
-
-    atr = *(g_usb0_function_ConfigurationPtr[g_usb0_function_ConfigNum - 1] + 7);
-
-    if (atr & USB_FUNCTION_CF_RWUP)
-    {
-        return DEVDRV_USBF_ON;
-    }
-
-    return DEVDRV_USBF_OFF;
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_clear_alt
-* Description  : Initializes the Alternate setting area.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb0_function_clear_alt (void)
-{
-    int i;
-
-    for (i = 0; i < USB_FUNCTION_ALT_NO; ++i)
-    {
-        g_usb0_function_Alternate[i] = 0;                           /* Alternate */
-    }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_clear_pipe_tbl
-* Description  : Initializes pipe definition table.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb0_function_clear_pipe_tbl (void)
-{
-    int pipe;
-
-    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
-    {
-        g_usb0_function_PipeTbl[pipe] = 0;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_clear_ep_table_index
-* Description  : Initializes the end point table index.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb0_function_clear_ep_table_index (void)
-{
-    int ep;
-
-    for (ep = 0; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
-    {
-        g_usb0_function_EPTableIndex[ep] = USB_FUNCTION_EP_ERROR;
-    }
-}
-#endif
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/userdef/usb0_function_dmacdrv.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/userdef/usb0_function_dmacdrv.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,698 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_dmacdrv.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include <stdio.h>
-#include "r_typedefs.h"
-#include "iodefine.h"
-#include "rza_io_regrw.h"
-#include "usb0_function_dmacdrv.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-#define DMAC_INDEFINE   (255)       /* Macro definition when REQD bit is not used */
-
-/* ==== Request setting information for on-chip peripheral module ==== */
-typedef enum dmac_peri_req_reg_type
-{
-    DMAC_REQ_MID,
-    DMAC_REQ_RID,
-    DMAC_REQ_AM,
-    DMAC_REQ_LVL,
-    DMAC_REQ_REQD
-} dmac_peri_req_reg_type_t;
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-/* ==== Prototype declaration ==== */
-
-/* ==== Global variable ==== */
-/* On-chip peripheral module request setting table */
-static const uint8_t usb0_function_dmac_peri_req_init_table[8][5] =
-{
-    /* MID,RID,AM,LVL,REQD */
-    {32, 3, 2, 1, 1},    /* USB_0 channel 0 transmit FIFO empty */
-    {32, 3, 2, 1, 0},    /* USB_0 channel 0 receive FIFO full   */
-    {33, 3, 2, 1, 1},    /* USB_0 channel 1 transmit FIFO empty */
-    {33, 3, 2, 1, 0},    /* USB_0 channel 1 receive FIFO full   */
-    {34, 3, 2, 1, 1},    /* USB_1 channel 0 transmit FIFO empty */
-    {34, 3, 2, 1, 0},    /* USB_1 channel 0 receive FIFO full   */
-    {35, 3, 2, 1, 1},    /* USB_1 channel 1 transmit FIFO empty */
-    {35, 3, 2, 1, 0},    /* USB_1 channel 1 receive FIFO full   */
-};
-
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC1_PeriReqInit
-* Description  : Sets the register mode for DMA mode and the on-chip peripheral
-*              : module request for transfer request for DMAC channel 1.
-*              : Executes DMAC initial setting using the DMA information
-*              : specified by the argument *trans_info and the enabled/disabled
-*              : continuous transfer specified by the argument continuation.
-*              : Registers DMAC channel 1 interrupt handler function and sets
-*              : the interrupt priority level. Then enables transfer completion
-*              : interrupt.
-* Arguments    : dmac_transinfo_t *trans_info   : Setting information to DMAC register
-*              : uint32_t          dmamode      : DMA mode (only for DMAC_MODE_REGISTER)
-*              : uint32_t          continuation : Set continuous transfer to be valid
-*              :                                  after DMA transfer has been completed
-*              :             DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
-*              :             DMAC_SAMPLE_SINGLE       : Do not execute continuous transfer
-*              : uint32_t request_factor        : Factor for on-chip peripheral module request
-*              :             DMAC_REQ_OSTM0TINT       : OSTM_0 compare match
-*              :             DMAC_REQ_OSTM1TINT       : OSTM_1 compare match
-*              :             DMAC_REQ_TGI0A           : MTU2_0 input capture/compare match
-*              :                  :
-*              : uint32_t          req_direction: Setting value of CHCFG_n register REQD bit
-* Return Value : none
-*******************************************************************************/
-void usb0_function_DMAC1_PeriReqInit (const dmac_transinfo_t * trans_info,
-                                      uint32_t dmamode, uint32_t continuation,
-                                      uint32_t request_factor, uint32_t req_direction)
-{
-    /* ==== Register mode ==== */
-    if (DMAC_MODE_REGISTER == dmamode)
-    {
-        /* ==== Next0 register set ==== */
-        DMAC1.N0SA_n = trans_info->src_addr;        /* Start address of transfer source      */
-        DMAC1.N0DA_n = trans_info->dst_addr;        /* Start address of transfer destination */
-        DMAC1.N0TB_n = trans_info->count;           /* Total transfer byte count             */
-
-        /* DAD : Transfer destination address counting direction */
-        /* SAD : Transfer source address counting direction      */
-        /* DDS : Transfer destination transfer size              */
-        /* SDS : Transfer source transfer size                   */
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            trans_info->daddr_dir,
-                            DMAC1_CHCFG_n_DAD_SHIFT,
-                            DMAC1_CHCFG_n_DAD);
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            trans_info->saddr_dir,
-                            DMAC1_CHCFG_n_SAD_SHIFT,
-                            DMAC1_CHCFG_n_SAD);
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            trans_info->dst_size,
-                            DMAC1_CHCFG_n_DDS_SHIFT,
-                            DMAC1_CHCFG_n_DDS);
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            trans_info->src_size,
-                            DMAC1_CHCFG_n_SDS_SHIFT,
-                            DMAC1_CHCFG_n_SDS);
-
-        /* DMS  : Register mode                            */
-        /* RSEL : Select Next0 register set                */
-        /* SBE  : No discharge of buffer data when aborted */
-        /* DEM  : No DMA interrupt mask                    */
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            0,
-                            DMAC1_CHCFG_n_DMS_SHIFT,
-                            DMAC1_CHCFG_n_DMS);
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            0,
-                            DMAC1_CHCFG_n_RSEL_SHIFT,
-                            DMAC1_CHCFG_n_RSEL);
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            0,
-                            DMAC1_CHCFG_n_SBE_SHIFT,
-                            DMAC1_CHCFG_n_SBE);
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            0,
-                            DMAC1_CHCFG_n_DEM_SHIFT,
-                            DMAC1_CHCFG_n_DEM);
-
-        /* ---- Continuous transfer ---- */
-        if (DMAC_SAMPLE_CONTINUATION == continuation)
-        {
-            /* REN : Execute continuous transfer                         */
-            /* RSW : Change register set when DMA transfer is completed. */
-            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                                1,
-                                DMAC1_CHCFG_n_REN_SHIFT,
-                                DMAC1_CHCFG_n_REN);
-            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                                1,
-                                DMAC1_CHCFG_n_RSW_SHIFT,
-                                DMAC1_CHCFG_n_RSW);
-        }
-        /* ---- Single transfer ---- */
-        else
-        {
-            /* REN : Do not execute continuous transfer                         */
-            /* RSW : Do not change register set when DMA transfer is completed. */
-            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                                0,
-                                DMAC1_CHCFG_n_REN_SHIFT,
-                                DMAC1_CHCFG_n_REN);
-            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                                0,
-                                DMAC1_CHCFG_n_RSW_SHIFT,
-                                DMAC1_CHCFG_n_RSW);
-        }
-
-        /* TM  : Single transfer                          */
-        /* SEL : Channel setting                          */
-        /* HIEN, LOEN : On-chip peripheral module request */
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            0,
-                            DMAC1_CHCFG_n_TM_SHIFT,
-                            DMAC1_CHCFG_n_TM);
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            1,
-                            DMAC1_CHCFG_n_SEL_SHIFT,
-                            DMAC1_CHCFG_n_SEL);
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            1,
-                            DMAC1_CHCFG_n_HIEN_SHIFT,
-                            DMAC1_CHCFG_n_HIEN);
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            0,
-                            DMAC1_CHCFG_n_LOEN_SHIFT,
-                            DMAC1_CHCFG_n_LOEN);
-
-        /* ---- Set factor by specified on-chip peripheral module request ---- */
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
-                            DMAC1_CHCFG_n_AM_SHIFT,
-                            DMAC1_CHCFG_n_AM);
-        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
-                            DMAC1_CHCFG_n_LVL_SHIFT,
-                            DMAC1_CHCFG_n_LVL);
-
-        if (usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
-        {
-            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                                usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
-                                DMAC1_CHCFG_n_REQD_SHIFT,
-                                DMAC1_CHCFG_n_REQD);
-        }
-        else
-        {
-            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
-                                req_direction,
-                                DMAC1_CHCFG_n_REQD_SHIFT,
-                                DMAC1_CHCFG_n_REQD);
-        }
-
-        RZA_IO_RegWrite_32(&DMAC01.DMARS,
-                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
-                            DMAC01_DMARS_CH1_RID_SHIFT,
-                            DMAC01_DMARS_CH1_RID);
-        RZA_IO_RegWrite_32(&DMAC01.DMARS,
-                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
-                            DMAC01_DMARS_CH1_MID_SHIFT,
-                            DMAC01_DMARS_CH1_MID);
-
-        /* PR : Round robin mode */
-        RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
-                            1,
-                            DMAC07_DCTRL_0_7_PR_SHIFT,
-                            DMAC07_DCTRL_0_7_PR);
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC1_Open
-* Description  : Enables DMAC channel 1 transfer.
-* Arguments    : uint32_t req : DMAC request mode
-* Return Value :  0 : Succeeded in enabling DMA transfer
-*              : -1 : Failed to enable DMA transfer (due to DMA operation)
-*******************************************************************************/
-int32_t usb0_function_DMAC1_Open (uint32_t req)
-{
-    int32_t ret;
-    volatile uint8_t dummy;
-
-    /* Transferable? */
-    if ((0 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
-                                DMAC1_CHSTAT_n_EN_SHIFT,
-                                DMAC1_CHSTAT_n_EN)) &&
-        (0 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
-                                DMAC1_CHSTAT_n_TACT_SHIFT,
-                                DMAC1_CHSTAT_n_TACT)))
-    {
-        /* Clear Channel Status Register */
-        RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
-                            1,
-                            DMAC1_CHCTRL_n_SWRST_SHIFT,
-                            DMAC1_CHCTRL_n_SWRST);
-        dummy = RZA_IO_RegRead_32(&DMAC1.CHCTRL_n,
-                                DMAC1_CHCTRL_n_SWRST_SHIFT,
-                                DMAC1_CHCTRL_n_SWRST);
-        /* Enable DMA transfer */
-        RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
-                            1,
-                            DMAC1_CHCTRL_n_SETEN_SHIFT,
-                            DMAC1_CHCTRL_n_SETEN);
-
-        /* ---- Request by software ---- */
-        if (DMAC_REQ_MODE_SOFT == req)
-        {
-            /* DMA transfer Request by software */
-            RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
-                                1,
-                                DMAC1_CHCTRL_n_STG_SHIFT,
-                                DMAC1_CHCTRL_n_STG);
-        }
-
-        ret = 0;
-    }
-    else
-    {
-        ret = -1;
-    }
-
-    return ret;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC1_Close
-* Description  : Aborts DMAC channel 1 transfer. Returns the remaining transfer
-*              : byte count at the time of DMA transfer abort to the argument
-*              : *remain.
-* Arguments    : uint32_t * remain : Remaining transfer byte count when
-*              :                   : DMA transfer is aborted
-* Return Value : none
-*******************************************************************************/
-void usb0_function_DMAC1_Close (uint32_t * remain)
-{
-
-    /* ==== Abort transfer ==== */
-    RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
-                        1,
-                        DMAC1_CHCTRL_n_CLREN_SHIFT,
-                        DMAC1_CHCTRL_n_CLREN);
-
-    while (1 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
-                                DMAC1_CHSTAT_n_TACT_SHIFT,
-                                DMAC1_CHSTAT_n_TACT))
-    {
-        /* Loop until transfer is aborted */
-    }
-
-    while (1 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
-                                DMAC1_CHSTAT_n_EN_SHIFT,
-                                DMAC1_CHSTAT_n_EN))
-    {
-        /* Loop until 0 is set in EN before checking the remaining transfer byte count */
-    }
-    /* ==== Obtain remaining transfer byte count ==== */
-    *remain = DMAC1.CRTB_n;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC1_Load_Set
-* Description  : Sets the transfer source address, transfer destination
-*              : address, and total transfer byte count respectively
-*              : specified by the argument src_addr, dst_addr, and count to
-*              : DMAC channel 1 as DMA transfer information.
-*              : Sets the register set selected by the CHCFG_n register
-*              : RSEL bit from the Next0 or Next1 register set.
-*              : This function should be called when DMA transfer of DMAC
-*              : channel 1 is aboted.
-* Arguments    : uint32_t src_addr : Transfer source address
-*              : uint32_t dst_addr : Transfer destination address
-*              : uint32_t count    : Total transfer byte count
-* Return Value : none
-*******************************************************************************/
-void usb0_function_DMAC1_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
-{
-    uint8_t reg_set;
-
-    /* Obtain register set in use */
-    reg_set = RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
-                                DMAC1_CHSTAT_n_SR_SHIFT,
-                                DMAC1_CHSTAT_n_SR);
-
-    /* ==== Load ==== */
-    if (0 == reg_set)
-    {
-        /* ---- Next0 Register Set ---- */
-        DMAC1.N0SA_n = src_addr;    /* Start address of transfer source      */
-        DMAC1.N0DA_n = dst_addr;    /* Start address of transfer destination */
-        DMAC1.N0TB_n = count;       /* Total transfer byte count             */
-    }
-    else
-    {
-        /* ---- Next1 Register Set ---- */
-        DMAC1.N1SA_n = src_addr;    /* Start address of transfer source      */
-        DMAC1.N1DA_n = dst_addr;    /* Start address of transfer destination */
-        DMAC1.N1TB_n = count;       /* Total transfer byte count             */
-     }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC2_PeriReqInit
-* Description  : Sets the register mode for DMA mode and the on-chip peripheral
-*              : module request for transfer request for DMAC channel 2.
-*              : Executes DMAC initial setting using the DMA information
-*              : specified by the argument *trans_info and the enabled/disabled
-*              : continuous transfer specified by the argument continuation.
-*              : Registers DMAC channel 2 interrupt handler function and sets
-*              : the interrupt priority level. Then enables transfer completion
-*              : interrupt.
-* Arguments    : dmac_transinfo_t * trans_info : Setting information to DMAC
-*              :                               : register
-*              : uint32_t dmamode      : DMA mode (only for DMAC_MODE_REGISTER)
-*              : uint32_t continuation : Set continuous transfer to be valid
-*              :                       : after DMA transfer has been completed
-*              :         DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
-*              :         DMAC_SAMPLE_SINGLE       : Do not execute continuous
-*              :                                  : transfer
-*              : uint32_t request_factor : Factor for on-chip peripheral module
-*              :                         : request
-*              :         DMAC_REQ_OSTM0TINT : OSTM_0 compare match
-*              :         DMAC_REQ_OSTM1TINT : OSTM_1 compare match
-*              :         DMAC_REQ_TGI0A     : MTU2_0 input capture/compare match
-*              :                 :
-*              : uint32_t req_direction : Setting value of CHCFG_n register
-*              :                        : REQD bit
-*******************************************************************************/
-void usb0_function_DMAC2_PeriReqInit (const dmac_transinfo_t * trans_info,
-                                      uint32_t dmamode, uint32_t continuation,
-                                      uint32_t request_factor, uint32_t req_direction)
-{
-    /* ==== Register mode ==== */
-    if (DMAC_MODE_REGISTER == dmamode)
-    {
-        /* ==== Next0 register set ==== */
-        DMAC2.N0SA_n = trans_info->src_addr;        /* Start address of transfer source      */
-        DMAC2.N0DA_n = trans_info->dst_addr;        /* Start address of transfer destination */
-        DMAC2.N0TB_n = trans_info->count;           /* Total transfer byte count             */
-
-        /* DAD : Transfer destination address counting direction */
-        /* SAD : Transfer source address counting direction      */
-        /* DDS : Transfer destination transfer size              */
-        /* SDS : Transfer source transfer size                   */
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            trans_info->daddr_dir,
-                            DMAC2_CHCFG_n_DAD_SHIFT,
-                            DMAC2_CHCFG_n_DAD);
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            trans_info->saddr_dir,
-                            DMAC2_CHCFG_n_SAD_SHIFT,
-                            DMAC2_CHCFG_n_SAD);
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            trans_info->dst_size,
-                            DMAC2_CHCFG_n_DDS_SHIFT,
-                            DMAC2_CHCFG_n_DDS);
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            trans_info->src_size,
-                            DMAC2_CHCFG_n_SDS_SHIFT,
-                            DMAC2_CHCFG_n_SDS);
-
-        /* DMS  : Register mode                            */
-        /* RSEL : Select Next0 register set                */
-        /* SBE  : No discharge of buffer data when aborted */
-        /* DEM  : No DMA interrupt mask                    */
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            0,
-                            DMAC2_CHCFG_n_DMS_SHIFT,
-                            DMAC2_CHCFG_n_DMS);
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            0,
-                            DMAC2_CHCFG_n_RSEL_SHIFT,
-                            DMAC2_CHCFG_n_RSEL);
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            0,
-                            DMAC2_CHCFG_n_SBE_SHIFT,
-                            DMAC2_CHCFG_n_SBE);
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            0,
-                            DMAC2_CHCFG_n_DEM_SHIFT,
-                            DMAC2_CHCFG_n_DEM);
-
-        /* ---- Continuous transfer ---- */
-        if (DMAC_SAMPLE_CONTINUATION == continuation)
-        {
-            /* REN : Execute continuous transfer                         */
-            /* RSW : Change register set when DMA transfer is completed. */
-            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                                1,
-                                DMAC2_CHCFG_n_REN_SHIFT,
-                                DMAC2_CHCFG_n_REN);
-            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                                1,
-                                DMAC2_CHCFG_n_RSW_SHIFT,
-                                DMAC2_CHCFG_n_RSW);
-        }
-        /* ---- Single transfer ---- */
-        else
-        {
-            /* REN : Do not execute continuous transfer                         */
-            /* RSW : Do not change register set when DMA transfer is completed. */
-            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                                0,
-                                DMAC2_CHCFG_n_REN_SHIFT,
-                                DMAC2_CHCFG_n_REN);
-            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                                0,
-                                DMAC2_CHCFG_n_RSW_SHIFT,
-                                DMAC2_CHCFG_n_RSW);
-        }
-
-        /* TM  : Single transfer                          */
-        /* SEL : Channel setting                          */
-        /* HIEN, LOEN : On-chip peripheral module request */
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            0,
-                            DMAC2_CHCFG_n_TM_SHIFT,
-                            DMAC2_CHCFG_n_TM);
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            2,
-                            DMAC2_CHCFG_n_SEL_SHIFT,
-                            DMAC2_CHCFG_n_SEL);
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            1,
-                            DMAC2_CHCFG_n_HIEN_SHIFT,
-                            DMAC2_CHCFG_n_HIEN);
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            0,
-                            DMAC2_CHCFG_n_LOEN_SHIFT,
-                            DMAC2_CHCFG_n_LOEN);
-
-        /* ---- Set factor by specified on-chip peripheral module request ---- */
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
-                            DMAC2_CHCFG_n_AM_SHIFT,
-                            DMAC2_CHCFG_n_AM);
-        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
-                            DMAC2_CHCFG_n_LVL_SHIFT,
-                            DMAC2_CHCFG_n_LVL);
-        if (usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
-        {
-            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                                usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
-                                DMAC2_CHCFG_n_REQD_SHIFT,
-                                DMAC2_CHCFG_n_REQD);
-        }
-        else
-        {
-            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
-                                req_direction,
-                                DMAC2_CHCFG_n_REQD_SHIFT,
-                                DMAC2_CHCFG_n_REQD);
-        }
-        RZA_IO_RegWrite_32(&DMAC23.DMARS,
-                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
-                            DMAC23_DMARS_CH2_RID_SHIFT,
-                            DMAC23_DMARS_CH2_RID);
-        RZA_IO_RegWrite_32(&DMAC23.DMARS,
-                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
-                            DMAC23_DMARS_CH2_MID_SHIFT,
-                            DMAC23_DMARS_CH2_MID);
-
-        /* PR : Round robin mode */
-        RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
-                            1,
-                            DMAC07_DCTRL_0_7_PR_SHIFT,
-                            DMAC07_DCTRL_0_7_PR);
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC2_Open
-* Description  : Enables DMAC channel 2 transfer.
-* Arguments    : uint32_t req : DMAC request mode
-* Return Value :  0 : Succeeded in enabling DMA transfer
-*              : -1 : Failed to enable DMA transfer (due to DMA operation)
-*******************************************************************************/
-int32_t usb0_function_DMAC2_Open (uint32_t req)
-{
-    int32_t ret;
-    volatile uint8_t dummy;
-
-    /* Transferable? */
-    if ((0 == RZA_IO_RegRead_32(&DMAC.CHSTAT_2,
-                                DMAC2_CHSTAT_n_EN_SHIFT,
-                                DMAC2_CHSTAT_n_EN)) &&
-        (0 == RZA_IO_RegRead_32(&DMAC.CHSTAT_2,
-                                DMAC2_CHSTAT_n_TACT_SHIFT,
-                                DMAC2_CHSTAT_n_TACT)))
-    {
-        /* Clear Channel Status Register */
-        RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
-                            1,
-                            DMAC2_CHCTRL_n_SWRST_SHIFT,
-                            DMAC2_CHCTRL_n_SWRST);
-        dummy = RZA_IO_RegRead_32(&DMAC2.CHCTRL_n,
-                                DMAC2_CHCTRL_n_SWRST_SHIFT,
-                                DMAC2_CHCTRL_n_SWRST);
-        /* Enable DMA transfer */
-        RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
-                            1,
-                            DMAC2_CHCTRL_n_SETEN_SHIFT,
-                            DMAC2_CHCTRL_n_SETEN);
-
-        /* ---- Request by software ---- */
-        if (DMAC_REQ_MODE_SOFT == req)
-        {
-            /* DMA transfer Request by software */
-            RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
-                                1,
-                                DMAC2_CHCTRL_n_STG_SHIFT,
-                                DMAC2_CHCTRL_n_STG);
-        }
-
-        ret = 0;
-    }
-    else
-    {
-        ret = -1;
-    }
-
-    return ret;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC2_Close
-* Description  : Aborts DMAC channel 2 transfer. Returns the remaining transfer
-*              : byte count at the time of DMA transfer abort to the argument
-*              : *remain.
-* Arguments    : uint32_t * remain : Remaining transfer byte count when
-*              :                   : DMA transfer is aborted
-* Return Value : none
-*******************************************************************************/
-void usb0_function_DMAC2_Close (uint32_t * remain)
-{
-
-    /* ==== Abort transfer ==== */
-    RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
-                        1,
-                        DMAC2_CHCTRL_n_CLREN_SHIFT,
-                        DMAC2_CHCTRL_n_CLREN);
-
-    while (1 == RZA_IO_RegRead_32(&DMAC2.CHSTAT_n,
-                                DMAC2_CHSTAT_n_TACT_SHIFT,
-                                DMAC2_CHSTAT_n_TACT))
-    {
-        /* Loop until transfer is aborted */
-    }
-
-    while (1 == RZA_IO_RegRead_32(&DMAC2.CHSTAT_n,
-                                DMAC2_CHSTAT_n_EN_SHIFT,
-                                DMAC2_CHSTAT_n_EN))
-    {
-        /* Loop until 0 is set in EN before checking the remaining transfer byte count */
-    }
-    /* ==== Obtain remaining transfer byte count ==== */
-    *remain = DMAC2.CRTB_n;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC2_Load_Set
-* Description  : Sets the transfer source address, transfer destination
-*              : address, and total transfer byte count respectively
-*              : specified by the argument src_addr, dst_addr, and count to
-*              : DMAC channel 2 as DMA transfer information.
-*              : Sets the register set selected by the CHCFG_n register
-*              : RSEL bit from the Next0 or Next1 register set.
-*              : This function should be called when DMA transfer of DMAC
-*              : channel 2 is aboted.
-* Arguments    : uint32_t src_addr : Transfer source address
-*              : uint32_t dst_addr : Transfer destination address
-*              : uint32_t count    : Total transfer byte count
-* Return Value : none
-*******************************************************************************/
-void usb0_function_DMAC2_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
-{
-    uint8_t reg_set;
-
-    /* Obtain register set in use */
-    reg_set = RZA_IO_RegRead_32(&DMAC2.CHSTAT_n,
-                                DMAC2_CHSTAT_n_SR_SHIFT,
-                                DMAC2_CHSTAT_n_SR);
-
-    /* ==== Load ==== */
-    if (0 == reg_set)
-    {
-        /* ---- Next0 Register Set ---- */
-        DMAC2.N0SA_n = src_addr;     /* Start address of transfer source      */
-        DMAC2.N0DA_n = dst_addr;     /* Start address of transfer destination */
-        DMAC2.N0TB_n = count;        /* Total transfer byte count             */
-    }
-    else
-    {
-        /* ---- Next1 Register Set ---- */
-        DMAC2.N1SA_n = src_addr;     /* Start address of transfer source      */
-        DMAC2.N1DA_n = dst_addr;     /* Start address of transfer destination */
-        DMAC2.N1TB_n = count;        /* Total transfer byte count             */
-     }
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/userdef/usb0_function_userdef.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/userdef/usb0_function_userdef.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,762 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb0_function_userdef.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include <stdio.h>
-#include "r_typedefs.h"
-#include "iodefine.h"
-#include "devdrv_usb_function_api.h"
-#include "usb0_function_dmacdrv.h"  /* common DMAC driver for USB */
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-#define DUMMY_ACCESS OSTM0CNT
-
-/* #define CACHE_WRITEBACK */
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-extern int32_t io_cwb(unsigned long start, unsigned long end);
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-static void usb0_function_enable_dmac0(uint32_t src, uint32_t dst, uint32_t count,
-                                       uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
-static void usb0_function_enable_dmac1(uint32_t src, uint32_t dst, uint32_t count,
-                                       uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
-static void Userdef_USB_usb0_function_delay_10us_2(void);
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_d0fifo_dmaintid
-* Description  : get D0FIFO DMA Interrupt ID
-* Arguments    : none
-* Return Value : D0FIFO DMA Interrupt ID
-*******************************************************************************/
-IRQn_Type Userdef_USB_usb0_function_d0fifo_dmaintid (void)
-{
-#if 0
-    return DMAINT1_IRQn;
-#else
-    return 0xFFFF;
-#endif
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_d1fifo_dmaintid
-* Description  : get D1FIFO DMA Interrupt ID
-* Arguments    : none
-* Return Value : D1FIFO DMA Interrupt ID
-*******************************************************************************/
-IRQn_Type Userdef_USB_usb0_function_d1fifo_dmaintid (void)
-{
-#if 0
-    return DMAINT1_IRQn;
-#else
-    return 0xFFFF;
-#endif
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_attach
-* Description  : Wait for the software of 1ms.
-*              : Alter this function according to the user's system.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb0_function_attach (void)
-{
-    printf("\n");
-    printf("channel 0 attach device\n");
-    printf("\n");
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_detach
-* Description  : Wait for the software of 1ms.
-*              : Alter this function according to the user's system.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb0_function_detach (void)
-{
-    printf("\n");
-    printf("channel 0 detach device\n");
-    printf("\n");
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_delay_1ms
-* Description  : Wait for the software of 1ms.
-*              : Alter this function according to the user's system.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb0_function_delay_1ms (void)
-{
-    volatile int i;
-    volatile unsigned long tmp;
-
-    /*
-     * Wait 1ms (Please change for your MCU).
-     */
-    for (i = 0; i < 1440; ++i)
-    {
-        tmp = DUMMY_ACCESS;
-    }
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_delay_xms
-* Description  : Wait for the software in the period of time specified by the
-*              : argument.
-*              : Alter this function according to the user's system.
-* Arguments    : uint32_t msec ; Wait Time (msec)
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb0_function_delay_xms (uint32_t msec)
-{
-    volatile unsigned short i;
-
-    for (i = 0; i < msec; ++i)
-    {
-        Userdef_USB_usb0_function_delay_1ms();
-    }
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_delay_10us
-* Description  : Waits for software for the period specified by the argument.
-*              : Alter this function according to the user's system.
-* Arguments    : uint32_t usec ; Wait Time(x 10usec)
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb0_function_delay_10us (uint32_t usec)
-{
-    volatile int i;
-
-    /* Wait 10us (Please change for your MCU) */
-    for (i = 0; i < usec; ++i)
-    {
-        Userdef_USB_usb0_function_delay_10us_2();
-    }
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_delay_10us_2
-* Description  : Waits for software for the period specified by the argument.
-*              : Alter this function according to the user's system.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-static void Userdef_USB_usb0_function_delay_10us_2 (void)
-{
-    volatile int i;
-    volatile unsigned long tmp;
-
-    /* Wait 1us (Please change for your MCU) */
-    for (i = 0; i < 14; ++i)
-    {
-        tmp = DUMMY_ACCESS;
-    }
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_delay_500ns
-* Description  : Wait for software for 500ns.
-*              : Alter this function according to the user's system.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb0_function_delay_500ns (void)
-{
-    volatile int i;
-    volatile unsigned long tmp;
-
-    /* Wait 500ns (Please change for your MCU) */
-    /* Wait 500ns I clock 266MHz */
-    tmp = DUMMY_ACCESS;
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_start_dma
-* Description  : Enables DMA transfer on the information specified by the argument.
-*              : Set DMAC register by this function to enable DMA transfer.
-*              : After executing this function, USB module is set to start DMA
-*              : transfer. DMA transfer should not wait for DMA transfer complete.
-* Arguments    : USB_FUNCTION_DMA_t *dma   : DMA parameter
-*              :  typedef struct{
-*              :      uint32_t fifo;    FIFO for using
-*              :      uint32_t buffer;  Start address of transfer source/destination
-*              :      uint32_t bytes;   Transfer size(Byte)
-*              :      uint32_t dir;     Transfer direction(0:Buffer->FIFO, 1:FIFO->Buffer)
-*              :      uint32_t size;    DMA transfer size
-*              :   } USB_FUNCTION_DMA_t;
-*              : uint16_t dfacc ; 0 : cycle steal mode
-*              :                  1 : 16byte continuous mode
-*              :                  2 : 32byte continuous mode
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb0_function_start_dma (USB_FUNCTION_DMA_t * dma, uint16_t dfacc)
-{
-    uint32_t trncount;
-    uint32_t src;
-    uint32_t dst;
-    uint32_t size;
-    uint32_t dir;
-#ifdef CACHE_WRITEBACK
-    uint32_t ptr;
-#endif
-
-    trncount = dma->bytes;
-    dir      = dma->dir;
-
-    if (dir == USB_FUNCTION_FIFO2BUF)
-    {
-        /* DxFIFO determination */
-        dst = dma->buffer;
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-        if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-        {
-            src = (uint32_t)(&USB200.D0FIFO.UINT32);
-        }
-        else
-        {
-            src = (uint32_t)(&USB200.D1FIFO.UINT32);
-        }
-        size = dma->size;
-
-        if (size == 0)
-        {
-            src += 3;       /* byte access  */
-        }
-        else if (size == 1)
-        {
-            src += 2;       /* short access */
-        }
-        else
-        {
-            /* Do Nothing */
-        }
-#else
-        size = dma->size;
-
-        if (size == 2)
-        {
-            /* 32bit access */
-            if (dfacc == 2)
-            {
-                /* 32byte access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    src = (uint32_t)(&USB200.D0FIFOB0);
-                }
-                else
-                {
-                    src = (uint32_t)(&USB200.D1FIFOB0);
-                }
-            }
-            else if (dfacc == 1)
-            {
-                /* 16byte access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    src = (uint32_t)(&USB200.D0FIFOB0);
-                }
-                else
-                {
-                    src = (uint32_t)(&USB200.D1FIFOB0);
-                }
-            }
-            else
-            {
-                /* normal access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    src = (uint32_t)(&USB200.D0FIFO.UINT32);
-                }
-                else
-                {
-                    src = (uint32_t)(&USB200.D1FIFO.UINT32);
-                }
-            }
-        }
-        else if (size == 1)
-        {
-            /* 16bit access */
-            dfacc = 0;      /* force normal access */
-
-            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-            {
-                src = (uint32_t)(&USB200.D0FIFO.UINT32);
-            }
-            else
-            {
-                src = (uint32_t)(&USB200.D1FIFO.UINT32);
-            }
-            src += 2;       /* short access */
-        }
-        else
-        {
-            /* 8bit access */
-            dfacc = 0;      /* force normal access */
-
-            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-            {
-                src = (uint32_t)(&USB200.D0FIFO.UINT32);
-            }
-            else
-            {
-                src = (uint32_t)(&USB200.D1FIFO.UINT32);
-            }
-            src += 3;       /* byte access */
-        }
-#endif
-    }
-    else
-    {
-        /* DxFIFO determination */
-        src = dma->buffer;
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-        if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-        {
-            dst = (uint32_t)(&USB200.D0FIFO.UINT32);
-        }
-        else
-        {
-            dst = (uint32_t)(&USB200.D1FIFO.UINT32);
-        }
-        size = dma->size;
-
-        if (size == 0)
-        {
-            dst += 3;       /* byte access  */
-        }
-        else if (size == 1)
-        {
-            dst += 2;       /* short access */
-        }
-        else
-        {
-            /* Do Nothing */
-        }
-#else
-        size = dma->size;
-
-        if (size == 2)
-        {
-            /* 32bit access */
-            if (dfacc == 2)
-            {
-                /* 32byte access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    dst = (uint32_t)(&USB200.D0FIFOB0);
-                }
-                else
-                {
-                    dst = (uint32_t)(&USB200.D1FIFOB0);
-                }
-            }
-            else if (dfacc == 1)
-            {
-                /* 16byte access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    dst = (uint32_t)(&USB200.D0FIFOB0);
-                }
-                else
-                {
-                    dst = (uint32_t)(&USB200.D1FIFOB0);
-                }
-            }
-            else
-            {
-                /* normal access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    dst = (uint32_t)(&USB200.D0FIFO.UINT32);
-                }
-                else
-                {
-                    dst = (uint32_t)(&USB200.D1FIFO.UINT32);
-                }
-            }
-        }
-        else if (size == 1)
-        {
-            /* 16bit access */
-            dfacc = 0;      /* force normal access */
-            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-            {
-                dst = (uint32_t)(&USB200.D0FIFO.UINT32);
-            }
-            else
-            {
-                dst = (uint32_t)(&USB200.D1FIFO.UINT32);
-            }
-            dst += 2;       /* short access */
-        }
-        else
-        {
-            /* 8bit access */
-            dfacc = 0;      /* force normal access */
-
-            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-            {
-                dst = (uint32_t)(&USB200.D0FIFO.UINT32);
-            }
-            else
-            {
-                dst = (uint32_t)(&USB200.D1FIFO.UINT32);
-            }
-            dst += 3;       /* byte access  */
-        }
-#endif
-    }
-
-#ifdef CACHE_WRITEBACK
-    ptr = (uint32_t)dma->buffer;
-
-    if ((ptr & 0x20000000ul) == 0)
-    {
-        io_cwb((uint32_t)ptr, (uint32_t)(ptr) + trncount);
-    }
-#endif
-
-    if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-    {
-        usb0_function_enable_dmac0(src, dst, trncount, size, dir, dma->fifo, dfacc);
-    }
-    else
-    {
-        usb0_function_enable_dmac1(src, dst, trncount, size, dir, dma->fifo, dfacc);
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_enable_dmac0
-* Description  : Enables DMA transfer on the information specified by the argument.
-* Arguments    : uint32_t src   : src address
-*              : uint32_t dst   : dst address
-*              : uint32_t count : transfer byte
-*              : uint32_t size  : transfer size
-*              : uint32_t dir   : direction
-*              : uint32_t fifo  : FIFO(D0FIFO or D1FIFO)
-*              : uint16_t dfacc : 0 : normal access
-*              :                : 1 : 16byte access
-*              :                : 2 : 32byte access
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_enable_dmac0 (uint32_t src, uint32_t dst, uint32_t count,
-                                        uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
-{
-    dmac_transinfo_t trans_info;
-    uint32_t         request_factor = 0;
-    int32_t          ret;
-
-    /* ==== Variable setting for DMAC initialization ==== */
-    trans_info.src_addr = (uint32_t)src;                /* Start address of transfer source      */
-    trans_info.dst_addr = (uint32_t)dst;                /* Start address of transfer destination */
-    trans_info.count    = (uint32_t)count;              /* Total byte count to be transferred    */
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-    if (size == 0)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_8;        /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_8;        /* Transfer destination transfer size */
-    }
-    else if (size == 1)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_16;       /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_16;       /* Transfer destination transfer size */
-    }
-    else if (size == 2)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_32;       /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_32;       /* Transfer destination transfer size */
-    }
-    else
-    {
-        printf("size error!!\n");
-    }
-#else
-    if (dfacc == 2)
-    {
-        /* 32byte access */
-        trans_info.src_size = DMAC_TRANS_SIZE_256;      /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_256;      /* Transfer destination transfer size */
-    }
-    else if (dfacc == 1)
-    {
-        /* 16byte access */
-        trans_info.src_size = DMAC_TRANS_SIZE_128;      /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_128;      /* Transfer destination transfer size */
-    }
-    else
-    {
-        /* normal access */
-        if (size == 0)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_8;    /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_8;    /* Transfer destination transfer size */
-        }
-        else if (size == 1)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_16;   /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_16;   /* Transfer destination transfer size */
-        }
-        else if (size == 2)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_32;   /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_32;   /* Transfer destination transfer size */
-        }
-        else
-        {
-            printf("size error!!\n");
-        }
-    }
-#endif
-
-    if (dir == USB_FUNCTION_FIFO2BUF)
-    {
-        request_factor =DMAC_REQ_USB0_DMA0_RX;          /* USB_0 channel 0 receive FIFO full               */
-        trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer source address      */
-        trans_info.daddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer destination address */
-    }
-    else if (dir == USB_FUNCTION_BUF2FIFO)
-    {
-        request_factor =DMAC_REQ_USB0_DMA0_TX;          /* USB_0 channel 0 receive FIFO empty              */
-        trans_info.saddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer source address      */
-        trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer destination address */
-    }
-    else
-    {
-        /* Do Nothing */
-    }
-
-    /* ==== DMAC initialization ==== */
-    usb0_function_DMAC1_PeriReqInit((const dmac_transinfo_t *)&trans_info,
-                                    DMAC_MODE_REGISTER,
-                                    DMAC_SAMPLE_SINGLE,
-                                    request_factor,
-                                    0);     /* Don't care DMAC_REQ_REQD is setting in
-                                            usb0_function_DMAC1_PeriReqInit() */
-
-    /* ==== DMAC startup ==== */
-    ret = usb0_function_DMAC1_Open(DMAC_REQ_MODE_PERI);
-    if (ret != 0)
-    {
-        printf("DMAC1 Open error!!\n");
-    }
-
-    return;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_enable_dmac1
-* Description  : Enables DMA transfer on the information specified by the argument.
-* Arguments    : uint32_t src   : src address
-*              : uint32_t dst   : dst address
-*              : uint32_t count : transfer byte
-*              : uint32_t size  : transfer size
-*              : uint32_t dir   : direction
-*              : uint32_t fifo  : FIFO(D0FIFO or D1FIFO)
-*              : uint16_t dfacc : 0 : normal access
-*              :                : 1 : 16byte access
-*              :                : 2 : 32byte access
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_enable_dmac1 (uint32_t src, uint32_t dst, uint32_t count,
-                                        uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
-{
-    dmac_transinfo_t trans_info;
-    uint32_t         request_factor = 0;
-    int32_t          ret;
-
-    /* ==== Variable setting for DMAC initialization ==== */
-    trans_info.src_addr = (uint32_t)src;                /* Start address of transfer source      */
-    trans_info.dst_addr = (uint32_t)dst;                /* Start address of transfer destination */
-    trans_info.count    = (uint32_t)count;              /* Total byte count to be transferred    */
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-    if (size == 0)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_8;        /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_8;        /* Transfer destination transfer size */
-    }
-    else if (size == 1)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_16;       /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_16;       /* Transfer destination transfer size */
-    }
-    else if (size == 2)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_32;       /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_32;       /* Transfer destination transfer size */
-    }
-    else
-    {
-        printf("size error!!\n");
-    }
-#else
-    if (dfacc == 2)
-    {
-        /* 32byte access */
-        trans_info.src_size = DMAC_TRANS_SIZE_256;      /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_256;      /* Transfer destination transfer size */
-    }
-    else if (dfacc == 1)
-    {
-        /* 16byte access */
-        trans_info.src_size = DMAC_TRANS_SIZE_128;      /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_128;      /* Transfer destination transfer size */
-    }
-    else
-    {
-        /* normal access */
-        if (size == 0)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_8;    /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_8;    /* Transfer destination transfer size */
-        }
-        else if (size == 1)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_16;   /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_16;   /* Transfer destination transfer size */
-        }
-        else if (size == 2)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_32;   /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_32;   /* Transfer destination transfer size */
-        }
-        else
-        {
-            printf("size error!!\n");
-        }
-    }
-#endif
-
-    if (dir == USB_FUNCTION_FIFO2BUF)
-    {
-        request_factor =DMAC_REQ_USB0_DMA1_RX;          /* USB_0 channel 0 receive FIFO full               */
-        trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer source address      */
-        trans_info.daddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer destination address */
-    }
-    else if (dir == USB_FUNCTION_BUF2FIFO)
-    {
-        request_factor =DMAC_REQ_USB0_DMA1_TX;          /* USB_0 channel 0 receive FIFO empty              */
-        trans_info.saddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer source address      */
-        trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer destination address */
-    }
-    else
-    {
-        /* Do Nothing */
-    }
-
-    /* ==== DMAC initialization ==== */
-    usb0_function_DMAC2_PeriReqInit((const dmac_transinfo_t *)&trans_info,
-                                    DMAC_MODE_REGISTER,
-                                    DMAC_SAMPLE_SINGLE,
-                                    request_factor,
-                                    0);     /* Don't care DMAC_REQ_REQD is setting in
-                                            usb0_function_DMAC1_PeriReqInit() */
-
-    /* ==== DMAC startup ==== */
-    ret = usb0_function_DMAC2_Open(DMAC_REQ_MODE_PERI);
-    if (ret != 0)
-    {
-        printf("DMAC2 Open error!!\n");
-    }
-
-    return;
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_stop_dma0
-* Description  : Disables DMA transfer.
-*              : This function should be executed to DMAC executed at the time
-*              : of specification of D0_FIF0_DMA in dma->fifo.
-* Arguments    : none
-* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
-*              : regarding to the bus width.
-*******************************************************************************/
-uint32_t Userdef_USB_usb0_function_stop_dma0 (void)
-{
-    uint32_t remain;
-
-    /* ==== DMAC release ==== */
-    usb0_function_DMAC1_Close(&remain);
-
-    return remain;
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_stop_dma1
-* Description  : Disables DMA transfer.
-*              : This function should be executed to DMAC executed at the time
-*              : of specification of D1_FIF0_DMA in dma->fifo.
-* Arguments    : none
-* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
-*              : regarding to the bus width.
-*******************************************************************************/
-uint32_t Userdef_USB_usb0_function_stop_dma1 (void)
-{
-    uint32_t remain;
-
-    /* ==== DMAC release ==== */
-    usb0_function_DMAC2_Close(&remain);
-
-    return remain;
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/inc/usb1_function.h
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/inc/usb1_function.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,171 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description  : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-#ifndef USB1_FUNCTION_H
-#define USB1_FUNCTION_H
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "devdrv_usb_function_api.h"
-#include "usb_function.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-extern const uint16_t       g_usb1_function_bit_set[];
-extern uint32_t             g_usb1_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
-extern uint8_t              *g_usb1_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-extern uint16_t             g_usb1_function_PipeIgnore[];
-extern uint16_t             g_usb1_function_PipeTbl[];
-extern uint16_t             g_usb1_function_pipe_status[];
-extern uint32_t             g_usb1_function_PipeDataSize[];
-
-extern USB_FUNCTION_DMA_t   g_usb1_function_DmaInfo[];
-extern uint16_t             g_usb1_function_DmaPipe[];
-extern uint16_t             g_usb1_function_DmaBval[];
-extern uint16_t             g_usb1_function_DmaStatus[];
-
-extern uint16_t             g_usb1_function_CtrZeroLengthFlag;
-
-extern uint16_t             g_usb1_function_ConfigNum;
-extern uint16_t             g_usb1_function_Alternate[USB_FUNCTION_ALT_NO];
-extern uint16_t             g_usb1_function_RemoteWakeupFlag;
-extern uint16_t             g_usb1_function_TestModeFlag;
-extern uint16_t             g_usb1_function_TestModeSelectors;
-
-extern uint16_t             g_usb1_function_ReqType;
-extern uint16_t             g_usb1_function_ReqTypeType;
-extern uint16_t             g_usb1_function_ReqTypeRecip;
-extern uint16_t             g_usb1_function_ReqRequest;
-extern uint16_t             g_usb1_function_ReqValue;
-extern uint16_t             g_usb1_function_ReqIndex;
-extern uint16_t             g_usb1_function_ReqLength;
-
-extern uint16_t             g_usb1_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
-
-extern uint16_t             g_usb1_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
-extern uint16_t             g_usb1_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
-extern uint16_t             g_usb1_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
-extern uint16_t             g_usb1_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-/* ==== common ==== */
-void     usb1_function_dma_stop_d0(uint16_t pipe, uint32_t remain);
-void     usb1_function_dma_stop_d1(uint16_t pipe, uint32_t remain);
-uint16_t usb1_function_is_hispeed(void);
-uint16_t usb1_function_is_hispeed_enable(void);
-uint16_t usb1_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
-uint16_t usb1_function_write_buffer(uint16_t pipe);
-uint16_t usb1_function_write_buffer_c(uint16_t pipe);
-uint16_t usb1_function_write_buffer_d0(uint16_t pipe);
-uint16_t usb1_function_write_buffer_d1(uint16_t pipe);
-void     usb1_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
-uint16_t usb1_function_read_buffer(uint16_t pipe);
-uint16_t usb1_function_read_buffer_c(uint16_t pipe);
-uint16_t usb1_function_read_buffer_d0(uint16_t pipe);
-uint16_t usb1_function_read_buffer_d1(uint16_t pipe);
-uint16_t usb1_function_change_fifo_port(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
-void     usb1_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
-void     usb1_function_set_curpipe2(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc);
-uint16_t usb1_function_get_mbw(uint32_t trncount, uint32_t dtptr);
-uint16_t usb1_function_read_dma(uint16_t pipe);
-void     usb1_function_brdy_int(uint16_t status, uint16_t int_enb);
-void     usb1_function_nrdy_int(uint16_t status, uint16_t int_enb);
-void     usb1_function_bemp_int(uint16_t status, uint16_t int_enb);
-void     usb1_function_setting_interrupt(uint8_t level);
-void     usb1_function_reset_module(uint16_t clockmode);
-uint16_t usb1_function_get_buf_size(uint16_t pipe);
-uint16_t usb1_function_get_mxps(uint16_t pipe);
-void     usb1_function_clear_brdy_sts(uint16_t pipe);
-void     usb1_function_clear_bemp_sts(uint16_t pipe);
-void     usb1_function_clear_nrdy_sts(uint16_t pipe);
-void     usb1_function_set_pid_buf(uint16_t pipe);
-void     usb1_function_set_pid_nak(uint16_t pipe);
-void     usb1_function_set_pid_stall(uint16_t pipe);
-void     usb1_function_clear_pid_stall(uint16_t pipe);
-uint16_t usb1_function_get_pid(uint16_t pipe);
-void     usb1_function_set_sqclr(uint16_t pipe);
-void     usb1_function_set_sqset(uint16_t pipe);
-void     usb1_function_set_csclr(uint16_t pipe);
-void     usb1_function_aclrm(uint16_t pipe);
-void     usb1_function_set_aclrm(uint16_t pipe);
-void     usb1_function_clr_aclrm(uint16_t pipe);
-uint16_t usb1_function_get_sqmon(uint16_t pipe);
-uint16_t usb1_function_get_inbuf(uint16_t pipe);
-
-/* ==== function ==== */
-void     usb1_function_init_status(void);
-void     usb1_function_InitModule(uint16_t mode);
-uint16_t usb1_function_CheckVBUStaus(void);
-void     usb1_function_USB_FUNCTION_Attach(void);
-void     usb1_function_USB_FUNCTION_Detach(void);
-void     usb1_function_USB_FUNCTION_BusReset(void);
-void     usb1_function_USB_FUNCTION_Resume(void);
-void     usb1_function_USB_FUNCTION_Suspend(void);
-void     usb1_function_USB_FUNCTION_TestMode(void);
-void     usb1_function_ResetDCP(void);
-void     usb1_function_ResetEP(uint16_t num);
-uint16_t usb1_function_EpToPipe(uint16_t ep);
-void     usb1_function_InitEPTable(uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num);
-uint16_t usb1_function_GetConfigNum(void);
-uint16_t usb1_function_GetAltNum(uint16_t Con_Num, uint16_t Int_Num);
-uint16_t usb1_function_CheckRemoteWakeup(void);
-void     usb1_function_clear_alt(void);
-void     usb1_function_clear_pipe_tbl(void);
-void     usb1_function_clear_ep_table_index(void);
-uint16_t usb1_function_GetInterfaceNum(uint16_t num);
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* USB1_FUNCTION_H */
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/inc/usb1_function_api.h
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/inc/usb1_function_api.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,104 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_api.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description  : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-#ifndef USB1_FUNCTION_API_H
-#define USB1_FUNCTION_API_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Variable Externs
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-void     usb1_api_function_init(uint8_t int_level, uint16_t mode, uint16_t clockmode);
-uint16_t usb1_api_function_IsConfigured(void);
-uint16_t usb1_function_GetDeviceState(void);
-uint16_t usb1_api_function_CtrlReadStart(uint32_t size, uint8_t *data);
-void     usb1_api_function_CtrlWriteStart(uint32_t size, uint8_t *data);
-uint16_t usb1_api_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
-uint16_t usb1_api_function_check_pipe_status(uint16_t pipe, uint32_t *size);
-void     usb1_api_function_clear_pipe_status(uint16_t pipe);
-void     usb1_api_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
-void     usb1_api_function_set_pid_buf(uint16_t pipe);
-void     usb1_api_function_set_pid_nak(uint16_t pipe);
-void     usb1_api_function_set_pid_stall(uint16_t pipe);
-void     usb1_api_function_clear_pid_stall(uint16_t pipe);
-uint16_t usb1_api_function_get_pid(uint16_t pipe);
-int32_t  usb1_api_function_check_stall(uint16_t pipe);
-void     usb1_api_function_set_sqclr(uint16_t pipe);
-void     usb1_api_function_set_sqset(uint16_t pipe);
-void     usb1_api_function_set_csclr(uint16_t pipe);
-void     usb1_api_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
-void     usb1_api_function_clear_brdy_sts(uint16_t pipe);
-void     usb1_api_function_clear_bemp_sts(uint16_t pipe);
-void     usb1_api_function_clear_nrdy_sts(uint16_t pipe);
-
-void     usb1_function_ClearFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_SetFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_SetAddress(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_SetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_SetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_SetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_SynchFrame(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_GetStatus(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_GetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_GetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_GetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Resrv_0(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Resrv_123(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Resrv_4(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void     usb1_function_Resrv_5(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* USB1_FUNCTION_API_H */
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/inc/usb1_function_dmacdrv.h
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/inc/usb1_function_dmacdrv.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_dmacdrv.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description  : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-#ifndef USB1_FUNCTION_DMACDRV_H
-#define USB1_FUNCTION_DMACDRV_H
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-typedef struct dmac_transinfo
-{
-    uint32_t src_addr;      /* Transfer source address                */
-    uint32_t dst_addr;      /* Transfer destination address           */
-    uint32_t count;         /* Transfer byte count                    */
-    uint32_t src_size;      /* Transfer source data size              */
-    uint32_t dst_size;      /* Transfer destination data size         */
-    uint32_t saddr_dir;     /* Transfer source address direction      */
-    uint32_t daddr_dir;     /* Transfer destination address direction */
-} dmac_transinfo_t;
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-/* ==== Transfer specification of the sample program ==== */
-#define DMAC_SAMPLE_SINGLE          (0)     /* Single transfer                   */
-#define DMAC_SAMPLE_CONTINUATION    (1)     /* Continuous transfer (use REN bit) */
-
-/* ==== DMA modes ==== */
-#define DMAC_MODE_REGISTER          (0)     /* Register mode */
-#define DMAC_MODE_LINK              (1)     /* Link mode     */
-
-/* ==== Transfer requests ==== */
-#define DMAC_REQ_MODE_EXT           (0)     /* External request                   */
-#define DMAC_REQ_MODE_PERI          (1)     /* On-chip peripheral module request  */
-#define DMAC_REQ_MODE_SOFT          (2)     /* Auto-request (request by software) */
-
-/* ==== DMAC transfer sizes ==== */
-#define DMAC_TRANS_SIZE_8           (0)     /* 8 bits    */
-#define DMAC_TRANS_SIZE_16          (1)     /* 16 bits   */
-#define DMAC_TRANS_SIZE_32          (2)     /* 32 bits   */
-#define DMAC_TRANS_SIZE_64          (3)     /* 64 bits   */
-#define DMAC_TRANS_SIZE_128         (4)     /* 128 bits  */
-#define DMAC_TRANS_SIZE_256         (5)     /* 256 bits  */
-#define DMAC_TRANS_SIZE_512         (6)     /* 512 bits  */
-#define DMAC_TRANS_SIZE_1024        (7)     /* 1024 bits */
-
-/* ==== Address increment for transferring ==== */
-#define DMAC_TRANS_ADR_NO_INC       (1)     /* Not increment */
-#define DMAC_TRANS_ADR_INC          (0)     /* Increment     */
-
-/* ==== Method for detecting DMA request ==== */
-#define DMAC_REQ_DET_FALL           (0)     /* Falling edge detection */
-#define DMAC_REQ_DET_RISE           (1)     /* Rising edge detection  */
-#define DMAC_REQ_DET_LOW            (2)     /* Low level detection    */
-#define DMAC_REQ_DET_HIGH           (3)     /* High level detection   */
-
-/* ==== Request Direction ==== */
-#define DMAC_REQ_DIR_SRC            (0)     /* DMAREQ is the source/ DMAACK is active when reading      */
-#define DMAC_REQ_DIR_DST            (1)     /* DMAREQ is the destination/ DMAACK is active when writing */
-
-/* ==== Descriptors ==== */
-#define DMAC_DESC_HEADER            (0)     /* Header              */
-#define DMAC_DESC_SRC_ADDR          (1)     /* Source Address      */
-#define DMAC_DESC_DST_ADDR          (2)     /* Destination Address */
-#define DMAC_DESC_COUNT             (3)     /* Transaction Byte    */
-#define DMAC_DESC_CHCFG             (4)     /* Channel Confg       */
-#define DMAC_DESC_CHITVL            (5)     /* Channel Interval    */
-#define DMAC_DESC_CHEXT             (6)     /* Channel Extension   */
-#define DMAC_DESC_LINK_ADDR         (7)     /* Link Address        */
-
-/* ==== On-chip peripheral module requests ===== */
-typedef enum dmac_request_factor
-{
-    DMAC_REQ_USB0_DMA0_TX,      /* USB_0 channel 0 transmit FIFO empty            */
-    DMAC_REQ_USB0_DMA0_RX,      /* USB_0 channel 0 receive FIFO full              */
-    DMAC_REQ_USB0_DMA1_TX,      /* USB_0 channel 1 transmit FIFO empty            */
-    DMAC_REQ_USB0_DMA1_RX,      /* USB_0 channel 1 receive FIFO full              */
-    DMAC_REQ_USB1_DMA0_TX,      /* USB_1 channel 0 transmit FIFO empty            */
-    DMAC_REQ_USB1_DMA0_RX,      /* USB_1 channel 0 receive FIFO full              */
-    DMAC_REQ_USB1_DMA1_TX,      /* USB_1 channel 1 transmit FIFO empty            */
-    DMAC_REQ_USB1_DMA1_RX,      /* USB_1 channel 1 receive FIFO full              */
-} dmac_request_factor_t;
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-void usb1_function_DMAC3_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
-                                        uint32_t request_factor, uint32_t req_direction);
-int32_t usb1_function_DMAC3_Open(uint32_t req);
-void usb1_function_DMAC3_Close(uint32_t *remain);
-void usb1_function_DMAC3_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
-
-void usb1_function_DMAC4_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
-                                        uint32_t request_factor, uint32_t req_direction);
-int32_t usb1_function_DMAC4_Open(uint32_t req);
-void usb1_function_DMAC4_Close(uint32_t *remain);
-void usb1_function_DMAC4_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* USB1_FUNCTION_DMACDRV_H */
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_dataio.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_dataio.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2932 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_dataio.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb1_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-static uint16_t g_usb1_function_mbw[(USB_FUNCTION_MAX_PIPE_NO + 1)];
-
-static void     usb1_function_start_receive_trns_c(uint16_t pipe, uint32_t size, uint8_t *data);
-static void     usb1_function_start_receive_trns_d0(uint16_t pipe, uint32_t size, uint8_t *data);
-static void     usb1_function_start_receive_trns_d1(uint16_t pipe, uint32_t size, uint8_t *data);
-static void     usb1_function_start_receive_dma_d0(uint16_t pipe, uint32_t size, uint8_t *data);
-static void     usb1_function_start_receive_dma_d1(uint16_t pipe, uint32_t size, uint8_t *data);
-static uint16_t usb1_function_read_dma_d0(uint16_t pipe);
-static uint16_t usb1_function_read_dma_d1(uint16_t pipe);
-static uint16_t usb1_function_write_dma_d0(uint16_t pipe);
-static uint16_t usb1_function_write_dma_d1(uint16_t pipe);
-
-static void     usb1_function_read_c_fifo(uint16_t pipe, uint16_t count);
-static void     usb1_function_write_c_fifo(uint16_t Pipe, uint16_t count);
-static void     usb1_function_read_d0_fifo(uint16_t pipe, uint16_t count);
-static void     usb1_function_write_d0_fifo(uint16_t pipe, uint16_t count);
-static void     usb1_function_read_d1_fifo(uint16_t pipe, uint16_t count);
-static void     usb1_function_write_d1_fifo(uint16_t pipe, uint16_t count);
-
-static void     usb1_function_clear_transaction_counter(uint16_t pipe);
-static void     usb1_function_set_transaction_counter(uint16_t pipe, uint32_t count);
-
-static uint32_t usb1_function_com_get_dmasize(uint32_t trncount, uint32_t dtptr);
-
-static uint16_t usb1_function_set_dfacc_d0(uint16_t mbw, uint32_t count);
-static uint16_t usb1_function_set_dfacc_d1(uint16_t mbw, uint32_t count);
-
-
-/*******************************************************************************
-* Function Name: usb1_function_start_send_transfer
-* Description  : Starts the USB data communication using pipe specified by the argument.
-* Arguments    : uint16_t  pipe    ; Pipe Number
-*              : uint32_t size     ; Data Size
-*              : uint8_t  *data    ; Data Address
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb1_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t status;
-    uint16_t usefifo;
-    uint16_t mbw;
-
-    g_usb1_function_data_count[pipe]   = size;
-    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    usb1_function_clear_bemp_sts(pipe);
-    usb1_function_clear_brdy_sts(pipe);
-    usb1_function_clear_nrdy_sts(pipe);
-
-    mbw = usb1_function_get_mbw(size, (uint32_t)data);
-
-    usefifo = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
-    switch (usefifo)
-    {
-        case USB_FUNCTION_D0FIFO_USE:
-        case USB_FUNCTION_D0FIFO_DMA:
-            usefifo = USB_FUNCTION_D0USE;
-        break;
-
-        case USB_FUNCTION_D1FIFO_USE:
-        case USB_FUNCTION_D1FIFO_DMA:
-            usefifo = USB_FUNCTION_D1USE;
-        break;
-
-        default:
-            usefifo = USB_FUNCTION_CUSE;
-        break;
-    };
-
-    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, usefifo, DEVDRV_USBF_NO, mbw);
-
-    usb1_function_clear_transaction_counter(pipe);
-
-    usb1_function_aclrm(pipe);
-
-    status = usb1_function_write_buffer(pipe);
-
-    if (status != DEVDRV_USBF_FIFOERROR)
-    {
-        usb1_function_set_pid_buf(pipe);
-    }
-
-    return status;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_write_buffer
-* Description  : Writes data in the buffer allocated in the pipe specified by
-*              : the argument. The FIFO for using is set in the pipe definition table.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb1_function_write_buffer (uint16_t pipe)
-{
-    uint16_t status;
-    uint16_t usefifo;
-
-    g_usb1_function_PipeIgnore[pipe] = 0;
-    usefifo = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
-    switch (usefifo)
-    {
-        case USB_FUNCTION_D0FIFO_USE:
-            status = usb1_function_write_buffer_d0(pipe);
-        break;
-
-        case USB_FUNCTION_D1FIFO_USE:
-            status = usb1_function_write_buffer_d1(pipe);
-        break;
-
-        case USB_FUNCTION_D0FIFO_DMA:
-            status = usb1_function_write_dma_d0(pipe);
-        break;
-
-        case USB_FUNCTION_D1FIFO_DMA:
-            status = usb1_function_write_dma_d1(pipe);
-        break;
-
-        default:
-            status = usb1_function_write_buffer_c(pipe);
-        break;
-    };
-
-    switch (status)
-    {
-        case DEVDRV_USBF_WRITING:                       /* Continue of data write */
-            usb1_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
-            usb1_function_enable_brdy_int(pipe);        /* Enable Ready Interrupt */
-        break;
-
-        case DEVDRV_USBF_WRITEEND:                      /* End of data write */
-        case DEVDRV_USBF_WRITESHRT:                     /* End of data write */
-            usb1_function_disable_brdy_int(pipe);       /* Disable Ready Interrupt */
-            usb1_function_clear_nrdy_sts(pipe);
-            usb1_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
-            /* for last transfer */
-            usb1_function_enable_bemp_int(pipe);        /* Enable Empty Interrupt */
-        break;
-
-        case DEVDRV_USBF_WRITEDMA:                      /* DMA write */
-            usb1_function_clear_nrdy_sts(pipe);
-            usb1_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
-        break;
-
-        case DEVDRV_USBF_FIFOERROR:                     /* FIFO access status */
-        default:
-            usb1_function_disable_brdy_int(pipe);       /* Disable Ready Interrupt */
-            usb1_function_disable_bemp_int(pipe);       /* Disable Empty Interrupt */
-            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
-        break;
-    }
-
-    return status;                      /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_write_buffer_c
-* Description  : Writes data in the buffer allocated in the pipe specified in
-*              : the argument. Writes data by CPU transfer using CFIFO.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb1_function_write_buffer_c (uint16_t pipe)
-{
-    uint32_t count;
-    uint16_t size;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-
-    if (g_usb1_function_CtrZeroLengthFlag == 1)
-    {
-        g_usb1_function_CtrZeroLengthFlag = 0;                  /* Zero Length Packet Flag CLR */
-        return DEVDRV_USBF_WRITEEND;
-    }
-
-    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
-    if (pipe == USB_FUNCTION_PIPE0)
-    {
-        buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
-    }
-    else
-    {
-        buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
-    }
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    size = usb1_function_get_buf_size(pipe);                    /* Data buffer size */
-    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb1_function_data_count[pipe] <= (uint32_t)size)
-    {
-        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
-        count  = g_usb1_function_data_count[pipe];
-
-        if (count == 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
-        }
-    }
-    else
-    {
-        status = DEVDRV_USBF_WRITING;                           /* write continues */
-        count  = (uint32_t)size;
-    }
-
-    usb1_function_write_c_fifo(pipe, (uint16_t)count);
-
-    if (g_usb1_function_data_count[pipe] < (uint32_t)size)
-    {
-        g_usb1_function_data_count[pipe] = 0;
-
-        if (RZA_IO_RegRead_16(&USB201.CFIFOCTR, USB_CFIFOCTR_BVAL_SHIFT, USB_CFIFOCTR_BVAL) == 0)
-        {
-            USB201.CFIFOCTR = USB_FUNCTION_BITBVAL;             /* Short Packet */
-            g_usb1_function_CtrZeroLengthFlag = 1;              /* Zero Length Packet Flag */
-        }
-    }
-    else
-    {
-        g_usb1_function_data_count[pipe] -= count;
-    }
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_write_buffer_d0
-* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
-*              : Writes data by CPU transfer using D0FIFO.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb1_function_write_buffer_d0 (uint16_t pipe)
-{
-    uint32_t count;
-    uint16_t size;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-
-    mbw    = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
-    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    size = usb1_function_get_buf_size(pipe);                    /* Data buffer size */
-    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb1_function_data_count[pipe] <= (uint32_t)size)
-    {
-        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
-        count  = g_usb1_function_data_count[pipe];
-
-        if (count == 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
-        }
-    }
-    else
-    {
-        status = DEVDRV_USBF_WRITING;                           /* write continues */
-        count  = (uint32_t)size;
-    }
-
-    usb1_function_write_d0_fifo(pipe, (uint16_t)count);
-
-    if (g_usb1_function_data_count[pipe] < (uint32_t)size)
-    {
-        g_usb1_function_data_count[pipe] = 0;
-        if (RZA_IO_RegRead_16(&USB201.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
-        {
-            USB201.D0FIFOCTR = USB_FUNCTION_BITBVAL;            /* Short Packet */
-        }
-    }
-    else
-    {
-        g_usb1_function_data_count[pipe] -= count;
-    }
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_write_buffer_d1
-* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
-*              : Writes data by CPU transfer using D1FIFO.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb1_function_write_buffer_d1 (uint16_t pipe)
-{
-    uint32_t count;
-    uint16_t size;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-
-    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
-    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    size = usb1_function_get_buf_size(pipe);                    /* Data buffer size */
-    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb1_function_data_count[pipe] <= (uint32_t)size)
-    {
-        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
-        count  = g_usb1_function_data_count[pipe];
-
-        if (count == 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
-        }
-    }
-    else
-    {
-        status = DEVDRV_USBF_WRITING;                           /* write continues */
-        count  = (uint32_t)size;
-    }
-
-    usb1_function_write_d1_fifo(pipe, (uint16_t)count);
-
-    if (g_usb1_function_data_count[pipe] < (uint32_t)size)
-    {
-        g_usb1_function_data_count[pipe] = 0;
-
-        if (RZA_IO_RegRead_16(&USB201.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
-        {
-            USB201.D1FIFOCTR = USB_FUNCTION_BITBVAL;            /* Short Packet */
-        }
-    }
-    else
-    {
-        g_usb1_function_data_count[pipe] -= count;
-    }
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_write_dma_d0
-* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
-*              : Writes data by DMA transfer using D0FIFO.
-*              : The DMA-ch for using is specified by Userdef_USB_usb1_function_start_dma().
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           : Write end
-*              : DEVDRV_USBF_WRITESHRT          : short data
-*              : DEVDRV_USBF_WRITING            : Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           : Write DMA
-*              : DEVDRV_USBF_FIFOERROR          : FIFO status
-*******************************************************************************/
-static uint16_t usb1_function_write_dma_d0 (uint16_t pipe)
-{
-    uint32_t count;
-    uint16_t size;
-    uint16_t buffer;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t dfacc = 0;
-
-    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
-    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                            /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    size  = usb1_function_get_buf_size(pipe);                       /* Data buffer size */
-    count = g_usb1_function_data_count[pipe];
-
-    if (count != 0)
-    {
-        g_usb1_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe;
-
-        if ((count % size) != 0)
-        {
-            g_usb1_function_DmaBval[USB_FUNCTION_D0FIFO] = 1;
-        }
-        else
-        {
-            g_usb1_function_DmaBval[USB_FUNCTION_D0FIFO] = 0;
-        }
-
-        dfacc = usb1_function_set_dfacc_d0(mbw, count);
-
-        if (mbw == USB_FUNCTION_BITMBW_32)
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2;  /* 32bit transfer */
-        }
-        else if (mbw == USB_FUNCTION_BITMBW_16)
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1;  /* 16bit transfer */
-        }
-        else
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0;  /* 8bit transfer */
-        }
-
-        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo   = USB_FUNCTION_D0FIFO_DMA;
-        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].dir    = USB_FUNCTION_BUF2FIFO;
-        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb1_function_data_pointer[pipe];
-        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes  = count;
-
-        Userdef_USB_usb1_function_start_dma(&g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
-
-        usb1_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
-
-        RZA_IO_RegWrite_16(&USB201.D0FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
-
-        g_usb1_function_data_count[pipe]    = 0;
-        g_usb1_function_data_pointer[pipe] += count;
-        status = DEVDRV_USBF_WRITEDMA;                              /* DMA write  */
-    }
-    else
-    {
-        if (RZA_IO_RegRead_16(&USB201.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
-        {
-            RZA_IO_RegWrite_16(&USB201.D0FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
-        }
-        status = DEVDRV_USBF_WRITESHRT;                             /* Short Packet is end of write */
-    }
-
-    return status;                                                  /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_write_dma_d1
-* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
-*              : Writes data by DMA transfer using D1FIFO.
-*              : The DMA-ch for using is specified by Userdef_USB_usb1_function_start_dma().
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND           : Write end
-*              : DEVDRV_USBF_WRITESHRT          : short data
-*              : DEVDRV_USBF_WRITING            : Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           : Write DMA
-*              : DEVDRV_USBF_FIFOERROR          : FIFO status
-*******************************************************************************/
-static uint16_t usb1_function_write_dma_d1 (uint16_t pipe)
-{
-    uint32_t count;
-    uint16_t size;
-    uint16_t buffer;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t dfacc=0;
-
-    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
-    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                            /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    size  = usb1_function_get_buf_size(pipe);                       /* Data buffer size */
-    count = g_usb1_function_data_count[pipe];
-
-    if (count != 0)
-    {
-        g_usb1_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe;
-        if ((count % size) != 0)
-        {
-            g_usb1_function_DmaBval[USB_FUNCTION_D1FIFO] = 1;
-        }
-        else
-        {
-            g_usb1_function_DmaBval[USB_FUNCTION_D1FIFO] = 0;
-        }
-
-        dfacc = usb1_function_set_dfacc_d1(mbw, count);
-
-        if (mbw == USB_FUNCTION_BITMBW_32)
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2;  /* 32bit transfer */
-        }
-        else if (mbw == USB_FUNCTION_BITMBW_16)
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1;  /* 16bit transfer */
-        }
-        else
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0;  /* 8bit transfer */
-        }
-
-        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo   = USB_FUNCTION_D1FIFO_DMA;
-        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].dir    = USB_FUNCTION_BUF2FIFO;
-        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb1_function_data_pointer[pipe];
-        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes  = count;
-
-        Userdef_USB_usb1_function_start_dma(&g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
-
-        usb1_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
-
-        RZA_IO_RegWrite_16(&USB201.D1FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
-
-        g_usb1_function_data_count[pipe]    = 0;
-        g_usb1_function_data_pointer[pipe] += count;
-
-        status = DEVDRV_USBF_WRITEDMA;                              /* DMA write  */
-    }
-    else
-    {
-        if (RZA_IO_RegRead_16(&USB201.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
-        {
-            RZA_IO_RegWrite_16(&USB201.D1FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
-        }
-        status = DEVDRV_USBF_WRITESHRT;                             /* Short Packet is end of write */
-    }
-
-    return status;                                                  /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_start_receive_transfer
-* Description  : Starts USB data reception using the pipe specified in the argument.
-*              : The FIFO for using is set in the pipe definition table.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-void usb1_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t usefifo;
-
-    usb1_function_clear_bemp_sts(pipe);
-    usb1_function_clear_brdy_sts(pipe);
-    usb1_function_clear_nrdy_sts(pipe);
-
-    usefifo = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
-    switch (usefifo)
-    {
-        case USB_FUNCTION_D0FIFO_USE:
-            usb1_function_start_receive_trns_d0(pipe, size, data);
-        break;
-
-        case USB_FUNCTION_D1FIFO_USE:
-            usb1_function_start_receive_trns_d1(pipe, size, data);
-        break;
-
-        case USB_FUNCTION_D0FIFO_DMA:
-            usb1_function_start_receive_dma_d0(pipe, size, data);
-        break;
-
-        case USB_FUNCTION_D1FIFO_DMA:
-            usb1_function_start_receive_dma_d1(pipe, size, data);
-        break;
-
-        default:
-            usb1_function_start_receive_trns_c(pipe, size, data);
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_start_receive_trns_c
-* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by CPU transfer using CFIFO.
-*              : When storing data in the buffer allocated in the pipe specified in the
-*              : argument, BRDY interrupt is generated to read data
-*              : in the interrupt.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_start_receive_trns_c (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb1_function_set_pid_nak(pipe);
-    g_usb1_function_data_count[pipe]   = size;
-    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb1_function_PipeIgnore[pipe]   = 0;
-
-    g_usb1_function_PipeDataSize[pipe] = size;
-    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    mbw = usb1_function_get_mbw(size, (uint32_t)data);
-    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_READ, mbw);
-    USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;
-
-    usb1_function_set_transaction_counter(pipe, size);
-
-    usb1_function_aclrm(pipe);
-
-    usb1_function_enable_nrdy_int(pipe);
-    usb1_function_enable_brdy_int(pipe);
-
-    usb1_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_start_receive_trns_d0
-* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by CPU transfer using D0FIFO.
-*              : This function does not read data from the buffer.
-*              : When storing data in the buffer allocated in the pipe specified
-*              : in the argument, BRDY interrupt is generated to read data in the
-*              : interrupt.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_start_receive_trns_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb1_function_set_pid_nak(pipe);
-    g_usb1_function_data_count[pipe]   = size;
-    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb1_function_PipeIgnore[pipe]   = 0;
-
-    g_usb1_function_PipeDataSize[pipe] = size;
-    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    mbw = usb1_function_get_mbw(size, (uint32_t)data);
-    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
-
-    usb1_function_set_transaction_counter(pipe, size);
-
-    usb1_function_aclrm(pipe);
-
-    usb1_function_enable_nrdy_int(pipe);
-    usb1_function_enable_brdy_int(pipe);
-
-    usb1_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_start_receive_trns_d1
-* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by CPU transfer using D1FIFO.
-*              : This function does not read data from the buffer.
-*              : When storing data in the buffer allocated in the pipe specified
-*              : in the argument, BRDY interrupt is generated to read data.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_start_receive_trns_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb1_function_set_pid_nak(pipe);
-    g_usb1_function_data_count[pipe]   = size;
-    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb1_function_PipeIgnore[pipe]   = 0;
-
-    g_usb1_function_PipeDataSize[pipe] = size;
-    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    mbw = usb1_function_get_mbw(size, (uint32_t)data);
-    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
-
-    usb1_function_set_transaction_counter(pipe, size);
-
-    usb1_function_aclrm(pipe);
-
-    usb1_function_enable_nrdy_int(pipe);
-    usb1_function_enable_brdy_int(pipe);
-
-    usb1_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_start_receive_dma_d0
-* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by DMA transfer using D0FIFO.
-*              : This function does not read data from the buffer.
-*              : When storing data in the buffer allocated in the pipe specified
-*              : in the argument, delivered read request to DMAC to read data from
-*              : the buffer by DMAC.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_start_receive_dma_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb1_function_set_pid_nak(pipe);
-    g_usb1_function_data_count[pipe]   = size;
-    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb1_function_PipeIgnore[pipe]   = 0;
-
-    g_usb1_function_PipeDataSize[pipe] = 0;
-    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    mbw = usb1_function_get_mbw(size, (uint32_t)data);
-    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
-
-    usb1_function_set_transaction_counter(pipe, size);
-
-    usb1_function_aclrm(pipe);
-
-    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        usb1_function_read_dma(pipe);
-
-        usb1_function_enable_nrdy_int(pipe);
-        usb1_function_enable_brdy_int(pipe);
-    }
-    else
-    {
-        usb1_function_enable_nrdy_int(pipe);
-        usb1_function_enable_brdy_int(pipe);
-    }
-
-    usb1_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_start_receive_dma_d1
-* Description  : Read data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by DMA transfer using D0FIFO.
-*              : This function does not read data from the buffer.
-*              : When storing data in the buffer allocated in the pipe specified
-*              : in the argument, delivered read request to DMAC to read data from
-*              : the buffer by DMAC.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_start_receive_dma_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb1_function_set_pid_nak(pipe);
-    g_usb1_function_data_count[pipe]   = size;
-    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
-    g_usb1_function_PipeIgnore[pipe]   = 0;
-
-    g_usb1_function_PipeDataSize[pipe] = 0;
-    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
-
-    mbw = usb1_function_get_mbw(size, (uint32_t)data);
-    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
-
-    usb1_function_set_transaction_counter(pipe, size);
-
-    usb1_function_aclrm(pipe);
-
-    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        usb1_function_read_dma(pipe);
-
-        usb1_function_enable_nrdy_int(pipe);
-        usb1_function_enable_brdy_int(pipe);
-    }
-    else
-    {
-        usb1_function_enable_nrdy_int(pipe);
-        usb1_function_enable_brdy_int(pipe);
-    }
-
-    usb1_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_read_buffer
-* Description  : Reads data from the buffer allocated in the pipe specified
-*              : in the argument.
-*              : Uses FIF0 set in the pipe definition table.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-uint16_t usb1_function_read_buffer (uint16_t pipe)
-{
-    uint16_t status;
-
-    g_usb1_function_PipeIgnore[pipe] = 0;
-
-    if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
-    {
-        status = usb1_function_read_buffer_d0(pipe);
-    }
-    else if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
-    {
-        status = usb1_function_read_buffer_d1(pipe);
-    }
-    else
-    {
-        status = usb1_function_read_buffer_c(pipe);
-    }
-
-    switch (status)
-    {
-        case USB_FUNCTION_READING:                                      /* Continue of data read */
-        break;
-
-        case USB_FUNCTION_READEND:                                      /* End of data read */
-        case USB_FUNCTION_READSHRT:                                     /* End of data read */
-            usb1_function_disable_brdy_int(pipe);
-            g_usb1_function_PipeDataSize[pipe]   -= g_usb1_function_data_count[pipe];
-            g_usb1_function_pipe_status[pipe]     = DEVDRV_USBF_PIPE_DONE;
-        break;
-
-        case USB_FUNCTION_READOVER:                                     /* buffer over */
-            if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
-            {
-                USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-            }
-            else if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
-            {
-                USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-            }
-            else
-            {
-                USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;                 /* Clear BCLR */
-            }
-            usb1_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
-            g_usb1_function_PipeDataSize[pipe] -= g_usb1_function_data_count[pipe];
-            g_usb1_function_pipe_status[pipe]   = DEVDRV_USBF_FIFOERROR;
-        break;
-
-        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access status */
-        default:
-            usb1_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
-            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
-        break;
-    }
-
-    return status;                                                      /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_read_buffer_c
-* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
-*              : Reads data by CPU transfer using CFIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-uint16_t usb1_function_read_buffer_c (uint16_t pipe)
-{
-    uint32_t count;
-    uint32_t dtln;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-
-    mbw    = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
-    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
-    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb1_function_data_count[pipe] < dtln)                /* Buffer Over ? */
-    {
-        status = USB_FUNCTION_READOVER;
-        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = g_usb1_function_data_count[pipe];
-    }
-    else if (g_usb1_function_data_count[pipe] == dtln)          /* just Receive Size */
-    {
-        status = USB_FUNCTION_READEND;
-        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = dtln;
-
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-        }
-    }
-    else                                                        /* continue Receive data */
-    {
-        status = USB_FUNCTION_READING;
-        count  = dtln;
-
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-    }
-
-    if (count == 0)                                             /* 0 length packet */
-    {
-        USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;                 /* Clear BCLR */
-    }
-    else
-    {
-        usb1_function_read_c_fifo(pipe, (uint16_t)count);
-    }
-
-    g_usb1_function_data_count[pipe] -= count;
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_read_buffer_d0
-* Description  : Reads data from the buffer allocated in the pipe specified in
-*              : the argument.
-*              : Reads data by CPU transfer using D0FIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-uint16_t usb1_function_read_buffer_d0 (uint16_t pipe)
-{
-    uint32_t count;
-    uint32_t dtln;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t pipebuf_size;
-
-    mbw    = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
-    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
-    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb1_function_data_count[pipe] < dtln)                /* Buffer Over ? */
-    {
-        status = USB_FUNCTION_READOVER;
-        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = g_usb1_function_data_count[pipe];
-    }
-    else if (g_usb1_function_data_count[pipe] == dtln)          /* just Receive Size */
-    {
-        status = USB_FUNCTION_READEND;
-        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = dtln;
-
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-        }
-    }
-    else                                                        /* continue Receive data */
-    {
-        status = USB_FUNCTION_READING;
-        count  = dtln;
-
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-        else
-        {
-            pipebuf_size = usb1_function_get_buf_size(pipe);    /* Data buffer size */
-
-            if (count != pipebuf_size)
-            {
-                status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
-                usb1_function_set_pid_nak(pipe);                /* Set NAK */
-            }
-        }
-    }
-
-    if (count == 0)                                             /* 0 length packet */
-    {
-        USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-    }
-    else
-    {
-        usb1_function_read_d0_fifo(pipe, (uint16_t)count);
-    }
-
-    g_usb1_function_data_count[pipe] -= count;
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_read_buffer_d1
-* Description  : Reads data from the buffer allocated in the pipe specified
-*              : in the argument.
-*              : Reads data by CPU transfer using D1FIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-uint16_t usb1_function_read_buffer_d1 (uint16_t pipe)
-{
-    uint32_t count;
-    uint32_t dtln;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t pipebuf_size;
-
-    mbw    = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
-    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
-
-    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-    {
-        return DEVDRV_USBF_FIFOERROR;
-    }
-
-    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
-    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
-
-    if (g_usb1_function_data_count[pipe] < dtln)                /* Buffer Over ? */
-    {
-        status = USB_FUNCTION_READOVER;
-        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = g_usb1_function_data_count[pipe];
-    }
-    else if (g_usb1_function_data_count[pipe] == dtln)          /* just Receive Size */
-    {
-        status = USB_FUNCTION_READEND;
-        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
-        count = dtln;
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-        }
-    }
-    else                                                        /* continue Receive data */
-    {
-        status = USB_FUNCTION_READING;
-        count  = dtln;
-        if (count == 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-
-        if ((count % mxps) != 0)
-        {
-            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
-        }
-        else
-        {
-            pipebuf_size = usb1_function_get_buf_size(pipe);    /* Data buffer size */
-
-            if (count != pipebuf_size)
-            {
-                status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
-                usb1_function_set_pid_nak(pipe);                /* Set NAK */
-            }
-        }
-    }
-
-    if (count == 0)                                             /* 0 length packet */
-    {
-        USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-    }
-    else
-    {
-        usb1_function_read_d1_fifo(pipe, (uint16_t)count);
-    }
-
-    g_usb1_function_data_count[pipe] -= count;
-
-    return status;                                              /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_read_dma
-* Description  : Reads data from the buffer allocated in the pipe specified
-*              : in the argument.
-*              : Reads data by DMA transfer using D0FIFO or D1FIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-uint16_t usb1_function_read_dma (uint16_t pipe)
-{
-    uint16_t status;
-
-    g_usb1_function_PipeIgnore[pipe] = 0;
-    if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
-    {
-        status = usb1_function_read_dma_d0(pipe);
-    }
-    else
-    {
-        status = usb1_function_read_dma_d1(pipe);
-    }
-
-    switch (status)
-    {
-        case USB_FUNCTION_READING:                                      /* Continue of data read */
-        break;
-
-        case USB_FUNCTION_READZERO:                                     /* End of data read */
-            usb1_function_disable_brdy_int(pipe);
-            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-        break;
-
-        case USB_FUNCTION_READEND:                                      /* End of data read */
-        case USB_FUNCTION_READSHRT:                                     /* End of data read */
-            usb1_function_disable_brdy_int(pipe);
-
-            if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-            {
-                g_usb1_function_PipeDataSize[pipe] -= g_usb1_function_data_count[pipe];
-            }
-        break;
-
-        case USB_FUNCTION_READOVER:                                     /* buffer over */
-            usb1_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
-
-            if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-            {
-                g_usb1_function_PipeDataSize[pipe] -= g_usb1_function_data_count[pipe];
-            }
-            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
-        break;
-
-        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access status */
-        default:
-            usb1_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
-            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
-        break;
-    }
-
-    return status;                                                      /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_read_dma_d0
-* Description  : Writes data in the buffer allocated in the pipe specified
-*              : in the argument.
-*              : Reads data by DMA transfer using D0FIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READZERO         ; zero data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-static uint16_t usb1_function_read_dma_d0 (uint16_t pipe)
-{
-    uint32_t count;
-    uint32_t dtln;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t dfacc = 0;
-    uint16_t pipebuf_size;
-
-    g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
-
-    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
-
-    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        count  = g_usb1_function_data_count[pipe];
-        status = USB_FUNCTION_READING;
-    }
-    else
-    {
-        buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
-
-        if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-        {
-            return DEVDRV_USBF_FIFOERROR;
-        }
-
-        dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
-        mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
-
-        if (g_usb1_function_data_count[pipe] < dtln)                /* Buffer Over ? */
-        {
-            status = USB_FUNCTION_READOVER;
-            count  = g_usb1_function_data_count[pipe];
-        }
-        else if (g_usb1_function_data_count[pipe] == dtln)          /* just Receive Size */
-        {
-            status = USB_FUNCTION_READEND;
-            count  = dtln;
-            if (count == 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            }
-
-            if ((count % mxps) != 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            }
-        }
-        else                                                        /* continue Receive data */
-        {
-            status = USB_FUNCTION_READING;
-            count  = dtln;
-
-            if (count == 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            }
-
-            if ((count % mxps) != 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            }
-            else
-            {
-                pipebuf_size = usb1_function_get_buf_size(pipe);    /* Data buffer size */
-                if (count != pipebuf_size)
-                {
-                    status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
-                }
-            }
-        }
-    }
-
-    if (count == 0)                                                 /* 0 length packet */
-    {
-        if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-        {
-            USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-            status = USB_FUNCTION_READZERO;                         /* Null Packet receive */
-        }
-        else
-        {
-            usb1_function_set_curpipe(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
-                                                                    /* transaction counter No set */
-                                                                    /* FRDY = 1, DTLN = 0 -> BRDY */
-        }
-    }
-    else
-    {
-        dfacc = usb1_function_set_dfacc_d0(mbw, count);
-
-        if (mbw == USB_FUNCTION_BITMBW_32)
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2;  /* 32bit transfer */
-        }
-        else if (mbw == USB_FUNCTION_BITMBW_16)
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1;  /* 16bit transfer */
-        }
-        else
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0;  /* 8bit transfer */
-        }
-
-        g_usb1_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe;        /* not use in read operation */
-        g_usb1_function_DmaBval[USB_FUNCTION_D0FIFO] = 0;           /* not use in read operation */
-
-        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo   = USB_FUNCTION_D0FIFO_DMA;
-        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].dir    = USB_FUNCTION_FIFO2BUF;
-        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb1_function_data_pointer[pipe];
-        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes  = count;
-
-        if (status == USB_FUNCTION_READING)
-        {
-            g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSY;
-        }
-        else
-        {
-            g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSYEND;
-        }
-
-        Userdef_USB_usb1_function_start_dma(&g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
-
-        usb1_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
-
-        RZA_IO_RegWrite_16(&USB201.D0FIFOSEL,
-                            1,
-                            USB_DnFIFOSEL_DREQE_SHIFT,
-                            USB_DnFIFOSEL_DREQE);
-    }
-
-    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-    {
-        g_usb1_function_data_count[pipe]   -= count;
-        g_usb1_function_data_pointer[pipe] += count;
-        g_usb1_function_PipeDataSize[pipe] += count;
-    }
-
-    return status;                                                  /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_read_dma_d1
-* Description  : Reads data from the buffer allocated in the pipe specified in
-*              : the argument.
-*              : Reads data by DMA transfer using D1FIFO.
-* Arguments    : uint16_t pipe     ; Pipe Number
-* Return Value : USB_FUNCTION_READEND          ; Read end
-*              : USB_FUNCTION_READSHRT         ; short data
-*              : USB_FUNCTION_READZERO         ; zero data
-*              : USB_FUNCTION_READING          ; Continue of data read
-*              : USB_FUNCTION_READOVER         ; buffer over
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
-*******************************************************************************/
-static uint16_t usb1_function_read_dma_d1 (uint16_t pipe)
-{
-    uint32_t count;
-    uint32_t dtln;
-    uint16_t buffer;
-    uint16_t mxps;
-    uint16_t status;
-    uint16_t mbw;
-    uint16_t dfacc = 0;
-    uint16_t pipebuf_size;
-
-    g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
-
-    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
-
-    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        count  = g_usb1_function_data_count[pipe];
-        status = USB_FUNCTION_READING;
-    }
-    else
-    {
-        buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
-        if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
-        {
-            return DEVDRV_USBF_FIFOERROR;
-        }
-
-        dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
-        mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
-
-        if (g_usb1_function_data_count[pipe] < dtln)                /* Buffer Over ? */
-        {
-            status = USB_FUNCTION_READOVER;
-            count  = g_usb1_function_data_count[pipe];
-        }
-        else if (g_usb1_function_data_count[pipe] == dtln)          /* just Receive Size */
-        {
-            status = USB_FUNCTION_READEND;
-            count  = dtln;
-            if (count == 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            }
-
-            if ((count % mxps) != 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            }
-        }
-        else                                                        /* continue Receive data */
-        {
-            status = USB_FUNCTION_READING;
-            count  = dtln;
-            if (count == 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
-            }
-
-            if ((count % mxps) != 0)
-            {
-                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
-            }
-            else
-            {
-                pipebuf_size = usb1_function_get_buf_size(pipe);    /* Data buffer size */
-                if (count != pipebuf_size)
-                {
-                    status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
-                }
-            }
-        }
-    }
-
-    if (count == 0)                                                 /* 0 length packet */
-    {
-        if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-        {
-            USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
-            status = USB_FUNCTION_READZERO;                         /* Null Packet receive */
-        }
-        else
-        {
-            usb1_function_set_curpipe(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
-                                                                    /* transaction counter No set */
-                                                                    /* FRDY = 1, DTLN = 0 -> BRDY */
-        }
-    }
-    else
-    {
-        dfacc = usb1_function_set_dfacc_d1(mbw, count);
-
-        if (mbw == USB_FUNCTION_BITMBW_32)
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2;  /* 32bit transfer */
-        }
-        else if (mbw == USB_FUNCTION_BITMBW_16)
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1;  /* 16bit transfer */
-        }
-        else
-        {
-            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0;  /* 8bit transfer */
-        }
-
-        g_usb1_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe;        /* not use in read operation */
-        g_usb1_function_DmaBval[USB_FUNCTION_D1FIFO] = 0;           /* not use in read operation */
-
-        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo   = USB_FUNCTION_D1FIFO_DMA;
-        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].dir    = USB_FUNCTION_FIFO2BUF;
-        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb1_function_data_pointer[pipe];
-        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes  = count;
-
-        if (status == USB_FUNCTION_READING)
-        {
-            g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSY;
-        }
-        else
-        {
-            g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSYEND;
-        }
-
-        Userdef_USB_usb1_function_start_dma(&g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
-
-        usb1_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
-
-        RZA_IO_RegWrite_16(&USB201.D1FIFOSEL,
-                            1,
-                            USB_DnFIFOSEL_DREQE_SHIFT,
-                            USB_DnFIFOSEL_DREQE);
-    }
-
-    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-    {
-        g_usb1_function_data_count[pipe]   -= count;
-        g_usb1_function_data_pointer[pipe] += count;
-        g_usb1_function_PipeDataSize[pipe] += count;
-    }
-
-    return status;                                                  /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_change_fifo_port
-* Description  : Allocates FIF0 specified by the argument in the pipe assigned
-*              : by the argument. After allocating FIF0, waits in the software
-*              : till the corresponding pipe becomes ready.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t fifosel   ; Select FIFO
-*              : uint16_t isel      ; FIFO Access Direction
-*              : uint16_t mbw       ; FIFO Port Access Bit Width
-* Return Value : DEVDRV_USBF_FIFOERROR          ; Error
-*              : Others            ; CFIFOCTR/D0FIFOCTR/D1FIFOCTR Register Value
-*******************************************************************************/
-uint16_t usb1_function_change_fifo_port (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
-{
-    uint16_t buffer;
-    uint32_t loop;
-    volatile uint32_t loop2;
-
-    usb1_function_set_curpipe(pipe, fifosel, isel, mbw);
-
-    for (loop = 0; loop < 4; loop++)
-    {
-        switch (fifosel)
-        {
-            case USB_FUNCTION_CUSE:
-                buffer = USB201.CFIFOCTR;
-            break;
-
-            case USB_FUNCTION_D0USE:
-            case USB_FUNCTION_D0DMA:
-                buffer = USB201.D0FIFOCTR;
-            break;
-
-            case USB_FUNCTION_D1USE:
-            case USB_FUNCTION_D1DMA:
-                buffer = USB201.D1FIFOCTR;
-            break;
-
-            default:
-                buffer = 0;
-            break;
-        }
-
-        if ((buffer & USB_FUNCTION_BITFRDY) == USB_FUNCTION_BITFRDY)
-        {
-            return buffer;
-        }
-
-        loop2 = 25;
-        while (loop2-- > 0)
-        {
-            /* wait */
-        }
-    }
-
-    return DEVDRV_USBF_FIFOERROR;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_curpipe
-* Description  : Allocates FIF0 specified by the argument in the pipe assigned
-*              : by the argument.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t fifosel   ; Select FIFO
-*              : uint16_t isel      ; FIFO Access Direction
-*              : uint16_t mbw       ; FIFO Port Access Bit Width
-* Return Value : none
-*******************************************************************************/
-void usb1_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
-{
-    uint16_t buffer;
-    uint32_t loop;
-    volatile uint32_t loop2;
-
-    g_usb1_function_mbw[pipe] = mbw;
-
-    switch (fifosel)
-    {
-        case USB_FUNCTION_CUSE:
-            buffer  = USB201.CFIFOSEL;
-            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
-            buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
-            USB201.CFIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
-                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(isel | pipe | mbw);
-            USB201.CFIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
-                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        case USB_FUNCTION_D0DMA:
-        case USB_FUNCTION_D0USE:
-            buffer  = USB201.D0FIFOSEL;
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
-            USB201.D0FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
-                        (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(pipe | mbw);
-            USB201.D0FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
-                        (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        case USB_FUNCTION_D1DMA:
-        case USB_FUNCTION_D1USE:
-            buffer  = USB201.D1FIFOSEL;
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
-            USB201.D1FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
-                        (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(pipe | mbw);
-            USB201.D1FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
-                        (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        default:
-        break;
-    }
-
-    /* Cautions !!!
-     * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
-     * For details, please look at the data sheet.   */
-    loop2 = 100;
-
-    while (loop2-- > 0)
-    {
-        /* wait */
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_curpipe2
-* Description  : Allocates FIF0 specified by the argument in the pipe assigned
-*              : by the argument.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t fifosel   ; Select FIFO
-*              : uint16_t isel      ; FIFO Access Direction
-*              : uint16_t mbw       ; FIFO Port Access Bit Width
-*              : uint16_t dfacc     ; DFACC Access mode
-* Return Value : none
-*******************************************************************************/
-void usb1_function_set_curpipe2 (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc)
-{
-    uint16_t buffer;
-    uint32_t loop;
-#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
-    uint32_t dummy;
-#endif
-    volatile uint32_t loop2;
-
-    g_usb1_function_mbw[pipe] = mbw;
-
-    switch (fifosel)
-    {
-        case USB_FUNCTION_CUSE:
-            buffer  = USB201.CFIFOSEL;
-            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
-            buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
-            USB201.CFIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
-                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(isel | pipe | mbw);
-            USB201.CFIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
-                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        case USB_FUNCTION_D0DMA:
-        case USB_FUNCTION_D0USE:
-            buffer  = USB201.D0FIFOSEL;
-#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-
-            if (dfacc != 0)
-            {
-                buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
-            }
-#else
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
-#endif
-            USB201.D0FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-
-#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
-            if (dfacc != 0)
-            {
-                dummy = USB201.D0FIFO.UINT32;
-            }
-#endif
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(pipe | mbw);
-            USB201.D0FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        case USB_FUNCTION_D1DMA:
-        case USB_FUNCTION_D1USE:
-            buffer  = USB201.D1FIFOSEL;
-#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-
-            if (dfacc != 0)
-            {
-                buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
-            }
-#else
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
-#endif
-            USB201.D1FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
-            if (dfacc != 0)
-            {
-                dummy = USB201.D1FIFO.UINT32;
-                loop = dummy;                   // avoid warning.
-            }
-#endif
-            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-            buffer |= (uint16_t)(pipe | mbw);
-            USB201.D1FIFOSEL = buffer;
-
-            for (loop = 0; loop < 4; loop++)
-            {
-                if ((USB201.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
-                {
-                    break;
-                }
-
-                loop2 = 100;
-
-                while (loop2-- > 0)
-                {
-                    /* wait */
-                }
-            }
-        break;
-
-        default:
-        break;
-    }
-
-    /* Cautions !!!
-     * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
-     * For details, please look at the data sheet.   */
-    loop2 = 100;
-
-    while (loop2-- > 0)
-    {
-        /* wait */
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_write_c_fifo
-* Description  : Writes data in CFIFO.
-*              : Writes data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating CFIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb1_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_write_c_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            USB201.CFIFO.UINT8[HH] = *g_usb1_function_data_pointer[pipe];
-            g_usb1_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)(count / 2); even; --even)
-        {
-            USB201.CFIFO.UINT16[H] = *((uint16_t *)g_usb1_function_data_pointer[pipe]);
-            g_usb1_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)(count / 4); even; --even)
-        {
-            USB201.CFIFO.UINT32 = *((uint32_t *)g_usb1_function_data_pointer[pipe]);
-            g_usb1_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_read_c_fifo
-* Description  : Reads data from CFIFO.
-*              : Reads data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating CFIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb1_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_read_c_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            *g_usb1_function_data_pointer[pipe] = USB201.CFIFO.UINT8[HH];
-            g_usb1_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)((count + 1) / 2); even; --even)
-        {
-            *((uint16_t *)g_usb1_function_data_pointer[pipe]) = USB201.CFIFO.UINT16[H];
-            g_usb1_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)((count + 3) / 4); even; --even)
-        {
-            *((uint32_t *)g_usb1_function_data_pointer[pipe]) = USB201.CFIFO.UINT32;
-            g_usb1_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_write_d0_fifo
-* Description  : Writes data in D0FIFO.
-*              : Writes data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating CFIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb1_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_write_d0_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            USB201.D0FIFO.UINT8[HH] = *g_usb1_function_data_pointer[pipe];
-            g_usb1_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)(count / 2); even; --even)
-        {
-            USB201.D0FIFO.UINT16[H] = *((uint16_t *)g_usb1_function_data_pointer[pipe]);
-            g_usb1_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)(count / 4); even; --even)
-        {
-            USB201.D0FIFO.UINT32 = *((uint32_t *)g_usb1_function_data_pointer[pipe]);
-            g_usb1_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_read_d0_fifo
-* Description  : Reads data from D0FIFO.
-*              : Reads data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating DOFIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb1_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_read_d0_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            *g_usb1_function_data_pointer[pipe] = USB201.D0FIFO.UINT8[HH];
-            g_usb1_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)((count + 1) / 2); even; --even)
-        {
-            *((uint16_t *)g_usb1_function_data_pointer[pipe]) = USB201.D0FIFO.UINT16[H];
-            g_usb1_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)((count + 3) / 4); even; --even)
-        {
-            *((uint32_t *)g_usb1_function_data_pointer[pipe]) = USB201.D0FIFO.UINT32;
-            g_usb1_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_write_d1_fifo
-* Description  : Writes data in D1FIFO.
-*              : Writes data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating D1FIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb1_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_write_d1_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            USB201.D1FIFO.UINT8[HH] = *g_usb1_function_data_pointer[pipe];
-            g_usb1_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)(count / 2); even; --even)
-        {
-            USB201.D1FIFO.UINT16[H] = *((uint16_t *)g_usb1_function_data_pointer[pipe]);
-            g_usb1_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)(count / 4); even; --even)
-        {
-            USB201.D1FIFO.UINT32 = *((uint32_t *)g_usb1_function_data_pointer[pipe]);
-            g_usb1_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_read_d1_fifo
-* Description  : Reads data from D1FIFO.
-*              : Reads data by BYTE/WORD/LONG according to access size
-*              : to the pipe specified by the arguments.
-*              : Before executing this function, allocating D1FIF0 in the specified pipe
-*              : should be completed.
-*              : Before executing this function, access size to the specified pipe
-*              : should be fixed and set in g_usb1_function_mbw[].
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t count     ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_read_d1_fifo (uint16_t pipe, uint16_t count)
-{
-    uint16_t even;
-
-    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
-    {
-        for (even = count; even; --even)
-        {
-            *g_usb1_function_data_pointer[pipe] = USB201.D1FIFO.UINT8[HH];
-            g_usb1_function_data_pointer[pipe] += 1;
-        }
-    }
-    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
-    {
-        for (even = (uint16_t)((count + 1) / 2); even; --even)
-        {
-            *((uint16_t *)g_usb1_function_data_pointer[pipe]) = USB201.D1FIFO.UINT16[H];
-            g_usb1_function_data_pointer[pipe] += 2;
-        }
-    }
-    else
-    {
-        for (even = (uint16_t)((count + 3) / 4); even; --even)
-        {
-            *((uint32_t *)g_usb1_function_data_pointer[pipe]) = USB201.D1FIFO.UINT32;
-            g_usb1_function_data_pointer[pipe] += 4;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_com_get_dmasize
-* Description  : Calculates access width of DMA transfer by the argument to
-*              : return as the Return Value.
-* Arguments    : uint32_t trncount   : transfer byte
-*              : uint32_t dtptr      : transfer data pointer
-* Return Value : DMA transfer size    : 0   8bit
-*              :                      : 1  16bit
-*              :                      : 2  32bit
-*******************************************************************************/
-static uint32_t usb1_function_com_get_dmasize (uint32_t trncount, uint32_t dtptr)
-{
-    uint32_t size;
-
-    if (((trncount & 0x0001) != 0) || ((dtptr & 0x00000001) != 0))
-    {
-        /*  When transfer byte count is odd         */
-        /* or transfer data area is 8-bit alignment */
-        size = 0;           /* 8bit */
-    }
-    else if (((trncount & 0x0003) != 0) || ((dtptr & 0x00000003) != 0))
-    {
-        /* When the transfer byte count is multiples of 2 */
-        /* or the transfer data area is 16-bit alignment */
-        size = 1;           /* 16bit */
-    }
-    else
-    {
-        /* When the transfer byte count is multiples of 4 */
-        /* or the transfer data area is 32-bit alignment */
-        size = 2;           /* 32bit */
-    }
-
-    return size;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_get_mbw
-* Description  : Calculates access width of DMA to return the value set in MBW.
-* Arguments    : uint32_t trncount   : transfer byte
-*              : uint32_t dtptr      : transfer data pointer
-* Return Value : FIFO transfer size   : USB_FUNCTION_BITMBW_8    8bit
-*              :                      : USB_FUNCTION_BITMBW_16  16bit
-*              :                      : USB_FUNCTION_BITMBW_32  32bit
-*******************************************************************************/
-uint16_t usb1_function_get_mbw (uint32_t trncount, uint32_t dtptr)
-{
-    uint32_t size;
-    uint16_t mbw;
-
-    size = usb1_function_com_get_dmasize(trncount, dtptr);
-
-    if (size == 0)
-    {
-        /* 8bit */
-        mbw = USB_FUNCTION_BITMBW_8;
-    }
-    else if (size == 1)
-    {
-        /* 16bit */
-        mbw = USB_FUNCTION_BITMBW_16;
-    }
-    else
-    {
-        /* 32bit */
-        mbw = USB_FUNCTION_BITMBW_32;
-    }
-
-    return mbw;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_transaction_counter
-* Description  : Sets transaction counter by the argument(PIPEnTRN).
-*              : Clears transaction before setting to enable transaction counter setting.
-* Arguments    : uint16_t pipe     ; Pipe number
-*              : uint32_t bsize    : Data transfer size
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_set_transaction_counter (uint16_t pipe, uint32_t bsize)
-{
-    uint16_t mxps;
-    uint16_t cnt;
-
-    if (bsize  == 0)
-    {
-        return;
-    }
-
-    mxps = usb1_function_get_mxps(pipe);            /* Max Packet Size */
-
-    if ((bsize % mxps) == 0)
-    {
-        cnt = (uint16_t)(bsize / mxps);
-    }
-    else
-    {
-        cnt = (uint16_t)((bsize / mxps) + 1);
-    }
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB201.PIPE1TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPE1TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPE1TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB201.PIPE2TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPE2TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPE2TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB201.PIPE3TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPE3TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPE3TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB201.PIPE4TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPE4TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPE4TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB201.PIPE5TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPE5TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPE5TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB201.PIPE9TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPE9TRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPE9TRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB201.PIPEATRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPEATRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPEATRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB201.PIPEBTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPEBTRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPEBTRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB201.PIPECTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPECTRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPECTRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB201.PIPEDTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPEDTRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPEDTRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB201.PIPEETRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPEETRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPEETRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB201.PIPEFTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-            USB201.PIPEFTRN             = cnt;
-            RZA_IO_RegWrite_16(&USB201.PIPEFTRE,
-                                1,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_clear_transaction_counter
-* Description  : Clears the transaction counter by the argument.
-*              : After executing this function, the transaction counter is invalid.
-* Arguments    : uint16_t pipe     ; Pipe number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_clear_transaction_counter (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB201.PIPE1TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPE1TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB201.PIPE2TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPE2TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB201.PIPE3TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPE3TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB201.PIPE4TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPE4TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB201.PIPE5TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPE5TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB201.PIPE9TRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPE9TRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB201.PIPEATRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPEATRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB201.PIPEBTRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPEBTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB201.PIPECTRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPECTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB201.PIPEDTRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPEDTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB201.PIPEETRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPEETRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB201.PIPEFTRE,
-                                0,
-                                USB_PIPEnTRE_TRENB_SHIFT,
-                                USB_PIPEnTRE_TRENB);
-            RZA_IO_RegWrite_16(&USB201.PIPEFTRE,
-                                1,
-                                USB_PIPEnTRE_TRCLR_SHIFT,
-                                USB_PIPEnTRE_TRCLR);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_stop_transfer
-* Description  : Stops the USB transfer in the pipe specified by the argument.
-*              : After stopping the USB transfer, clears the buffer allocated in
-*              : the pipe.
-*              : After executing this function, allocation in FIF0 becomes USB_FUNCTION_PIPE0;
-*              : invalid. After executing this function, BRDY/NRDY/BEMP interrupt
-*              : in the corresponding pipe becomes invalid. Sequence bit is also
-*              : cleared.
-* Arguments    : uint16_t  pipe     ; Pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_stop_transfer (uint16_t pipe)
-{
-    uint16_t usefifo;
-    uint32_t remain;
-    uint16_t fifo;
-
-    usb1_function_set_pid_nak(pipe);
-
-    usefifo = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-    switch (usefifo)
-    {
-        case USB_FUNCTION_D0FIFO_USE:
-            usb1_function_clear_transaction_counter(pipe);
-            USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
-            fifo = USB_FUNCTION_D0USE;
-        break;
-
-        case USB_FUNCTION_D1FIFO_USE:
-            usb1_function_clear_transaction_counter(pipe);
-            USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
-            fifo = USB_FUNCTION_D1USE;
-        break;
-
-        case USB_FUNCTION_D0FIFO_DMA:
-            remain = Userdef_USB_usb1_function_stop_dma0();
-            usb1_function_dma_stop_d0(pipe, remain);
-            usb1_function_clear_transaction_counter(pipe);
-            USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
-            fifo = USB_FUNCTION_D0DMA;
-        break;
-
-        case USB_FUNCTION_D1FIFO_DMA:
-            remain = Userdef_USB_usb1_function_stop_dma1();
-            usb1_function_dma_stop_d1(pipe, remain);
-            usb1_function_clear_transaction_counter(pipe);
-            USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
-            fifo = USB_FUNCTION_D1DMA;
-        break;
-
-        default:
-            usb1_function_clear_transaction_counter(pipe);
-            USB201.CFIFOCTR =  USB_FUNCTION_BITBCLR;        /* Buffer Clear */
-            fifo = USB_FUNCTION_CUSE;
-        break;
-    }
-
-    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, fifo, DEVDRV_USBF_NO, USB_FUNCTION_BITMBW_16);
-
-    /* Interrupt of pipe set is disabled */
-    usb1_function_disable_brdy_int(pipe);
-    usb1_function_disable_nrdy_int(pipe);
-    usb1_function_disable_bemp_int(pipe);
-
-    usb1_function_aclrm(pipe);
-    usb1_function_set_csclr(pipe);
-
-    if ( g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT )
-    {
-        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_dfacc_d0
-* Description  : Sets the DFACC setting value in D0FIFO using the transfer size.
-* Arguments    : uint16_t mbw     ; MBW
-*              : uint16_t count   ; data count
-* Return Value : DFACC Access mode
-*******************************************************************************/
-static uint16_t usb1_function_set_dfacc_d0 (uint16_t mbw, uint32_t count)
-{
-    uint16_t dfacc = 0;
-
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-    RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                        0,
-                        USB_DnFBCFG_DFACC_SHIFT,
-                        USB_DnFBCFG_DFACC);
-    RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                        0,
-                        USB_DnFBCFG_TENDE_SHIFT,
-                        USB_DnFBCFG_TENDE);
-    dfacc = 0;
-#else
-    if (mbw == USB_FUNCTION_BITMBW_32)
-    {
-        if ((count % 32) == 0)
-        {
-            /* 32byte transfer */
-            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                                2,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 2;
-        }
-        else if ((count % 16) == 0)
-        {
-            /* 16byte transfer */
-            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                                1,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 1;
-        }
-        else
-        {
-            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                                0,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 0;
-        }
-    }
-    else if (mbw == USB_FUNCTION_BITMBW_16)
-    {
-        RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                            0,
-                            USB_DnFBCFG_DFACC_SHIFT,
-                            USB_DnFBCFG_DFACC);
-        RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                            0,
-                            USB_DnFBCFG_TENDE_SHIFT,
-                            USB_DnFBCFG_TENDE);
-        dfacc = 0;
-    }
-    else
-    {
-        RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                            0,
-                            USB_DnFBCFG_DFACC_SHIFT,
-                            USB_DnFBCFG_DFACC);
-        RZA_IO_RegWrite_16(&USB201.D0FBCFG,
-                            0,
-                            USB_DnFBCFG_TENDE_SHIFT,
-                            USB_DnFBCFG_TENDE);
-        dfacc = 0;
-    }
-#endif
-    return dfacc;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_dfacc_d1
-* Description  : Set the DFACC setting value in D1FIFO using the transfer size.
-* Arguments    : uint16_t mbw     ; MBW
-*              : uint16_t count   ; data count
-* Return Value : DFACC Access mode
-*******************************************************************************/
-static uint16_t usb1_function_set_dfacc_d1 (uint16_t mbw, uint32_t count)
-{
-    uint16_t dfacc = 0;
-
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-    RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                        0,
-                        USB_DnFBCFG_DFACC_SHIFT,
-                        USB_DnFBCFG_DFACC);
-    RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                        0,
-                        USB_DnFBCFG_TENDE_SHIFT,
-                        USB_DnFBCFG_TENDE);
-    dfacc = 0;
-#else
-    if (mbw == USB_FUNCTION_BITMBW_32)
-    {
-        if ((count % 32) == 0)
-        {
-            /* 32byte transfer */
-            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                                2,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 2;
-        }
-        else if ((count % 16) == 0)
-        {
-            /* 16byte transfer */
-            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                                1,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 1;
-        }
-        else
-        {
-            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                                0,
-                                USB_DnFBCFG_DFACC_SHIFT,
-                                USB_DnFBCFG_DFACC);
-            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                                0,
-                                USB_DnFBCFG_TENDE_SHIFT,
-                                USB_DnFBCFG_TENDE);
-            dfacc = 0;
-        }
-    }
-    else if (mbw == USB_FUNCTION_BITMBW_16)
-    {
-        RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                            0,
-                            USB_DnFBCFG_DFACC_SHIFT,
-                            USB_DnFBCFG_DFACC);
-        RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                            0,
-                            USB_DnFBCFG_TENDE_SHIFT,
-                            USB_DnFBCFG_TENDE);
-        dfacc = 0;
-    }
-    else
-    {
-        RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                            0,
-                            USB_DnFBCFG_DFACC_SHIFT,
-                            USB_DnFBCFG_DFACC);
-        RZA_IO_RegWrite_16(&USB201.D1FBCFG,
-                            0,
-                            USB_DnFBCFG_TENDE_SHIFT,
-                            USB_DnFBCFG_TENDE);
-        dfacc = 0;
-    }
-#endif
-
-    return dfacc;
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_dma.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_dma.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,346 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_dma.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb1_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-static void usb1_function_dmaint(uint16_t fifo);
-static void usb1_function_dmaint_buf2fifo(uint16_t pipe);
-static void usb1_function_dmaint_fifo2buf(uint16_t pipe);
-
-
-/*******************************************************************************
-* Function Name: usb1_function_dma_stop_d0
-* Description  : D0FIFO DMA stop
-* Arguments    : uint16_t pipe      : pipe number
-*              : uint32_t remain    : transfer byte
-* Return Value : none
-*******************************************************************************/
-void usb1_function_dma_stop_d0 (uint16_t pipe, uint32_t remain)
-{
-    uint16_t dtln;
-    uint16_t dfacc;
-    uint16_t buffer;
-    uint16_t sds_b = 1;
-
-    dfacc = RZA_IO_RegRead_16(&USB201.D0FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
-
-    if (dfacc == 2)
-    {
-        sds_b = 32;
-    }
-    else if (dfacc == 1)
-    {
-        sds_b = 16;
-    }
-    else
-    {
-        if (g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 2)
-        {
-            sds_b = 4;
-        }
-        else if (g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 1)
-        {
-            sds_b = 2;
-        }
-        else
-        {
-            sds_b = 1;
-        }
-    }
-
-    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
-        {
-            buffer = USB201.D0FIFOCTR;
-            dtln   = (buffer & USB_FUNCTION_BITDTLN);
-
-            if ((dtln % sds_b) != 0)
-            {
-                remain += (sds_b - (dtln % sds_b));
-            }
-            g_usb1_function_PipeDataSize[pipe] = (g_usb1_function_data_count[pipe] - remain);
-            g_usb1_function_data_count[pipe]   = remain;
-        }
-    }
-
-    RZA_IO_RegWrite_16(&USB201.D0FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_dma_stop_d1
-* Description  : D1FIFO DMA stop
-* Arguments    : uint16_t pipe      : pipe number
-*              : uint32_t remain    : transfer byte
-* Return Value : none
-*******************************************************************************/
-void usb1_function_dma_stop_d1 (uint16_t pipe, uint32_t remain)
-{
-    uint16_t dtln;
-    uint16_t dfacc;
-    uint16_t buffer;
-    uint16_t sds_b = 1;
-
-    dfacc = RZA_IO_RegRead_16(&USB201.D1FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
-
-    if (dfacc == 2)
-    {
-        sds_b = 32;
-    }
-    else if (dfacc == 1)
-    {
-        sds_b = 16;
-    }
-    else
-    {
-        if (g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 2)
-        {
-            sds_b = 4;
-        }
-        else if (g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 1)
-        {
-            sds_b = 2;
-        }
-        else
-        {
-            sds_b = 1;
-        }
-    }
-
-    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
-    {
-        if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
-        {
-            buffer = USB201.D1FIFOCTR;
-            dtln   = (buffer & USB_FUNCTION_BITDTLN);
-
-            if ((dtln % sds_b) != 0)
-            {
-                remain += (sds_b - (dtln % sds_b));
-            }
-            g_usb1_function_PipeDataSize[pipe] = (g_usb1_function_data_count[pipe] - remain);
-            g_usb1_function_data_count[pipe]   = remain;
-        }
-    }
-
-    RZA_IO_RegWrite_16(&USB201.D1FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_dma_interrupt_d0fifo
-* Description  : This function is DMA interrupt handler entry.
-*              : Execute usb1_function_dmaint() after disabling DMA interrupt in this function.
-*              : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D0FIFO_DMA is
-*              : specified by dma->fifo.
-*              : Register this function as DMA complete interrupt.
-* Arguments    : uint32_t int_sense ; Interrupts detection mode
-*              :                    ;  INTC_LEVEL_SENSITIVE : Level sense
-*              :                    ;  INTC_EDGE_TRIGGER : Edge trigger
-* Return Value : none
-*******************************************************************************/
-void usb1_function_dma_interrupt_d0fifo (uint32_t int_sense)
-{
-    usb1_function_dmaint(USB_FUNCTION_D0FIFO);
-    g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_dma_interrupt_d1fifo
-* Description  : This function is DMA interrupt handler entry.
-*              : Execute usb1_function_dmaint() after disabling DMA interrupt in this function.
-*              : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D1FIFO_DMA is
-*              : specified by dma->fifo.
-*              : Register this function as DMA complete interrupt.
-* Arguments    : uint32_t int_sense ; Interrupts detection mode
-*              :                    ;  INTC_LEVEL_SENSITIVE : Level sense
-*              :                    ;  INTC_EDGE_TRIGGER : Edge trigger
-* Return Value : none
-*******************************************************************************/
-void usb1_function_dma_interrupt_d1fifo (uint32_t int_sense)
-{
-    usb1_function_dmaint(USB_FUNCTION_D1FIFO);
-    g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_dmaint
-* Description  : This function is DMA transfer end interrupt
-* Arguments    : uint16_t fifo  ; fifo number
-*              :                ;  USB_FUNCTION_D0FIFO
-*              :                ;  USB_FUNCTION_D1FIFO
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_dmaint (uint16_t fifo)
-{
-    uint16_t pipe;
-
-    pipe = g_usb1_function_DmaPipe[fifo];
-
-    if (g_usb1_function_DmaInfo[fifo].dir == USB_FUNCTION_BUF2FIFO)
-    {
-        usb1_function_dmaint_buf2fifo(pipe);
-    }
-    else
-    {
-        usb1_function_dmaint_fifo2buf(pipe);
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_dmaint_fifo2buf
-* Description  : Executes read completion from FIFO by DMAC.
-* Arguments    : uint16_t pipe      : pipe number
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_dmaint_fifo2buf (uint16_t pipe)
-{
-    uint32_t remain;
-    uint16_t useport;
-
-    if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
-    {
-        useport = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
-        if (useport == USB_FUNCTION_D0FIFO_DMA)
-        {
-            remain = Userdef_USB_usb1_function_stop_dma0();
-            usb1_function_dma_stop_d0(pipe, remain);
-
-            if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-            {
-                if (g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] == USB_FUNCTION_DMA_BUSYEND)
-                {
-                    USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;
-                    g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                }
-                else
-                {
-                    usb1_function_enable_brdy_int(pipe);
-                }
-            }
-        }
-        else
-        {
-            remain = Userdef_USB_usb1_function_stop_dma1();
-            usb1_function_dma_stop_d1(pipe, remain);
-
-            if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-            {
-                if (g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] == USB_FUNCTION_DMA_BUSYEND)
-                {
-                    USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;
-                    g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                }
-                else
-                {
-                    usb1_function_enable_brdy_int(pipe);
-                }
-            }
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_dmaint_buf2fifo
-* Description  : Executes write completion in FIFO by DMAC.
-* Arguments    : uint16_t pipe      : pipe number
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_dmaint_buf2fifo (uint16_t pipe)
-{
-    uint32_t remain;
-    uint16_t useport;
-
-    useport = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
-    if (useport == USB_FUNCTION_D0FIFO_DMA)
-    {
-        remain = Userdef_USB_usb1_function_stop_dma0();
-        usb1_function_dma_stop_d0(pipe, remain);
-
-        if (g_usb1_function_DmaBval[USB_FUNCTION_D0FIFO] != 0)
-        {
-            RZA_IO_RegWrite_16(&USB201.D0FIFOCTR,
-                                1,
-                                USB_DnFIFOCTR_BVAL_SHIFT,
-                                USB_DnFIFOCTR_BVAL);
-        }
-    }
-    else
-    {
-        remain = Userdef_USB_usb1_function_stop_dma1();
-        usb1_function_dma_stop_d1(pipe, remain);
-
-        if (g_usb1_function_DmaBval[USB_FUNCTION_D1FIFO] != 0)
-        {
-            RZA_IO_RegWrite_16(&USB201.D1FIFOCTR,
-                                1,
-                                USB_DnFIFOCTR_BVAL_SHIFT,
-                                USB_DnFIFOCTR_BVAL);
-        }
-    }
-
-    usb1_function_enable_bemp_int(pipe);
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_intrn.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_intrn.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,249 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_intrn.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb1_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb1_function_brdy_int
-* Description  : Executes BRDY interrupt(USB_FUNCTION_PIPE1-9).
-*              : According to the pipe that interrupt is generated in,
-*              : reads/writes buffer allocated in the pipe.
-*              : This function is executed in the BRDY interrupt handler.
-*              : This function clears BRDY interrupt status and BEMP interrupt
-*              : status.
-* Arguments    : uint16_t Status       ; BRDYSTS Register Value
-*              : uint16_t Int_enbl     ; BRDYENB Register Value
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb1_function_brdy_int (uint16_t status, uint16_t int_enb)
-{
-    uint32_t int_sense = 0;
-    uint16_t pipe;
-    uint16_t pipebit;
-
-    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
-    {
-        pipebit = g_usb1_function_bit_set[pipe];
-
-        if ((status & pipebit) && (int_enb & pipebit))
-        {
-            USB201.BRDYSTS = (uint16_t)~pipebit;
-            USB201.BEMPSTS = (uint16_t)~pipebit;
-            if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
-            {
-                if (g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] != USB_FUNCTION_DMA_READY)
-                {
-                    usb1_function_dma_interrupt_d0fifo(int_sense);
-                }
-
-                if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-                {
-                    usb1_function_read_dma(pipe);
-                    usb1_function_disable_brdy_int(pipe);
-                }
-                else
-                {
-                    USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;
-                    g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                }
-            }
-            else if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA)
-            {
-                if (g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] != USB_FUNCTION_DMA_READY)
-                {
-                    usb1_function_dma_interrupt_d1fifo(int_sense);
-                }
-
-                if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
-                {
-                    usb1_function_read_dma(pipe);
-                    usb1_function_disable_brdy_int(pipe);
-                }
-                else
-                {
-                    USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;
-                    g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                }
-            }
-            else
-            {
-                if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0)
-                {
-                    usb1_function_read_buffer(pipe);
-                }
-                else
-                {
-                    usb1_function_write_buffer(pipe);
-                }
-            }
-        }
-    }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_nrdy_int
-* Description  : Executes NRDY interrupt(USB_FUNCTION_PIPE1-9).
-*              : Checks NRDY interrupt cause by PID. When the cause if STALL,
-*              : regards the pipe state as STALL and ends the processing.
-*              : Then the cause is not STALL, increments the error count to
-*              : communicate again. When the error count is 3, determines
-*              : the pipe state as DEVDRV_USBF_PIPE_NORES and ends the processing.
-*              : This function is executed in the NRDY interrupt handler.
-*              : This function clears NRDY interrupt status.
-* Arguments    : uint16_t status       ; NRDYSTS Register Value
-*              : uint16_t int_enb      ; NRDYENB Register Value
-* Return Value : none
-*******************************************************************************/
-void usb1_function_nrdy_int (uint16_t status, uint16_t int_enb)
-{
-    uint16_t pid;
-    uint16_t pipe;
-    uint16_t bitcheck;
-
-    bitcheck = (uint16_t)(status & int_enb);
-
-    USB201.NRDYSTS = (uint16_t)~status;
-
-    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
-    {
-        if ((bitcheck&g_usb1_function_bit_set[pipe]) == g_usb1_function_bit_set[pipe])
-        {
-            if (RZA_IO_RegRead_16(&USB201.SYSCFG0, USB_SYSCFG_DCFM_SHIFT, USB_SYSCFG_DCFM) == 1)
-            {
-                if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT)
-                {
-                    pid = usb1_function_get_pid(pipe);
-                    if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
-                    {
-                        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
-                    }
-                    else
-                    {
-                        g_usb1_function_PipeIgnore[pipe]++;
-                        if (g_usb1_function_PipeIgnore[pipe] == 3)
-                        {
-                            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
-                        }
-                        else
-                        {
-                            usb1_function_set_pid_buf(pipe);
-                        }
-                    }
-                }
-            }
-            else
-            {
-                /* USB Function */
-            }
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_bemp_int
-* Description  : Executes BEMP interrupt(USB_FUNCTION_PIPE1-9).
-* Arguments    : uint16_t status       ; BEMPSTS Register Value
-*              : uint16_t int_enb      ; BEMPENB Register Value
-* Return Value : none
-*******************************************************************************/
-void usb1_function_bemp_int (uint16_t status, uint16_t int_enb)
-{
-    uint16_t pid;
-    uint16_t pipe;
-    uint16_t bitcheck;
-    uint16_t inbuf;
-
-    bitcheck = (uint16_t)(status & int_enb);
-
-    USB201.BEMPSTS = (uint16_t)~status;
-
-    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
-    {
-        if ((bitcheck&g_usb1_function_bit_set[pipe]) == g_usb1_function_bit_set[pipe])
-        {
-            pid = usb1_function_get_pid(pipe);
-
-            if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
-            {
-                g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
-            }
-            else
-            {
-                inbuf = usb1_function_get_inbuf(pipe);
-
-                if (inbuf == 0)
-                {
-                    usb1_function_disable_bemp_int(pipe);
-                    usb1_function_set_pid_nak(pipe);
-                    g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                }
-            }
-        }
-    }
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_lib.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_lib.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2044 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_lib.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb1_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb1_function_enable_brdy_int
-* Description  : Enables BRDY interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
-*              : BRDY. Enables BRDY interrupt in the pipe specified by the argument
-*              : in the disabled status. After enabling BRDY, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe           ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_enable_brdy_int (uint16_t pipe)
-{
-    /* enable brdy interrupt */
-    USB201.BRDYENB |= (uint16_t)g_usb1_function_bit_set[pipe];
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_disable_brdy_int
-* Description  : Disables BRDY interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
-*              : BRDY. Enables BRDY interrupt in the pipe specified by the argument
-*              : in the disabled status. After disabling BRDY, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_disable_brdy_int (uint16_t pipe)
-{
-    /* disable brdy interrupt */
-    USB201.BRDYENB &= (uint16_t)~(g_usb1_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_clear_brdy_sts
-* Description  : Clear BRDY interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_clear_brdy_sts (uint16_t pipe)
-{
-    /* clear brdy status */
-    USB201.BRDYSTS = (uint16_t)~(g_usb1_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_enable_bemp_int
-* Description  : Enables BEMP interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
-*              : BEMP. Enables BEMP interrupt in the pipe specified by the argument
-*              : in the disabled status. After enabling BEMP, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe           ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_enable_bemp_int (uint16_t pipe)
-{
-    /* enable bemp interrupt */
-    USB201.BEMPENB |= (uint16_t)g_usb1_function_bit_set[pipe];
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_disable_bemp_int
-* Description  : Disables BEMP interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
-*              : BEMP. Enables BEMP interrupt in the pipe specified by the argument
-*              : in the disabled status. After enabling BEMP, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe           ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_disable_bemp_int (uint16_t pipe)
-{
-    /* disable bemp interrupt */
-    USB201.BEMPENB &= (uint16_t)~(g_usb1_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_clear_bemp_sts
-* Description  : Clear BEMP interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_clear_bemp_sts (uint16_t pipe)
-{
-    /* clear bemp status */
-    USB201.BEMPSTS = (uint16_t)~(g_usb1_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_enable_nrdy_int
-* Description  : Enables NRDY interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
-*              : NRDY. Enables NRDY interrupt in the pipe specified by the argument
-*              : in the disabled status. After enabling NRDY, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe             ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_enable_nrdy_int (uint16_t pipe)
-{
-    /* enable nrdy interrupt */
-    USB201.NRDYENB |= (uint16_t)g_usb1_function_bit_set[pipe];
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_disable_nrdy_int
-* Description  : Disables NRDY interrupt in the pipe spceified by the argument.
-*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
-*              : NRDY. Disables NRDY interrupt in the pipe specified by the argument
-*              : in the disabled status. After disabling NRDY, recover all
-*              : BEMP/NRDY/BRDY disabled/enabled status.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_disable_nrdy_int (uint16_t pipe)
-{
-    /* disable nrdy interrupt */
-    USB201.NRDYENB &= (uint16_t)~(g_usb1_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_clear_nrdy_sts
-* Description  : Clear NRDY interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_clear_nrdy_sts (uint16_t pipe)
-{
-    /* clear nrdy status */
-    USB201.NRDYSTS = (uint16_t)~(g_usb1_function_bit_set[pipe]);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_is_hispeed
-* Description  : Returns the result of USB reset hand shake (RHST) as
-*              : return value.
-* Arguments    : none
-* Return Value : USB_FUNCTION_HIGH_SPEED    ; Hi-Speed
-*              : USB_FUNCTION_FULL_SPEED    ; Full-Speed
-*              : LOW_SPEED                  ; Low-Speed
-*              : USB_FUNCTION_NON_SPEED     ; error
-*******************************************************************************/
-uint16_t usb1_function_is_hispeed (void)
-{
-    uint16_t rhst;
-    uint16_t speed;
-
-    rhst = RZA_IO_RegRead_16(&USB201.DVSTCTR0, USB_DVSTCTR0_RHST_SHIFT, USB_DVSTCTR0_RHST);
-
-    if (rhst == USB_FUNCTION_HSMODE)
-    {
-        speed = USB_FUNCTION_HIGH_SPEED;
-    }
-    else if (rhst == USB_FUNCTION_FSMODE)
-    {
-        speed = USB_FUNCTION_FULL_SPEED;
-    }
-    else if (rhst == USB_FUNCTION_LSMODE)
-    {
-        speed = USB_FUNCTION_LOW_SPEED;
-    }
-    else
-    {
-        speed = USB_FUNCTION_NON_SPEED;
-    }
-
-    return speed;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_is_hispeed_enable
-* Description  : Returns the USB High-Speed connection enabled status as
-*              : return value.
-* Arguments    : none
-* Return Value : DEVDRV_USBF_YES  : Hi-Speed Enable
-*              : DEVDRV_USBF_NO   : Hi-Speed Disable
-*******************************************************************************/
-uint16_t usb1_function_is_hispeed_enable (void)
-{
-    uint16_t ret;
-
-    ret = DEVDRV_USBF_NO;
-
-    if (RZA_IO_RegRead_16(&USB201.SYSCFG0, USB_SYSCFG_HSE_SHIFT, USB_SYSCFG_HSE) == 1)
-    {
-        ret = DEVDRV_USBF_YES;
-    }
-
-    return ret;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_pid_buf
-* Description  : Enables communicaqtion in the pipe specified by the argument
-*              : (BUF).
-* Arguments    : uint16_t pipe             ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_set_pid_buf (uint16_t pipe)
-{
-    uint16_t pid;
-
-    pid = usb1_function_get_pid(pipe);
-
-    if (pid == DEVDRV_USBF_PID_STALL2)
-    {
-        usb1_function_set_pid_nak(pipe);
-    }
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            RZA_IO_RegWrite_16(&USB201.DCPCTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_DCPCTR_PID_SHIFT,
-                                USB_DCPCTR_PID);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_9_PID_SHIFT,
-                                USB_PIPEnCTR_9_PID);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
-                                DEVDRV_USBF_PID_BUF,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_pid_nak
-* Description  : Disables communication (NAK) in the pipe specified by the argument.
-*              : When the pipe status was enabling communication (BUF) before
-*              : executing before executing this function, waits in the software
-*              : until the pipe becomes ready after setting disabled.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_set_pid_nak (uint16_t pipe)
-{
-    uint16_t pid;
-    uint16_t pbusy;
-    uint32_t loop;
-
-    pid = usb1_function_get_pid(pipe);
-
-    if (pid == DEVDRV_USBF_PID_STALL2)
-    {
-        usb1_function_set_pid_stall(pipe);
-    }
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            RZA_IO_RegWrite_16(&USB201.DCPCTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_DCPCTR_PID_SHIFT,
-                                USB_DCPCTR_PID);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_1_5_PID_SHIFT,
-                                USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_6_8_PID_SHIFT,
-                                USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_9_PID_SHIFT,
-                                USB_PIPEnCTR_9_PID);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
-                                DEVDRV_USBF_PID_NAK,
-                                USB_PIPEnCTR_A_F_PID_SHIFT,
-                                USB_PIPEnCTR_A_F_PID);
-        break;
-
-        default:
-        break;
-    }
-
-    if (pid == DEVDRV_USBF_PID_BUF)
-    {
-        for (loop = 0; loop < 200; loop++)
-        {
-            switch (pipe)
-            {
-                case USB_FUNCTION_PIPE0:
-                    pbusy = RZA_IO_RegRead_16(&USB201.DCPCTR,
-                                                USB_DCPCTR_PBUSY_SHIFT,
-                                                USB_DCPCTR_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE1:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
-                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_1_5_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE2:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
-                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_1_5_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE3:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
-                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_1_5_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE4:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
-                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_1_5_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE5:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
-                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_1_5_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE6:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE6CTR,
-                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_6_8_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE7:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE7CTR,
-                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_6_8_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE8:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE8CTR,
-                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_6_8_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPE9:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
-                                                USB_PIPEnCTR_9_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_9_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPEA:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPEACTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPEB:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPEBCTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPEC:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPECCTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPED:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPEDCTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPEE:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPEECTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                case USB_FUNCTION_PIPEF:
-                    pbusy = RZA_IO_RegRead_16(&USB201.PIPEFCTR,
-                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
-                                                USB_PIPEnCTR_A_F_PBUSY);
-                break;
-
-                default:
-                    pbusy   = 1;
-                break;
-            }
-
-            if (pbusy == 0)
-            {
-                break;
-            }
-            Userdef_USB_usb1_function_delay_500ns();
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_pid_stall
-* Description  : Disables communication (STALL) in the pipe specified by the
-*              : argument.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_set_pid_stall (uint16_t pipe)
-{
-    uint16_t pid;
-
-    pid = usb1_function_get_pid(pipe);
-    if (pid == DEVDRV_USBF_PID_BUF)
-    {
-        switch (pipe)
-        {
-            case USB_FUNCTION_PIPE0:
-                RZA_IO_RegWrite_16(&USB201.DCPCTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_DCPCTR_PID_SHIFT,
-                                    USB_DCPCTR_PID);
-            break;
-
-            case USB_FUNCTION_PIPE1:
-                RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE2:
-                RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE3:
-                RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE4:
-                RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE5:
-                RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE6:
-                RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE7:
-                RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE8:
-                RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE9:
-                RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_9_PID_SHIFT,
-                                    USB_PIPEnCTR_9_PID);
-            break;
-
-            case USB_FUNCTION_PIPEA:
-                RZA_IO_RegWrite_16(&USB201.PIPEACTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEB:
-                RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEC:
-                RZA_IO_RegWrite_16(&USB201.PIPECCTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPED:
-                RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEE:
-                RZA_IO_RegWrite_16(&USB201.PIPEECTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEF:
-                RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
-                                    DEVDRV_USBF_PID_STALL2,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            default:
-            break;
-        }
-    }
-    else
-    {
-        switch (pipe)
-        {
-            case USB_FUNCTION_PIPE0:
-                RZA_IO_RegWrite_16(&USB201.DCPCTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_DCPCTR_PID_SHIFT,
-                                    USB_DCPCTR_PID);
-            break;
-
-            case USB_FUNCTION_PIPE1:
-                RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE2:
-                RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE3:
-                RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE4:
-                RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE5:
-                RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-            break;
-
-            case USB_FUNCTION_PIPE6:
-                RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE7:
-                RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE8:
-                RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-            break;
-
-            case USB_FUNCTION_PIPE9:
-                RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_9_PID_SHIFT,
-                                    USB_PIPEnCTR_9_PID);
-            break;
-
-            case USB_FUNCTION_PIPEA:
-                RZA_IO_RegWrite_16(&USB201.PIPEACTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEB:
-                RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEC:
-                RZA_IO_RegWrite_16(&USB201.PIPECCTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPED:
-                RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEE:
-                RZA_IO_RegWrite_16(&USB201.PIPEECTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            case USB_FUNCTION_PIPEF:
-                RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
-                                    DEVDRV_USBF_PID_STALL,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-            break;
-
-            default:
-            break;
-        }
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_clear_pid_stall
-* Description  : Disables communication (NAK) in the pipe specified by the argument.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_clear_pid_stall (uint16_t pipe)
-{
-    usb1_function_set_pid_nak(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_get_pid
-* Description  : Returns the pipe state specified by the argument.
-* Arguments    : uint16_t pipe          ; Pipe Number
-* Return Value : PID
-*******************************************************************************/
-uint16_t usb1_function_get_pid (uint16_t pipe)
-{
-    uint16_t pid;
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            pid = RZA_IO_RegRead_16(&USB201.DCPCTR,
-                                    USB_DCPCTR_PID_SHIFT,
-                                    USB_DCPCTR_PID);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            pid = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            pid = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            pid = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            pid = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            pid = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
-                                    USB_PIPEnCTR_1_5_PID_SHIFT,
-                                    USB_PIPEnCTR_1_5_PID);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            pid = RZA_IO_RegRead_16(&USB201.PIPE6CTR,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            pid = RZA_IO_RegRead_16(&USB201.PIPE7CTR,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            pid = RZA_IO_RegRead_16(&USB201.PIPE8CTR,
-                                    USB_PIPEnCTR_6_8_PID_SHIFT,
-                                    USB_PIPEnCTR_6_8_PID);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            pid = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
-                                    USB_PIPEnCTR_9_PID_SHIFT,
-                                    USB_PIPEnCTR_9_PID);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            pid = RZA_IO_RegRead_16(&USB201.PIPEACTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            pid = RZA_IO_RegRead_16(&USB201.PIPEBCTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            pid = RZA_IO_RegRead_16(&USB201.PIPECCTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            pid = RZA_IO_RegRead_16(&USB201.PIPEDCTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            pid = RZA_IO_RegRead_16(&USB201.PIPEECTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            pid = RZA_IO_RegRead_16(&USB201.PIPEFCTR,
-                                    USB_PIPEnCTR_A_F_PID_SHIFT,
-                                    USB_PIPEnCTR_A_F_PID);
-        break;
-
-        default:
-            pid = 0;
-        break;
-    }
-
-    return pid;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_csclr
-* Description  : CSPLIT status clear setting of sprit transaction in specified
-*              : pipe is performed.
-*              : When SQSET bit or SQCLR bit, and SQSET bit or SQCLR bit
-*              : in DCPCTR register are continuously changed (when the sequence
-*              : toggle bit of data PID is continuously changed over two or more pipes),
-*              : the access cycle with 120 ns and more than 5 cycle bus clock is necessary.
-*              : Do not set both SQCLR bit and SQSET bit to 1 at the same time.
-*              : In addition, both bits should be operated after PID is set to NAK.
-*              : However, when it is set to the isochronous transfer as the transfer type
-*              : (TYPE=11), writing in SQSET bit is disabled.
-* Arguments    : uint16_t pipe     ; Pipe number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_set_csclr (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            RZA_IO_RegWrite_16(&USB201.DCPCTR,
-                                1,
-                                USB_DCPCTR_CSCLR_SHIFT,
-                                USB_DCPCTR_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_CSCLR);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
-                                1,
-                                USB_PIPEnCTR_9_CSCLR_SHIFT,
-                                USB_PIPEnCTR_9_CSCLR);
-        break;
-
-        default:
-            /* PIPEA-F have not CSCLR */
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_sqclr
-* Description  : Sets the sequence bit of the pipe specified by the argument to
-*              : DATA0.
-* Arguments    : uint16_t pipe              ; Pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_set_sqclr (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            RZA_IO_RegWrite_16(&USB201.DCPCTR,
-                                1,
-                                USB_DCPCTR_SQCLR_SHIFT,
-                                USB_DCPCTR_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
-                                USB_PIPEnCTR_1_5_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
-                                USB_PIPEnCTR_6_8_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
-                                1,
-                                USB_PIPEnCTR_9_SQCLR_SHIFT,
-                                USB_PIPEnCTR_9_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
-                                USB_PIPEnCTR_A_F_SQCLR);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_sqset
-* Description  : Sets the sequence bit of the pipe specified by the argument to
-*              : DATA1.
-* Arguments    : uint16_t pipe   ; Pipe number
-* Return Value : none
-*******************************************************************************/
-void usb1_function_set_sqset (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            RZA_IO_RegWrite_16(&USB201.DCPCTR,
-                                1,
-                                USB_DCPCTR_SQSET_SHIFT,
-                                USB_DCPCTR_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
-                                USB_PIPEnCTR_1_5_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
-                                USB_PIPEnCTR_1_5_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
-                                USB_PIPEnCTR_1_5_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
-                                USB_PIPEnCTR_1_5_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
-                                USB_PIPEnCTR_1_5_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
-                                USB_PIPEnCTR_6_8_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
-                                USB_PIPEnCTR_6_8_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
-                                USB_PIPEnCTR_6_8_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
-                                1,
-                                USB_PIPEnCTR_9_SQSET_SHIFT,
-                                USB_PIPEnCTR_9_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
-                                USB_PIPEnCTR_A_F_SQSET);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_get_sqmon
-* Description  : Toggle bit of specified pipe is obtained
-* Arguments    : uint16_t pipe   ; Pipe number
-* Return Value : sqmon
-*******************************************************************************/
-uint16_t usb1_function_get_sqmon (uint16_t pipe)
-{
-    uint16_t sqmon;
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            sqmon = RZA_IO_RegRead_16(&USB201.DCPCTR,
-                                        USB_DCPCTR_SQMON_SHIFT,
-                                        USB_DCPCTR_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
-                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
-                                        USB_PIPEnCTR_1_5_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
-                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
-                                        USB_PIPEnCTR_1_5_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
-                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
-                                        USB_PIPEnCTR_1_5_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
-                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
-                                        USB_PIPEnCTR_1_5_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
-                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
-                                        USB_PIPEnCTR_1_5_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPE6CTR,
-                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
-                                        USB_PIPEnCTR_6_8_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPE7CTR,
-                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
-                                        USB_PIPEnCTR_6_8_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPE8CTR,
-                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
-                                        USB_PIPEnCTR_6_8_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
-                                        USB_PIPEnCTR_9_SQMON_SHIFT,
-                                        USB_PIPEnCTR_9_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPEACTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPEBCTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPECCTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPEDCTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPEECTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            sqmon = RZA_IO_RegRead_16(&USB201.PIPEFCTR,
-                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
-                                        USB_PIPEnCTR_A_F_SQMON);
-        break;
-
-        default:
-            sqmon = 0;
-        break;
-    }
-
-    return sqmon;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_aclrm
-* Description  : The buffer of specified pipe is initialized
-* Arguments    : uint16_t pipe    : Pipe
-* Return Value : none
-*******************************************************************************/
-void usb1_function_aclrm (uint16_t pipe)
-{
-    usb1_function_set_aclrm(pipe);
-    usb1_function_clr_aclrm(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_set_aclrm
-* Description  : The auto buffer clear mode of specified pipe is enabled
-* Arguments    : uint16_t pipe    : Pipe
-* Return Value : none
-*******************************************************************************/
-void usb1_function_set_aclrm (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
-                                1,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
-                                1,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
-                                1,
-                                USB_PIPEnCTR_9_ACLRM_SHIFT,
-                                USB_PIPEnCTR_9_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
-                                1,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_clr_aclrm
-* Description  : The auto buffer clear mode of specified pipe is enabled
-* Arguments    : uint16_t pipe    : Pipe
-* Return Value : none
-*******************************************************************************/
-void usb1_function_clr_aclrm (uint16_t pipe)
-{
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
-                                0,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
-                                0,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
-                                0,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
-                                0,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
-                                0,
-                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
-                                USB_PIPEnCTR_1_5_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
-                                0,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
-                                0,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
-                                0,
-                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
-                                USB_PIPEnCTR_6_8_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
-                                0,
-                                USB_PIPEnCTR_9_ACLRM_SHIFT,
-                                USB_PIPEnCTR_9_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
-                                0,
-                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
-                                USB_PIPEnCTR_A_F_ACLRM);
-        break;
-
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_get_inbuf
-* Description  : Returns INBUFM of the pipe specified by the argument.
-* Arguments    : uint16_t pipe             ; Pipe Number
-* Return Value : inbuf
-*******************************************************************************/
-uint16_t usb1_function_get_inbuf (uint16_t pipe)
-{
-    uint16_t inbuf;
-
-    switch (pipe)
-    {
-        case USB_FUNCTION_PIPE0:
-            inbuf = 0;
-        break;
-
-        case USB_FUNCTION_PIPE1:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
-                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_1_5_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPE2:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
-                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_1_5_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPE3:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
-                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_1_5_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPE4:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
-                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_1_5_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPE5:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
-                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_1_5_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPE6:
-            inbuf = 0;
-        break;
-
-        case USB_FUNCTION_PIPE7:
-            inbuf = 0;
-        break;
-
-        case USB_FUNCTION_PIPE8:
-            inbuf = 0;
-        break;
-
-        case USB_FUNCTION_PIPE9:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
-                                    USB_PIPEnCTR_9_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_9_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPEA:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPEACTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPEB:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPEBCTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPEC:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPECCTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPED:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPEDCTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPEE:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPEECTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        case USB_FUNCTION_PIPEF:
-            inbuf = RZA_IO_RegRead_16(&USB201.PIPEFCTR,
-                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
-                                    USB_PIPEnCTR_A_F_INBUFM);
-        break;
-
-        default:
-            inbuf = 0;
-        break;
-    }
-
-    return inbuf;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_setting_interrupt
-* Description  : Sets the USB module interrupt level.
-* Arguments    : uint8_t level
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb1_function_setting_interrupt (uint8_t level)
-{
-    uint16_t d0fifo_dmaintid;
-    uint16_t d1fifo_dmaintid;
-
-    R_INTC_RegistIntFunc(INTC_ID_USBI1, usb1_function_interrupt);
-    R_INTC_SetPriority(INTC_ID_USBI1, level);
-    R_INTC_Enable(INTC_ID_USBI1);
-
-    d0fifo_dmaintid = Userdef_USB_usb1_function_d0fifo_dmaintid();
-
-    if (d0fifo_dmaintid != 0xFFFF)
-    {
-        R_INTC_RegistIntFunc(d0fifo_dmaintid, usb1_function_dma_interrupt_d0fifo);
-        R_INTC_SetPriority(d0fifo_dmaintid, level);
-        R_INTC_Enable(d0fifo_dmaintid);
-    }
-
-    d1fifo_dmaintid = Userdef_USB_usb1_function_d1fifo_dmaintid();
-
-    if (d1fifo_dmaintid != 0xFFFF)
-    {
-        R_INTC_RegistIntFunc(d1fifo_dmaintid, usb1_function_dma_interrupt_d1fifo);
-        R_INTC_SetPriority(d1fifo_dmaintid, level);
-        R_INTC_Enable(d1fifo_dmaintid);
-    }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_reset_module
-* Description  : Initializes the USB module.
-*              : Enables providing clock to the USB module.
-*              : Sets USB bus wait register.
-* Arguments    : uint16_t clockmode ; 48MHz ; USBFCLOCK_X1_48MHZ
-*              :                    ; 12MHz ; USBFCLOCK_EXTAL_12MHZ
-* Return Value : none
-*******************************************************************************/
-void usb1_function_reset_module (uint16_t clockmode)
-{
-    /* UPLLE bit is only USB0 */
-    if (RZA_IO_RegRead_16(&USB200.SYSCFG0,
-                                USB_SYSCFG_UPLLE_SHIFT,
-                                USB_SYSCFG_UPLLE) == 1)
-    {
-        if ((USB200.SYSCFG0 & USB_FUNCTION_BITUCKSEL) != clockmode)
-        {
-            RZA_IO_RegWrite_16(&USB201.SUSPMODE,
-                                0,
-                                USB_SUSPMODE_SUSPM_SHIFT,
-                                USB_SUSPMODE_SUSPM);
-            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
-                                0,
-                                USB_SUSPMODE_SUSPM_SHIFT,
-                                USB_SUSPMODE_SUSPM);
-            USB201.SYSCFG0 = 0;
-            USB200.SYSCFG0 = 0;
-            USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
-            Userdef_USB_usb1_function_delay_xms(1);
-            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
-                                1,
-                                USB_SUSPMODE_SUSPM_SHIFT,
-                                USB_SUSPMODE_SUSPM);
-            RZA_IO_RegWrite_16(&USB201.SUSPMODE,
-                                1,
-                                USB_SUSPMODE_SUSPM_SHIFT,
-                                USB_SUSPMODE_SUSPM);
-        }
-        else
-        {
-            RZA_IO_RegWrite_16(&USB201.SUSPMODE,
-                                0,
-                                USB_SUSPMODE_SUSPM_SHIFT,
-                                USB_SUSPMODE_SUSPM);
-            Userdef_USB_usb1_function_delay_xms(1);
-            RZA_IO_RegWrite_16(&USB201.SUSPMODE,
-                                1,
-                                USB_SUSPMODE_SUSPM_SHIFT,
-                                USB_SUSPMODE_SUSPM);
-        }
-    }
-    else
-    {
-        RZA_IO_RegWrite_16(&USB201.SUSPMODE,
-                            0,
-                            USB_SUSPMODE_SUSPM_SHIFT,
-                            USB_SUSPMODE_SUSPM);
-        RZA_IO_RegWrite_16(&USB200.SUSPMODE,
-                            0,
-                            USB_SUSPMODE_SUSPM_SHIFT,
-                            USB_SUSPMODE_SUSPM);
-        USB201.SYSCFG0 = 0;
-        USB200.SYSCFG0 = 0;
-        USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
-        Userdef_USB_usb1_function_delay_xms(1);
-        RZA_IO_RegWrite_16(&USB200.SUSPMODE,
-                            1,
-                            USB_SUSPMODE_SUSPM_SHIFT,
-                            USB_SUSPMODE_SUSPM);
-        RZA_IO_RegWrite_16(&USB201.SUSPMODE,
-                            1,
-                            USB_SUSPMODE_SUSPM_SHIFT,
-                            USB_SUSPMODE_SUSPM);
-    }
-
-    USB201.BUSWAIT = (uint16_t)(USB_FUNCTION_BUSWAIT_05 & USB_FUNCTION_BITBWAIT);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_get_buf_size
-* Description  : Obtains pipe buffer size specified by the argument and
-*              : maximum packet size of the USB device in use.
-*              : When USB_FUNCTION_PIPE0 is specified by the argument, obtains the maximum
-*              : packet size of the USB device using the corresponding pipe.
-*              : For the case that USB_FUNCTION_PIPE0 is not assigned by the argument, when the
-*              : corresponding pipe is in continuous transfer mode,
-*              : obtains the buffer size allocated in the corresponcing pipe,
-*              : when incontinuous transfer, obtains maximum packet size.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : Maximum packet size or buffer size
-*******************************************************************************/
-uint16_t usb1_function_get_buf_size (uint16_t pipe)
-{
-    uint16_t size;
-    uint16_t bufsize;
-
-    if (pipe == USB_FUNCTION_PIPE0)
-    {
-        size = RZA_IO_RegRead_16(&USB201.DCPMAXP,
-                                USB_DCPMAXP_MXPS_SHIFT,
-                                USB_DCPMAXP_MXPS);
-    }
-    else
-    {
-        if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_CNTMD_SHIFT, USB_PIPECFG_CNTMD) == 1)
-        {
-            bufsize = RZA_IO_RegRead_16(&g_usb1_function_pipebuf[pipe], USB_PIPEBUF_BUFSIZE_SHIFT, USB_PIPEBUF_BUFSIZE);
-            size = (uint16_t)((bufsize + 1) * USB_FUNCTION_PIPExBUF);
-        }
-        else
-        {
-            size = RZA_IO_RegRead_16(&g_usb1_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
-        }
-    }
-    return size;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_get_mxps
-* Description  : Obtains maximum packet size of the USB device using the pipe
-*              : specified by the argument.
-* Arguments    : uint16_t pipe      ; Pipe Number
-* Return Value : Max Packet Size
-*******************************************************************************/
-uint16_t usb1_function_get_mxps (uint16_t pipe)
-{
-    uint16_t size;
-
-    if (pipe == USB_FUNCTION_PIPE0)
-    {
-        size = RZA_IO_RegRead_16(&USB201.DCPMAXP,
-                                USB_DCPMAXP_MXPS_SHIFT,
-                                USB_DCPMAXP_MXPS);
-    }
-    else
-    {
-        size = RZA_IO_RegRead_16(&g_usb1_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
-    }
-    return size;
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_api.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_api.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,441 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_api.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb1_function.h"
-#include "dev_drv.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb1_api_function_init
-* Description  : Initializes the USB module in the USB function mode.
-* Arguments    : uint8_t  int_level ; interruput level
-*              : uint16_t mode      : Speed modes
-*              :                    :  USB_FUCNTION_HIGH_SPEED: High-speed device
-*              :                    :  USB_FUCNTION_FULL_SPEED: Full-speed device
-*              : uint16_t clockmode ; 48MHz ; USBFCLOCK_X1_48MHZ
-*              :                    ; 12MHz ; USBFCLOCK_EXTAL_12MHZ
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb1_api_function_init (uint8_t int_level, uint16_t mode, uint16_t clockmode)
-{
-    volatile uint8_t dummy_buf;
-
-    CPG.STBCR7  &= 0xfc;                        /*The clock of USB0/1 modules is permitted  */
-    dummy_buf   = CPG.STBCR7;                   /* (Dummy read)                             */
-
-    usb1_function_setting_interrupt(int_level);
-
-    usb1_function_reset_module(clockmode);      /* reset USB module with setting tranciever */
-                                                /* and HSE=1                                */
-
-    usb1_function_init_status();                /* clear variables                          */
-
-    usb1_function_InitModule(mode);             /* select USB Function and Interrupt Enable */
-                                                /* Detect USB Device to attach or detach    */
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_api_function_IsConfigured
-* Description  : Checks if the USB device is configured to return the result as
-*              : the return value.
-* Arguments    : none
-* Return Value : DEVDRV_USBF_YES  : Configured & Configured Suspend
-*              : DEVDRV_USBF_NO   : not Configured
-*******************************************************************************/
-uint16_t usb1_api_function_IsConfigured (void)
-{
-    uint16_t dvst;
-
-    dvst = usb1_function_GetDeviceState();
-
-    if ((dvst == USB_FUNCTION_DVST_CONFIGURED) ||
-        (dvst == USB_FUNCTION_DVST_CONFIGURED_SUSPEND))
-    {
-        return DEVDRV_USBF_YES;
-    }
-
-    return DEVDRV_USBF_NO;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_GetDeviceState
-* Description  : Returns the state of USB device.
-* Arguments    : none
-* Return Value : Device States
-*******************************************************************************/
-uint16_t usb1_function_GetDeviceState (void)
-{
-    uint16_t dvsq;
-    uint16_t dvst;
-
-    dvsq = USB201.INTSTS0;
-    switch (dvsq & USB_FUNCTION_BITDVSQ)
-    {
-        case USB_FUNCTION_DS_POWR:                      /* Power state *//* power-on */
-            dvst = USB_FUNCTION_DVST_POWERED;
-        break;
-
-        case USB_FUNCTION_DS_DFLT:                      /* Default state *//* bus-reset */
-            dvst = USB_FUNCTION_DVST_DEFAULT;
-        break;
-
-        case USB_FUNCTION_DS_ADDS:                      /* Address state */
-            dvst = USB_FUNCTION_DVST_ADDRESS;
-        break;
-
-        case USB_FUNCTION_DS_CNFG:                      /* Configured state */
-            dvst = USB_FUNCTION_DVST_CONFIGURED;
-        break;
-
-        case USB_FUNCTION_DS_SPD_CNFG:                  /* Configured Suspend state */
-            dvst = USB_FUNCTION_DVST_CONFIGURED_SUSPEND;
-        break;
-
-        case USB_FUNCTION_DS_SPD_POWR:                  /* Power      Suspend state */
-        case USB_FUNCTION_DS_SPD_DFLT:                  /* Default    Suspend state */
-        case USB_FUNCTION_DS_SPD_ADDR:                  /* Address    Suspend state */
-            dvst = USB_FUNCTION_DVST_SUSPEND;
-        break;
-
-        default:                                        /* error */
-            dvst = USB_FUNCTION_DVST_SUSPEND;
-        break;
-    }
-
-    return dvst;
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_start_receive_transfer
-* Description  : Starts USB data reception using the pipe specified in the argument.
-*              : The FIFO for using is set in the pipe definition table.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint32_t size      ; Data Size
-*              : uint8_t *data      ; Data data Address
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    usb1_function_start_receive_transfer(pipe, size, data);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_start_send_transfer
-* Description  : Starts the USB data communication using pipe specified by the argument.
-* Arguments    : uint16_t pipe     ; Pipe Number
-*              : uint32_t size     ; Data Size
-*              : uint8_t *data     ; Data data Address
-* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
-*              : DEVDRV_USBF_WRITESHRT          ; short data
-*              : DEVDRV_USBF_WRITING            ; Continue of data write
-*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
-*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
-*******************************************************************************/
-uint16_t usb1_api_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
-{
-    uint16_t status;
-
-    status = usb1_function_start_send_transfer(pipe, size, data);
-
-    return status;
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_check_pipe_status
-* Description  : Starts USB data reception using the pipe specified in the argument.
-*              : The FIFO for using is set in the pipe definition table.
-* Arguments    : uint16_t  pipe     ; Pipe Number
-*              : uint32_t *size     ; Data Size
-* Return Value : Pipe Status
-*******************************************************************************/
-uint16_t usb1_api_function_check_pipe_status (uint16_t pipe, uint32_t * size)
-{
-    if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_DONE)
-    {
-        *size = g_usb1_function_PipeDataSize[pipe];
-        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
-
-        return DEVDRV_USBF_PIPE_DONE;
-    }
-    else if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_NORES)
-    {
-        *size = 0;
-        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
-
-        return DEVDRV_USBF_PIPE_NORES;
-    }
-    else if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_STALL)
-    {
-        *size = 0;
-        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
-
-        return DEVDRV_USBF_PIPE_STALL;
-    }
-    else if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_FIFOERROR)
-    {
-        *size = 0;
-        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
-
-        return DEVDRV_USBF_FIFOERROR;
-    }
-    else
-    {
-        /* Do Nothing */
-    }
-
-    return g_usb1_function_pipe_status[pipe];
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_clear_pipe_status
-* Description  : Starts USB data reception using the pipe specified in the argument.
-*              : The FIFO for using is set in the pipe definition table.
-* Arguments    : uint16_t  pipe     ; Pipe Number
-* Return Value : Pipe Status
-*******************************************************************************/
-void usb1_api_function_clear_pipe_status (uint16_t pipe)
-{
-    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
-    g_usb1_function_PipeDataSize[pipe] = 0;
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_set_pid_buf
-* Description  : Enables communicaqtion in the pipe specified by the argument
-*              : (BUF).
-* Arguments    : uint16_t pipe             ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_set_pid_buf (uint16_t pipe)
-{
-    usb1_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_set_pid_nak
-* Description  : Disables communication (NAK) in the pipe specified by the argument.
-*              : When the pipe status was enabling communication (BUF) before
-*              : executing before executing this function, waits in the software
-*              : until the pipe becomes ready after setting disabled.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_set_pid_nak (uint16_t pipe)
-{
-    usb1_function_set_pid_nak(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_set_pid_stall
-* Description  : Disables communication (STALL) in the pipe specified by the
-*              : argument.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_set_pid_stall (uint16_t pipe)
-{
-    usb1_function_set_pid_stall(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_clear_pid_stall
-* Description  : Disables communication (NAK) in the pipe specified by the argument.
-* Arguments    : uint16_t pipe            ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_clear_pid_stall (uint16_t pipe)
-{
-    usb1_function_clear_pid_stall(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_get_pid
-* Description  : Returns the pipe state specified by the argument.
-* Arguments    : uint16_t pipe          ; Pipe Number
-* Return Value : PID
-*******************************************************************************/
-uint16_t usb1_api_function_get_pid (uint16_t pipe)
-{
-    uint16_t pid;
-
-    pid = usb1_function_get_pid(pipe);
-
-    return pid;
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_check_stall
-* Description  :
-* Arguments    : uint16_t pipe          ; Pipe Number
-* Return Value : PID
-*******************************************************************************/
-int32_t usb1_api_function_check_stall (uint16_t pipe)
-{
-    uint16_t pid;
-
-    pid = usb1_function_get_pid(pipe);
-
-    if ((pid & DEVDRV_USBF_PID_STALL) == DEVDRV_USBF_PID_STALL)
-    {
-        return DEVDRV_USBF_STALL;
-    }
-
-    return DEVDRV_SUCCESS;
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_set_sqclr
-* Description  : Sets the sequence bit of the pipe specified by the argument to
-*              : DATA0.
-* Arguments    : uint16_t pipe              ; Pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_set_sqclr (uint16_t pipe)
-{
-    usb1_function_set_sqclr(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_set_sqset
-* Description  : Sets the sequence bit of the pipe specified by the argument to
-*              : DATA1.
-* Arguments    : uint16_t pipe   ; Pipe number
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_set_sqset (uint16_t pipe)
-{
-    usb1_function_set_sqset(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_set_csclr
-* Description  : CSPLIT status clear setting of sprit transaction in specified
-*              : pipe is performed.
-*              : When SQSET bit or SQCLR bit, and SQSET bit or SQCLR bit
-*              : in DCPCTR register are continuously changed (when the sequence
-*              : toggle bit of data PID is continuously changed over two or more pipes),
-*              : the access cycle with 120 ns and more than 5 cycle bus clock is necessary.
-*              : Do not set both SQCLR bit and SQSET bit to 1 at the same time.
-*              : In addition, both bits should be operated after PID is set to NAK.
-*              : However, when it is set to the isochronous transfer as the transfer type
-*              : (TYPE=11), writing in SQSET bit is disabled.
-* Arguments    : uint16_t pipe     ; Pipe number
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_set_csclr (uint16_t pipe)
-{
-    usb1_function_set_csclr(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_set_curpipe
-* Description  : Allocates FIF0 specifed by the argument in the pipe assigned
-*              : by the argument.
-* Arguments    : uint16_t pipe      ; Pipe Number
-*              : uint16_t fifosel   ; Select FIFO
-*              : uint16_t isel      ; FIFO Access Direction
-*              : uint16_t mbw       ; FIFO Port Access Bit Width
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
-{
-    usb1_function_set_curpipe(pipe, fifosel, isel, mbw);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_clear_brdy_sts
-* Description  : Clear BRDY interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_clear_brdy_sts (uint16_t pipe)
-{
-    usb1_function_clear_brdy_sts(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_clear_bemp_sts
-* Description  : Clear BEMP interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_clear_bemp_sts (uint16_t pipe)
-{
-    usb1_function_clear_bemp_sts(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_clear_nrdy_sts
-* Description  : Clear NRDY interrupt status in the pipe spceified by the argument.
-* Arguments    : uint16_t pipe        ; pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_clear_nrdy_sts (uint16_t pipe)
-{
-    usb1_function_clear_nrdy_sts(pipe);
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_controlrw.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_controlrw.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_controlrw.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb1_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb1_api_function_CtrlReadStart
-* Description  : Executes the USB control read transfer.
-*              : USB host controller <- USB device
-* Arguments    : uint16_t size     ; Data Size
-*              : uint8_t  *data    ; Data Address
-* Return Value : DEVDRV_USBF_WRITEEND          ; End of data write
-*              : DEVDRV_USBF_WRITESHRT         ; End of short data write
-*              : DEVDRV_USBF_WRITING           ; Continue of data write
-*              : DEVDRV_USBF_FIFOERROR         ; FIFO access error
-*******************************************************************************/
-uint16_t usb1_api_function_CtrlReadStart (uint32_t size, uint8_t * data)
-{
-    uint16_t status;
-    uint16_t mbw;
-
-    usb1_function_set_pid_nak(USB_FUNCTION_PIPE0);
-
-    g_usb1_function_data_count[USB_FUNCTION_PIPE0]   = size;
-    g_usb1_function_data_pointer[USB_FUNCTION_PIPE0] = data;
-
-    mbw = usb1_function_get_mbw(g_usb1_function_data_count[USB_FUNCTION_PIPE0],
-                                    (uint32_t)g_usb1_function_data_pointer[USB_FUNCTION_PIPE0]);
-    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
-    USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;
-
-    status = usb1_function_write_buffer_c(USB_FUNCTION_PIPE0);
-
-    /* Peripheral Control sequence */
-    switch (status)
-    {
-        case DEVDRV_USBF_WRITESHRT:                                     /* End of data write */
-        case DEVDRV_USBF_WRITEEND:                                      /* End of data write (not null) */
-        case DEVDRV_USBF_WRITING:                                       /* Continue of data write */
-            usb1_function_enable_bemp_int(USB_FUNCTION_PIPE0);          /* Enable Empty Interrupt */
-            usb1_function_set_pid_buf(USB_FUNCTION_PIPE0);              /* Set BUF */
-        break;
-
-        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access error */
-        break;
-
-        default:
-        break;
-    }
-
-    return status;                                                      /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb1_api_function_CtrlWriteStart
-* Description  : Executes the USB control write transfer.
-*              : USB host controller -> USB device
-* Arguments    : uint16_t  size         ; Data Size
-*              : uint8_t  *data         ; Data Address
-* Return Value : none
-*******************************************************************************/
-void usb1_api_function_CtrlWriteStart (uint32_t size, uint8_t * data)
-{
-    uint16_t mbw;
-
-    usb1_function_set_pid_nak(USB_FUNCTION_PIPE0);
-
-    g_usb1_function_data_count[USB_FUNCTION_PIPE0]   = size;
-    g_usb1_function_data_pointer[USB_FUNCTION_PIPE0] = data;
-
-    mbw = usb1_function_get_mbw(g_usb1_function_data_count[USB_FUNCTION_PIPE0],
-                                    (uint32_t)g_usb1_function_data_pointer[USB_FUNCTION_PIPE0]);
-    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
-    USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;
-
-    usb1_function_enable_brdy_int(USB_FUNCTION_PIPE0);
-    usb1_function_set_pid_buf(USB_FUNCTION_PIPE0);
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_global.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_global.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_global.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb1_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-const uint16_t g_usb1_function_bit_set[16] =
-{
-    0x0001, 0x0002, 0x0004, 0x0008,
-    0x0010, 0x0020, 0x0040, 0x0080,
-    0x0100, 0x0200, 0x0400, 0x0800,
-    0x1000, 0x2000, 0x4000, 0x8000
-};
-
-uint32_t g_usb1_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint8_t  * g_usb1_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-uint16_t g_usb1_function_PipeIgnore[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb1_function_PipeTbl[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb1_function_pipe_status[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint32_t g_usb1_function_PipeDataSize[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-USB_FUNCTION_DMA_t g_usb1_function_DmaInfo[2];
-uint16_t g_usb1_function_DmaPipe[2];
-uint16_t g_usb1_function_DmaBval[2];
-uint16_t g_usb1_function_DmaStatus[2];
-
-uint16_t g_usb1_function_CtrZeroLengthFlag;
-
-//uint16_t g_usb1_function_ConfigNum;
-//uint16_t g_usb1_function_Alternate[USB_FUNCTION_ALT_NO];
-//uint16_t g_usb1_function_RemoteWakeupFlag;
-uint16_t g_usb1_function_TestModeFlag;
-uint16_t g_usb1_function_TestModeSelectors;
-
-//uint16_t g_usb1_function_ReqType;
-//uint16_t g_usb1_function_ReqTypeType;
-//uint16_t g_usb1_function_ReqTypeRecip;
-//uint16_t g_usb1_function_ReqRequest;
-//uint16_t g_usb1_function_ReqValue;
-//uint16_t g_usb1_function_ReqIndex;
-//uint16_t g_usb1_function_ReqLength;
-
-//uint16_t g_usb1_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
-
-uint16_t g_usb1_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb1_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb1_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb1_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-
-/*******************************************************************************
-* Function Name: usb1_function_init_status
-* Description  : Initialization USB Sample Driver Variable.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb1_function_init_status (void)
-{
-    uint16_t pipe;
-
-    //g_usb1_function_ConfigNum         = 0;
-    //g_usb1_function_RemoteWakeupFlag  = DEVDRV_USBF_OFF;
-    g_usb1_function_TestModeFlag      = DEVDRV_USBF_OFF;
-    g_usb1_function_CtrZeroLengthFlag = 0;
-
-#if 0
-    usb1_function_clear_alt();
-#endif
-
-    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
-    {
-        g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
-        g_usb1_function_PipeDataSize[pipe] = 0;
-        g_usb1_function_data_count[pipe]   = 0;
-
-        /* pipe configuration in usb1_function_ResetEP() */
-        g_usb1_function_pipecfg[pipe]  = 0;
-        g_usb1_function_pipebuf[pipe]  = 0;
-        g_usb1_function_pipemaxp[pipe] = 0;
-        g_usb1_function_pipeperi[pipe] = 0;
-    }
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_sig.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_sig.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,330 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_sig.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb1_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-static void usb1_function_EnableINTModule(void);
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb1_function_InitModule
-* Description  : Initializes the USB module in the USB function mode.
-* Arguments    : uint16_t mode  ; USB_FUNCTION_HIGH_SPEED ; Hi-Speed Mode
-*              :                ; other                   ; Full-speed Mode
-* Return Value : none
-*******************************************************************************/
-void usb1_function_InitModule (uint16_t mode)
-{
-    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
-                        0,
-                        USB_SYSCFG_DCFM_SHIFT,
-                        USB_SYSCFG_DCFM);           /* USB function */
-
-    /* USB module operation enabled     */
-    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
-                        1,
-                        USB_SYSCFG_USBE_SHIFT,
-                        USB_SYSCFG_USBE);
-
-    if (mode == USB_FUNCTION_HIGH_SPEED)
-    {
-        RZA_IO_RegWrite_16(&USB201.SYSCFG0,
-                            1,
-                            USB_SYSCFG_HSE_SHIFT,
-                            USB_SYSCFG_HSE);        /* Hi-Speed Mode */
-    }
-    else
-    {
-        RZA_IO_RegWrite_16(&USB201.SYSCFG0,
-                            0,
-                            USB_SYSCFG_HSE_SHIFT,
-                            USB_SYSCFG_HSE);
-    }
-
-    /* for power-on                     */
-    if (usb1_function_CheckVBUStaus() == DEVDRV_USBF_ON)
-    {
-        usb1_function_EnableINTModule();            /* Interrupt Enable */
-        usb1_function_USB_FUNCTION_Attach();        /* pull-up D+ and open D- */
-    }
-    else
-    {
-        usb1_function_USB_FUNCTION_Detach();        /* USB Detach */
-                                                    /* with Interrupt Enable */
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_CheckVBUStaus
-* Description  : Checks the USB-VBUS state to returns the connection state to
-*              : the USB host.
-* Arguments    : none
-* Return Value : DEVDRV_USBF_ON     :   VBUS ON
-*              : DEVDRV_USBF_OFF   :   VBUS OFF
-*******************************************************************************/
-uint16_t usb1_function_CheckVBUStaus (void)
-{
-    uint16_t buf1;
-    uint16_t buf2;
-    uint16_t buf3;
-
-    /* monitor VBUS pins */
-    do
-    {
-        buf1 = RZA_IO_RegRead_16(&USB201.INTSTS0,
-                                USB_INTSTS0_VBSTS_SHIFT,
-                                USB_INTSTS0_VBSTS);
-        Userdef_USB_usb1_function_delay_10us(1);
-        buf2 = RZA_IO_RegRead_16(&USB201.INTSTS0,
-                                USB_INTSTS0_VBSTS_SHIFT,
-                                USB_INTSTS0_VBSTS);
-        Userdef_USB_usb1_function_delay_10us(1);
-        buf3 = RZA_IO_RegRead_16(&USB201.INTSTS0,
-                                USB_INTSTS0_VBSTS_SHIFT,
-                                USB_INTSTS0_VBSTS);
-    } while ((buf1 != buf2) || (buf2 != buf3));
-
-    if (buf1 == DEVDRV_USBF_OFF)
-    {
-        return DEVDRV_USBF_OFF;        /* detach */
-    }
-
-    return DEVDRV_USBF_ON;             /* attach */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_USB_FUNCTION_Attach
-* Description  : Connects to the USB host controller.
-*              : This function pulls up D+.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb1_function_USB_FUNCTION_Attach (void)
-{
-    Userdef_USB_usb1_function_attach();
-
-    Userdef_USB_usb1_function_delay_xms(10);
-
-    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
-                        1,
-                        USB_SYSCFG_DPRPU_SHIFT,
-                        USB_SYSCFG_DPRPU);      /* Pull-up D+ and open D- */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_USB_FUNCTION_Detach
-* Description  : Disconnects from the USB host controller.
-*              : This function opens D+/D-.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb1_function_USB_FUNCTION_Detach (void)
-{
-    uint16_t pipe;
-
-    Userdef_USB_usb1_function_detach();
-
-    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
-    {
-        if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_IDLE)
-        {
-            usb1_function_stop_transfer(pipe);
-        }
-    }
-
-    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
-                        0,
-                        USB_SYSCFG_DPRPU_SHIFT,
-                        USB_SYSCFG_DPRPU);      /* open D+ and D- */
-
-    /* Detach Recovery */
-    Userdef_USB_usb1_function_delay_500ns();                /* need 1us=500ns * 2 wait */
-    Userdef_USB_usb1_function_delay_500ns();
-
-    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
-                        1,
-                        USB_SYSCFG_DCFM_SHIFT,
-                        USB_SYSCFG_DCFM);
-    Userdef_USB_usb1_function_delay_500ns();                /* need 100ns wait but 500ns S/W wait */
-
-    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
-                        0,
-                        USB_SYSCFG_DCFM_SHIFT,
-                        USB_SYSCFG_DCFM);
-
-    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
-                        0,
-                        USB_SYSCFG_USBE_SHIFT,
-                        USB_SYSCFG_USBE);       /* soft reset module */
-    Userdef_USB_usb1_function_delay_500ns();
-
-    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
-                        1,
-                        USB_SYSCFG_USBE_SHIFT,
-                        USB_SYSCFG_USBE);
-
-    usb1_function_EnableINTModule();            /* Interrupt Enable */
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_USB_FUNCTION_BusReset
-* Description  : This function is executed when the USB device is transitioned
-*              : to POWERD_STATE. Sets the device descriptor according to the
-*              : connection speed determined by the USB reset hand shake.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-#if 0	/*The USBHAL in mbed does not need this function*/
-void usb1_function_USB_FUNCTION_BusReset (void)
-{
-    usb1_function_init_status();                                    /* memory clear */
-
-    if (usb1_function_is_hispeed() == USB_FUNCTION_HIGH_SPEED)
-    {
-        usb1_function_ResetDescriptor(USB_FUNCTION_HIGH_SPEED);     /* Device Descriptor reset */
-    }
-    else
-    {
-        usb1_function_ResetDescriptor(USB_FUNCTION_FULL_SPEED);     /* Device Descriptor reset */
-    }
-
-    usb1_function_ResetDCP();                                       /* Default Control PIPE reset */
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_USB_FUNCTION_Resume
-* Description  : This function is executed when the USB device detects a resume
-*              : signal.
-*              : The USB sample driver does not operate for this function.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-#if 0	/*The USBHAL in mbed does not need this function*/
-void usb1_function_USB_FUNCTION_Resume (void)
-{
-    /* NOP */
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_USB_FUNCTION_Suspend
-* Description  : This function is executed when the USB device detects a suspend
-*              : signal.
-*              : The USB sample driver does not operate for this function.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-#if 0	/*The USBHAL in mbed does not need this function*/
-void usb1_function_USB_FUNCTION_Suspend (void)
-{
-    /* NOP */
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_USB_FUNCTION_TestMode
-* Description  : This function is executed when the USB device is transitioned U
-*              : to TEST_MODE by the USB standard request.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb1_function_USB_FUNCTION_TestMode (void)
-{
-    switch (g_usb1_function_TestModeSelectors & USB_FUNCTION_FUNCTION_TEST_SELECT)
-    {
-        case USB_FUNCTION_FUNCTION_TEST_J:
-        case USB_FUNCTION_FUNCTION_TEST_K:
-        case USB_FUNCTION_FUNCTION_TEST_SE0_NAK:
-        case USB_FUNCTION_FUNCTION_TEST_PACKET:
-            RZA_IO_RegWrite_16(&USB201.TESTMODE,
-                                (g_usb1_function_TestModeSelectors >> 8),
-                                USB_TESTMODE_UTST_SHIFT,
-                                USB_TESTMODE_UTST);
-        break;
-
-        case USB_FUNCTION_FUNCTION_TEST_FORCE_ENABLE:
-        default:
-        break;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_EnableINTModule
-* Description  : Enables USB interrupt.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_EnableINTModule (void)
-{
-    uint16_t buf;
-
-    buf  = USB201.INTENB0;
-    buf |= (USB_FUNCTION_BITVBSE | USB_FUNCTION_BITDVSE | USB_FUNCTION_BITCTRE |
-            USB_FUNCTION_BITBEMPE | USB_FUNCTION_BITNRDYE | USB_FUNCTION_BITBRDYE);
-    USB201.INTENB0 = buf;
-
-    usb1_function_enable_bemp_int(USB_FUNCTION_PIPE0);
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_sub.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_sub.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,453 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_sub.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "usb1_function.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-#if 0
-extern const uint16_t *g_usb1_function_EndPntPtr[];
-extern uint8_t         g_usb1_function_DeviceDescriptor[];
-extern uint8_t        *g_usb1_function_ConfigurationPtr[];
-#endif
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb1_function_ResetDCP
-* Description  : Initializes the default control pipe(DCP).
-* Outline      : Reset default control pipe
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb1_function_ResetDCP (void)
-{
-    USB201.DCPCFG  = 0;
-#if 0
-    USB201.DCPMAXP = g_usb1_function_DeviceDescriptor[7];
-#else
-    USB201.DCPMAXP = 64;
-#endif
-
-    USB201.CFIFOSEL  = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
-    USB201.D0FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
-    USB201.D1FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_ResetEP
-* Description  : Initializes the end point.
-* Arguments    : uint16_t num          ; Configuration Number
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb1_function_ResetEP (uint16_t num)
-{
-    uint16_t   pipe;
-    uint16_t   ep;
-    uint16_t   index;
-    uint16_t   buf;
-    uint16_t * tbl;
-
-    tbl = (uint16_t *)(g_usb1_function_EndPntPtr[num - 1]);
-
-    for (ep = 1; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
-    {
-        if (g_usb1_function_EPTableIndex[ep] != USB_FUNCTION_EP_ERROR)
-        {
-            index = (uint16_t)(USB_FUNCTION_EPTABLE_LENGTH * g_usb1_function_EPTableIndex[ep]);
-            pipe  = (uint16_t)(tbl[index + 0] & USB_FUNCTION_BITCURPIPE);
-
-            g_usb1_function_PipeTbl[pipe] = (uint16_t)(((tbl[index + 1] & USB_FUNCTION_DIRFIELD) << 3) |
-                                                         ep                                            |
-                                                        (tbl[index + 0] & USB_FUNCTION_FIFO_USE));
-
-            if ((tbl[index + 1] & USB_FUNCTION_DIRFIELD) == USB_FUNCTION_DIR_P_OUT)
-            {
-                tbl[index + 1] |= USB_FUNCTION_SHTNAKON;
-#ifdef  __USB_DMA_BFRE_ENABLE__
-                /* this routine cannnot be perfomred if read operation is executed in buffer size */
-                if (((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA) ||
-                    ((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA))
-                {
-                    tbl[index + 1] |= USB_FUNCTION_BFREON;
-                }
-#endif
-            }
-
-            /* Interrupt Disable */
-            buf  = USB201.BRDYENB;
-            buf &= (uint16_t)~g_usb1_function_bit_set[pipe];
-            USB201.BRDYENB = buf;
-            buf  = USB201.NRDYENB;
-            buf &= (uint16_t)~g_usb1_function_bit_set[pipe];
-            USB201.NRDYENB = buf;
-            buf  = USB201.BEMPENB;
-            buf &= (uint16_t)~g_usb1_function_bit_set[pipe];
-            USB201.BEMPENB = buf;
-
-            usb1_function_set_pid_nak(pipe);
-
-            /* CurrentPIPE Clear */
-            if (RZA_IO_RegRead_16(&USB201.CFIFOSEL,
-                                    USB_CFIFOSEL_CURPIPE_SHIFT,
-                                    USB_CFIFOSEL_CURPIPE) == pipe)
-            {
-                RZA_IO_RegWrite_16(&USB201.CFIFOSEL,
-                                    0,
-                                    USB_CFIFOSEL_CURPIPE_SHIFT,
-                                    USB_CFIFOSEL_CURPIPE);
-            }
-
-            if (RZA_IO_RegRead_16(&USB201.D0FIFOSEL,
-                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
-                                    USB_DnFIFOSEL_CURPIPE) == pipe)
-            {
-                RZA_IO_RegWrite_16(&USB201.D0FIFOSEL,
-                                    0,
-                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
-                                    USB_DnFIFOSEL_CURPIPE);
-            }
-
-            if (RZA_IO_RegRead_16(&USB201.D1FIFOSEL,
-                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
-                                    USB_DnFIFOSEL_CURPIPE) == pipe)
-            {
-                RZA_IO_RegWrite_16(&USB201.D1FIFOSEL,
-                                    0,
-                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
-                                    USB_DnFIFOSEL_CURPIPE);
-            }
-
-            /* PIPE Configuration */
-            USB201.PIPESEL  = pipe;
-            USB201.PIPECFG  = tbl[index + 1];
-            USB201.PIPEBUF  = tbl[index + 2];
-            USB201.PIPEMAXP = tbl[index + 3];
-            USB201.PIPEPERI = tbl[index + 4];
-
-            g_usb1_function_pipecfg[pipe]  = tbl[index + 1];
-            g_usb1_function_pipebuf[pipe]  = tbl[index + 2];
-            g_usb1_function_pipemaxp[pipe] = tbl[index + 3];
-            g_usb1_function_pipeperi[pipe] = tbl[index + 4];
-
-            /* Buffer Clear */
-            usb1_function_set_sqclr(pipe);
-            usb1_function_aclrm(pipe);
-
-            /* init Global */
-            g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
-            g_usb1_function_PipeDataSize[pipe] = 0;
-        }
-    }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_EpToPipe
-* Description  : Returns the pipe which end point specified by the argument is
-*              : allocated to.
-* Arguments    : uint16_t ep       ; Direction + Endpoint Number
-* Return Value : USB_FUNCTION_EP_ERROR         : Error
-*              : Others           : Pipe Number
-*******************************************************************************/
-uint16_t usb1_function_EpToPipe (uint16_t ep)
-{
-    uint16_t pipe;
-
-    for (pipe = 1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
-    {
-        if ((g_usb1_function_PipeTbl[pipe] & 0x00ff) == ep)
-        {
-            return pipe;
-        }
-    }
-
-    return USB_FUNCTION_EP_ERROR;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_InitEPTable
-* Description  : Sets the end point by the Alternate setting value of the
-*              : configuration number and the interface number specified by the
-*              : argument.
-* Arguments    : uint16_t Con_Num       ; Configuration Number
-*              : uint16_t Int_Num       ; Interface Number
-*              : uint16_t Alt_Num       ; Alternate Setting
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb1_function_InitEPTable (uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num)
-{
-    uint8_t  * ptr;
-    uint16_t   point_interface;
-    uint16_t   point_endpoint;
-    uint16_t   length;
-    uint16_t   start;
-    uint16_t   numbers;
-    uint16_t   endpoint;
-
-    ptr = (uint8_t *)g_usb1_function_ConfigurationPtr[Con_Num - 1];
-    point_interface = *ptr;
-    length = (uint16_t)((uint16_t)*(ptr + 3) << 8 | (uint16_t)*(ptr + 2));
-    ptr  += *ptr;
-    start   = 0;
-    numbers = 0;
-    point_endpoint = 0;
-
-    for (; point_interface < length;)
-    {
-        switch (*(ptr + 1))                                     /* Descriptor Type ? */
-        {
-            case USB_FUNCTION_DT_INTERFACE:                     /* Interface */
-                if ((*(ptr + 2) == Int_Num) && (*(ptr + 3) == Alt_Num))
-                {
-                    numbers = *(ptr + 4);
-                }
-                else
-                {
-                    start  += *(ptr + 4);
-                }
-                point_interface += *ptr;
-                ptr += *ptr;
-            break;
-
-            case USB_FUNCTION_DT_ENDPOINT:                      /* Endpoint */
-                if (point_endpoint < numbers)
-                {
-                    endpoint = (uint16_t)(*(ptr + 2) & 0x0f);
-                    g_usb1_function_EPTableIndex[endpoint] = (uint16_t)(start + point_endpoint);
-                    ++point_endpoint;
-                }
-                point_interface += *ptr;
-                ptr += *ptr;
-            break;
-
-            case USB_FUNCTION_DT_DEVICE:                        /* Device */
-            case USB_FUNCTION_DT_CONFIGURATION:                 /* Configuration */
-            case USB_FUNCTION_DT_STRING:                        /* String */
-            default:                                            /* Class, Vendor, else */
-                point_interface += *ptr;
-                ptr += *ptr;
-            break;
-        }
-    }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_GetConfigNum
-* Description  : Returns the number of configuration referring to the number of
-*              : configuration described in the device descriptor.
-* Arguments    : none
-* Return Value : Number of possible configurations (bNumConfigurations).
-*******************************************************************************/
-#if 0
-uint16_t usb1_function_GetConfigNum (void)
-{
-    return (uint16_t)g_usb1_function_DeviceDescriptor[17];
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_GetInterfaceNum
-* Description  : Returns the number of interface referring to the number of
-*              : interface described in the configuration descriptor.
-* Arguments    : uint16_t num       ; Configuration Number
-* Return Value : Number of this interface (bNumInterfaces).
-*******************************************************************************/
-#if 0
-uint16_t usb1_function_GetInterfaceNum (uint16_t num)
-{
-    return (uint16_t)(*(g_usb1_function_ConfigurationPtr[num - 1] + 4));
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_GetAltNum
-* Description  : Returns the Alternate setting value of the configuration number
-*              : and the interface number specified by the argument.
-* Arguments    : uint16_t Con_Num       ; Configuration Number
-*              : uint16_t Int_Num       ; Interface Number
-* Return Value : Value used to select this alternate setting(bAlternateSetting).
-*******************************************************************************/
-#if 0
-uint16_t usb1_function_GetAltNum (uint16_t Con_Num, uint16_t Int_Num)
-{
-    uint8_t  * ptr;
-    uint16_t   point;
-    uint16_t   alt_num = 0;
-    uint16_t   length;
-
-    ptr = (uint8_t *)(g_usb1_function_ConfigurationPtr[Con_Num - 1]);
-    point = ptr[0];
-    ptr  += ptr[0];                                 /* InterfaceDescriptor[0] */
-    length  = (uint16_t)(*(g_usb1_function_ConfigurationPtr[Con_Num - 1] + 2));
-    length |= (uint16_t)((uint16_t)(*(g_usb1_function_ConfigurationPtr[Con_Num - 1] + 3)) << 8);
-
-    for (; point < length;)                                 /* Search Descriptor Table size */
-    {
-        switch (ptr[1])                                     /* Descriptor Type ? */
-        {
-            case USB_FUNCTION_DT_INTERFACE:                 /* Interface */
-                if (Int_Num == ptr[2])
-                {
-                    alt_num = (uint16_t)ptr[3];             /* Alternate Number count */
-                }
-                point += ptr[0];
-                ptr += ptr[0];
-            break;
-
-            case USB_FUNCTION_DT_DEVICE:                    /* Device */
-            case USB_FUNCTION_DT_CONFIGURATION:             /* Configuration */
-            case USB_FUNCTION_DT_STRING:                    /* String */
-            case USB_FUNCTION_DT_ENDPOINT:                  /* Endpoint */
-            default:                                        /* Class, Vendor, else */
-                point += ptr[0];
-                ptr   += ptr[0];
-            break;
-        }
-    }
-    return alt_num;
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_CheckRemoteWakeup
-* Description  : Returns the result of the remote wake up function is supported
-*              : or not referring to the configuration descriptor.
-* Arguments    : none
-* Return Value : DEVDRV_USBF_ON     :   Support Remote Wakeup
-*              : DEVDRV_USBF_OFF    :   not Support Remote Wakeup
-*******************************************************************************/
-#if 0
-uint16_t usb1_function_CheckRemoteWakeup (void)
-{
-    uint8_t atr;
-
-    if (g_usb1_function_ConfigNum == 0)
-    {
-        return DEVDRV_USBF_OFF;
-    }
-
-    atr = *(g_usb1_function_ConfigurationPtr[g_usb1_function_ConfigNum - 1] + 7);
-
-    if (atr & USB_FUNCTION_CF_RWUP)
-    {
-        return DEVDRV_USBF_ON;
-    }
-
-    return DEVDRV_USBF_OFF;
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_clear_alt
-* Description  : Initializes the Alternate setting area.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb1_function_clear_alt (void)
-{
-    int i;
-
-    for (i = 0; i < USB_FUNCTION_ALT_NO; ++i)
-    {
-        g_usb1_function_Alternate[i] = 0;                           /* Alternate */
-    }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb1_function_clear_pipe_tbl
-* Description  : Initializes pipe definition table.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void usb1_function_clear_pipe_tbl (void)
-{
-    int pipe;
-
-    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
-    {
-        g_usb1_function_PipeTbl[pipe] = 0;
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_clear_ep_table_index
-* Description  : Initializes the end point table index.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb1_function_clear_ep_table_index (void)
-{
-    int ep;
-
-    for (ep = 0; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
-    {
-        g_usb1_function_EPTableIndex[ep] = USB_FUNCTION_EP_ERROR;
-    }
-}
-#endif
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/userdef/usb1_function_dmacdrv.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/userdef/usb1_function_dmacdrv.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,698 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_dmacdrv.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include <stdio.h>
-#include "r_typedefs.h"
-#include "iodefine.h"
-#include "rza_io_regrw.h"
-#include "usb1_function_dmacdrv.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-#define DMAC_INDEFINE   (255)       /* Macro definition when REQD bit is not used */
-
-/* ==== Request setting information for on-chip peripheral module ==== */
-typedef enum dmac_peri_req_reg_type
-{
-    DMAC_REQ_MID,
-    DMAC_REQ_RID,
-    DMAC_REQ_AM,
-    DMAC_REQ_LVL,
-    DMAC_REQ_REQD
-} dmac_peri_req_reg_type_t;
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-/* ==== Prototype declaration ==== */
-
-/* ==== Global variable ==== */
-/* On-chip peripheral module request setting table */
-static const uint8_t usb1_function_dmac_peri_req_init_table[8][5] =
-{
-    /* MID,RID,AM,LVL,REQD */
-    {32, 3, 2, 1, 1},    /* USB_0 channel 0 transmit FIFO empty */
-    {32, 3, 2, 1, 0},    /* USB_0 channel 0 receive FIFO full   */
-    {33, 3, 2, 1, 1},    /* USB_0 channel 1 transmit FIFO empty */
-    {33, 3, 2, 1, 0},    /* USB_0 channel 1 receive FIFO full   */
-    {34, 3, 2, 1, 1},    /* USB_1 channel 0 transmit FIFO empty */
-    {34, 3, 2, 1, 0},    /* USB_1 channel 0 receive FIFO full   */
-    {35, 3, 2, 1, 1},    /* USB_1 channel 1 transmit FIFO empty */
-    {35, 3, 2, 1, 0},    /* USB_1 channel 1 receive FIFO full   */
-};
-
-
-/*******************************************************************************
-* Function Name: usb1_function_DMAC3_PeriReqInit
-* Description  : Sets the register mode for DMA mode and the on-chip peripheral
-*              : module request for transfer request for DMAC channel 1.
-*              : Executes DMAC initial setting using the DMA information
-*              : specified by the argument *trans_info and the enabled/disabled
-*              : continuous transfer specified by the argument continuation.
-*              : Registers DMAC channel 1 interrupt handler function and sets
-*              : the interrupt priority level. Then enables transfer completion
-*              : interrupt.
-* Arguments    : dmac_transinfo_t *trans_info   : Setting information to DMAC register
-*              : uint32_t          dmamode      : DMA mode (only for DMAC_MODE_REGISTER)
-*              : uint32_t          continuation : Set continuous transfer to be valid
-*              :                                  after DMA transfer has been completed
-*              :             DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
-*              :             DMAC_SAMPLE_SINGLE       : Do not execute continuous transfer
-*              : uint32_t request_factor        : Factor for on-chip peripheral module request
-*              :             DMAC_REQ_OSTM0TINT       : OSTM_0 compare match
-*              :             DMAC_REQ_OSTM1TINT       : OSTM_1 compare match
-*              :             DMAC_REQ_TGI0A           : MTU2_0 input capture/compare match
-*              :                  :
-*              : uint32_t          req_direction: Setting value of CHCFG_n register REQD bit
-* Return Value : none
-*******************************************************************************/
-void usb1_function_DMAC3_PeriReqInit (const dmac_transinfo_t * trans_info,
-                                      uint32_t dmamode, uint32_t continuation,
-                                      uint32_t request_factor, uint32_t req_direction)
-{
-    /* ==== Register mode ==== */
-    if (DMAC_MODE_REGISTER == dmamode)
-    {
-        /* ==== Next0 register set ==== */
-        DMAC3.N0SA_n = trans_info->src_addr;         /* Start address of transfer source      */
-        DMAC3.N0DA_n = trans_info->dst_addr;         /* Start address of transfer destination */
-        DMAC3.N0TB_n = trans_info->count;            /* Total transfer byte count             */
-
-        /* DAD : Transfer destination address counting direction */
-        /* SAD : Transfer source address counting direction      */
-        /* DDS : Transfer destination transfer size              */
-        /* SDS : Transfer source transfer size                   */
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            trans_info->daddr_dir,
-                            DMAC3_CHCFG_n_DAD_SHIFT,
-                            DMAC3_CHCFG_n_DAD);
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            trans_info->saddr_dir,
-                            DMAC3_CHCFG_n_SAD_SHIFT,
-                            DMAC3_CHCFG_n_SAD);
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            trans_info->dst_size,
-                            DMAC3_CHCFG_n_DDS_SHIFT,
-                            DMAC3_CHCFG_n_DDS);
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            trans_info->src_size,
-                            DMAC3_CHCFG_n_SDS_SHIFT,
-                            DMAC3_CHCFG_n_SDS);
-
-        /* DMS  : Register mode                            */
-        /* RSEL : Select Next0 register set                */
-        /* SBE  : No discharge of buffer data when aborted */
-        /* DEM  : No DMA interrupt mask                    */
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            0,
-                            DMAC3_CHCFG_n_DMS_SHIFT,
-                            DMAC3_CHCFG_n_DMS);
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            0,
-                            DMAC3_CHCFG_n_RSEL_SHIFT,
-                            DMAC3_CHCFG_n_RSEL);
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            0,
-                            DMAC3_CHCFG_n_SBE_SHIFT,
-                            DMAC3_CHCFG_n_SBE);
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            0,
-                            DMAC3_CHCFG_n_DEM_SHIFT,
-                            DMAC3_CHCFG_n_DEM);
-
-        /* ---- Continuous transfer ---- */
-        if (DMAC_SAMPLE_CONTINUATION == continuation)
-        {
-            /* REN : Execute continuous transfer                         */
-            /* RSW : Change register set when DMA transfer is completed. */
-            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                                1,
-                                DMAC3_CHCFG_n_REN_SHIFT,
-                                DMAC3_CHCFG_n_REN);
-            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                                1,
-                                DMAC3_CHCFG_n_RSW_SHIFT,
-                                DMAC3_CHCFG_n_RSW);
-        }
-        /* ---- Single transfer ---- */
-        else
-        {
-            /* REN : Do not execute continuous transfer                         */
-            /* RSW : Do not change register set when DMA transfer is completed. */
-            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                                0,
-                                DMAC3_CHCFG_n_REN_SHIFT,
-                                DMAC3_CHCFG_n_REN);
-            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                                0,
-                                DMAC3_CHCFG_n_RSW_SHIFT,
-                                DMAC3_CHCFG_n_RSW);
-        }
-
-        /* TM  : Single transfer                          */
-        /* SEL : Channel setting                          */
-        /* HIEN, LOEN : On-chip peripheral module request */
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            0,
-                            DMAC3_CHCFG_n_TM_SHIFT,
-                            DMAC3_CHCFG_n_TM);
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            3,
-                            DMAC3_CHCFG_n_SEL_SHIFT,
-                            DMAC3_CHCFG_n_SEL);
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            1,
-                            DMAC3_CHCFG_n_HIEN_SHIFT,
-                            DMAC3_CHCFG_n_HIEN);
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            0,
-                            DMAC3_CHCFG_n_LOEN_SHIFT,
-                            DMAC3_CHCFG_n_LOEN);
-
-        /* ---- Set factor by specified on-chip peripheral module request ---- */
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
-                            DMAC3_CHCFG_n_AM_SHIFT,
-                            DMAC3_CHCFG_n_AM);
-        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
-                            DMAC3_CHCFG_n_LVL_SHIFT,
-                            DMAC3_CHCFG_n_LVL);
-
-        if (usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
-        {
-            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                                usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
-                                DMAC3_CHCFG_n_REQD_SHIFT,
-                                DMAC3_CHCFG_n_REQD);
-        }
-        else
-        {
-            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
-                                req_direction,
-                                DMAC3_CHCFG_n_REQD_SHIFT,
-                                DMAC3_CHCFG_n_REQD);
-        }
-
-        RZA_IO_RegWrite_32(&DMAC23.DMARS,
-                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
-                            DMAC23_DMARS_CH3_RID_SHIFT,
-                            DMAC23_DMARS_CH3_RID);
-        RZA_IO_RegWrite_32(&DMAC23.DMARS,
-                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
-                            DMAC23_DMARS_CH3_MID_SHIFT,
-                            DMAC23_DMARS_CH3_MID);
-
-        /* PR : Round robin mode */
-        RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
-                            1,
-                            DMAC07_DCTRL_0_7_PR_SHIFT,
-                            DMAC07_DCTRL_0_7_PR);
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_DMAC3_Open
-* Description  : Enables DMAC channel 3 transfer.
-* Arguments    : uint32_t req : DMAC request mode
-* Return Value :  0 : Succeeded in enabling DMA transfer
-*              : -1 : Failed to enable DMA transfer (due to DMA operation)
-*******************************************************************************/
-int32_t usb1_function_DMAC3_Open (uint32_t req)
-{
-    int32_t ret;
-    volatile uint8_t dummy;
-
-    /* Transferable? */
-    if ((0 == RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
-                                DMAC3_CHSTAT_n_EN_SHIFT,
-                                DMAC3_CHSTAT_n_EN)) &&
-        (0 == RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
-                                DMAC3_CHSTAT_n_TACT_SHIFT,
-                                DMAC3_CHSTAT_n_TACT)))
-    {
-        /* Clear Channel Status Register */
-        RZA_IO_RegWrite_32(&DMAC3.CHCTRL_n,
-                            1,
-                            DMAC3_CHCTRL_n_SWRST_SHIFT,
-                            DMAC3_CHCTRL_n_SWRST);
-        dummy = RZA_IO_RegRead_32(&DMAC3.CHCTRL_n,
-                                DMAC3_CHCTRL_n_SWRST_SHIFT,
-                                DMAC3_CHCTRL_n_SWRST);
-        /* Enable DMA transfer */
-        RZA_IO_RegWrite_32(&DMAC3.CHCTRL_n,
-                            1,
-                            DMAC3_CHCTRL_n_SETEN_SHIFT,
-                            DMAC3_CHCTRL_n_SETEN);
-
-        /* ---- Request by software ---- */
-        if (DMAC_REQ_MODE_SOFT == req)
-        {
-            /* DMA transfer Request by software */
-            RZA_IO_RegWrite_32(&DMAC3.CHCTRL_n,
-                                1,
-                                DMAC3_CHCTRL_n_STG_SHIFT,
-                                DMAC3_CHCTRL_n_STG);
-        }
-
-        ret = 0;
-    }
-    else
-    {
-        ret = -1;
-    }
-
-    return ret;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_DMAC3_Close
-* Description  : Aborts DMAC channel 3 transfer. Returns the remaining transfer
-*              : byte count at the time of DMA transfer abort to the argument
-*              : *remain.
-* Arguments    : uint32_t * remain : Remaining transfer byte count when
-*              :                   : DMA transfer is aborted
-* Return Value : none
-*******************************************************************************/
-void usb1_function_DMAC3_Close (uint32_t * remain)
-{
-
-    /* ==== Abort transfer ==== */
-    RZA_IO_RegWrite_32(&DMAC3.CHCTRL_n,
-                        1,
-                        DMAC3_CHCTRL_n_CLREN_SHIFT,
-                        DMAC3_CHCTRL_n_CLREN);
-
-    while (1 == RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
-                                DMAC3_CHSTAT_n_TACT_SHIFT,
-                                DMAC3_CHSTAT_n_TACT))
-    {
-        /* Loop until transfer is aborted */
-    }
-
-    while (1 == RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
-                                DMAC3_CHSTAT_n_EN_SHIFT,
-                                DMAC3_CHSTAT_n_EN))
-    {
-        /* Loop until 0 is set in EN before checking the remaining transfer byte count */
-    }
-    /* ==== Obtain remaining transfer byte count ==== */
-    *remain = DMAC3.CRTB_n;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_DMAC3_Load_Set
-* Description  : Sets the transfer source address, transfer destination
-*              : address, and total transfer byte count respectively
-*              : specified by the argument src_addr, dst_addr, and count to
-*              : DMAC channel 3 as DMA transfer information.
-*              : Sets the register set selected by the CHCFG_n register
-*              : RSEL bit from the Next0 or Next1 register set.
-*              : This function should be called when DMA transfer of DMAC
-*              : channel 3 is aboted.
-* Arguments    : uint32_t src_addr : Transfer source address
-*              : uint32_t dst_addr : Transfer destination address
-*              : uint32_t count    : Total transfer byte count
-* Return Value : none
-*******************************************************************************/
-void usb1_function_DMAC3_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
-{
-    uint8_t reg_set;
-
-    /* Obtain register set in use */
-    reg_set = RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
-                                DMAC3_CHSTAT_n_SR_SHIFT,
-                                DMAC3_CHSTAT_n_SR);
-
-    /* ==== Load ==== */
-    if (0 == reg_set)
-    {
-        /* ---- Next0 Register Set ---- */
-        DMAC3.N0SA_n = src_addr;    /* Start address of transfer source      */
-        DMAC3.N0DA_n = dst_addr;    /* Start address of transfer destination */
-        DMAC3.N0TB_n = count;       /* Total transfer byte count             */
-    }
-    else
-    {
-        /* ---- Next1 Register Set ---- */
-        DMAC3.N1SA_n = src_addr;     /* Start address of transfer source      */
-        DMAC3.N1DA_n = dst_addr;     /* Start address of transfer destination */
-        DMAC3.N1TB_n = count;        /* Total transfer byte count             */
-     }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_DMAC4_PeriReqInit
-* Description  : Sets the register mode for DMA mode and the on-chip peripheral
-*              : module request for transfer request for DMAC channel 2.
-*              : Executes DMAC initial setting using the DMA information
-*              : specified by the argument *trans_info and the enabled/disabled
-*              : continuous transfer specified by the argument continuation.
-*              : Registers DMAC channel 2 interrupt handler function and sets
-*              : the interrupt priority level. Then enables transfer completion
-*              : interrupt.
-* Arguments    : dmac_transinfo_t * trans_info : Setting information to DMAC
-*              :                               : register
-*              : uint32_t dmamode      : DMA mode (only for DMAC_MODE_REGISTER)
-*              : uint32_t continuation : Set continuous transfer to be valid
-*              :                       : after DMA transfer has been completed
-*              :         DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
-*              :         DMAC_SAMPLE_SINGLE       : Do not execute continuous
-*              :                                  : transfer
-*              : uint32_t request_factor : Factor for on-chip peripheral module
-*              :                         : request
-*              :         DMAC_REQ_OSTM0TINT : OSTM_0 compare match
-*              :         DMAC_REQ_OSTM1TINT : OSTM_1 compare match
-*              :         DMAC_REQ_TGI0A     : MTU2_0 input capture/compare match
-*              :                 :
-*              : uint32_t req_direction : Setting value of CHCFG_n register
-*              :                        : REQD bit
-*******************************************************************************/
-void usb1_function_DMAC4_PeriReqInit (const dmac_transinfo_t * trans_info,
-                                      uint32_t dmamode, uint32_t continuation,
-                                      uint32_t request_factor, uint32_t req_direction)
-{
-    /* ==== Register mode ==== */
-    if (DMAC_MODE_REGISTER == dmamode)
-    {
-        /* ==== Next0 register set ==== */
-        DMAC4.N0SA_n = trans_info->src_addr;        /* Start address of transfer source      */
-        DMAC4.N0DA_n = trans_info->dst_addr;        /* Start address of transfer destination */
-        DMAC4.N0TB_n = trans_info->count;           /* Total transfer byte count             */
-
-        /* DAD : Transfer destination address counting direction */
-        /* SAD : Transfer source address counting direction      */
-        /* DDS : Transfer destination transfer size              */
-        /* SDS : Transfer source transfer size                   */
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            trans_info->daddr_dir,
-                            DMAC4_CHCFG_n_DAD_SHIFT,
-                            DMAC4_CHCFG_n_DAD);
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            trans_info->saddr_dir,
-                            DMAC4_CHCFG_n_SAD_SHIFT,
-                            DMAC4_CHCFG_n_SAD);
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            trans_info->dst_size,
-                            DMAC4_CHCFG_n_DDS_SHIFT,
-                            DMAC4_CHCFG_n_DDS);
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            trans_info->src_size,
-                            DMAC4_CHCFG_n_SDS_SHIFT,
-                            DMAC4_CHCFG_n_SDS);
-
-        /* DMS  : Register mode                            */
-        /* RSEL : Select Next0 register set                */
-        /* SBE  : No discharge of buffer data when aborted */
-        /* DEM  : No DMA interrupt mask                    */
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            0,
-                            DMAC4_CHCFG_n_DMS_SHIFT,
-                            DMAC4_CHCFG_n_DMS);
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            0,
-                            DMAC4_CHCFG_n_RSEL_SHIFT,
-                            DMAC4_CHCFG_n_RSEL);
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            0,
-                            DMAC4_CHCFG_n_SBE_SHIFT,
-                            DMAC4_CHCFG_n_SBE);
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            0,
-                            DMAC4_CHCFG_n_DEM_SHIFT,
-                            DMAC4_CHCFG_n_DEM);
-
-        /* ---- Continuous transfer ---- */
-        if (DMAC_SAMPLE_CONTINUATION == continuation)
-        {
-            /* REN : Execute continuous transfer                         */
-            /* RSW : Change register set when DMA transfer is completed. */
-            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                                1,
-                                DMAC4_CHCFG_n_REN_SHIFT,
-                                DMAC4_CHCFG_n_REN);
-            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                                1,
-                                DMAC4_CHCFG_n_RSW_SHIFT,
-                                DMAC4_CHCFG_n_RSW);
-        }
-        /* ---- Single transfer ---- */
-        else
-        {
-            /* REN : Do not execute continuous transfer                         */
-            /* RSW : Do not change register set when DMA transfer is completed. */
-            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                                0,
-                                DMAC4_CHCFG_n_REN_SHIFT,
-                                DMAC4_CHCFG_n_REN);
-            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                                0,
-                                DMAC4_CHCFG_n_RSW_SHIFT,
-                                DMAC4_CHCFG_n_RSW);
-        }
-
-        /* TM  : Single transfer                          */
-        /* SEL : Channel setting                          */
-        /* HIEN, LOEN : On-chip peripheral module request */
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            0,
-                            DMAC4_CHCFG_n_TM_SHIFT,
-                            DMAC4_CHCFG_n_TM);
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            4,
-                            DMAC4_CHCFG_n_SEL_SHIFT,
-                            DMAC4_CHCFG_n_SEL);
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            1,
-                            DMAC4_CHCFG_n_HIEN_SHIFT,
-                            DMAC4_CHCFG_n_HIEN);
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            0,
-                            DMAC4_CHCFG_n_LOEN_SHIFT,
-                            DMAC4_CHCFG_n_LOEN);
-
-        /* ---- Set factor by specified on-chip peripheral module request ---- */
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
-                            DMAC4_CHCFG_n_AM_SHIFT,
-                            DMAC4_CHCFG_n_AM);
-        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
-                            DMAC4_CHCFG_n_LVL_SHIFT,
-                            DMAC4_CHCFG_n_LVL);
-        if (usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
-        {
-            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                                usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
-                                DMAC4_CHCFG_n_REQD_SHIFT,
-                                DMAC4_CHCFG_n_REQD);
-        }
-        else
-        {
-            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
-                                req_direction,
-                                DMAC4_CHCFG_n_REQD_SHIFT,
-                                DMAC4_CHCFG_n_REQD);
-        }
-        RZA_IO_RegWrite_32(&DMAC45.DMARS,
-                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
-                            DMAC45_DMARS_CH4_RID_SHIFT,
-                            DMAC45_DMARS_CH4_RID);
-        RZA_IO_RegWrite_32(&DMAC45.DMARS,
-                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
-                            DMAC45_DMARS_CH4_MID_SHIFT,
-                            DMAC45_DMARS_CH4_MID);
-
-        /* PR : Round robin mode */
-        RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
-                            1,
-                            DMAC07_DCTRL_0_7_PR_SHIFT,
-                            DMAC07_DCTRL_0_7_PR);
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_DMAC4_Open
-* Description  : Enables DMAC channel 4 transfer.
-* Arguments    : uint32_t req : DMAC request mode
-* Return Value :  0 : Succeeded in enabling DMA transfer
-*              : -1 : Failed to enable DMA transfer (due to DMA operation)
-*******************************************************************************/
-int32_t usb1_function_DMAC4_Open (uint32_t req)
-{
-    int32_t ret;
-    volatile uint8_t  dummy;
-
-    /* Transferable? */
-    if ((0 == RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
-                                DMAC4_CHSTAT_n_EN_SHIFT,
-                                DMAC4_CHSTAT_n_EN)) &&
-        (0 == RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
-                                DMAC4_CHSTAT_n_TACT_SHIFT,
-                                DMAC4_CHSTAT_n_TACT)))
-    {
-        /* Clear Channel Status Register */
-        RZA_IO_RegWrite_32(&DMAC4.CHCTRL_n,
-                            1,
-                            DMAC4_CHCTRL_n_SWRST_SHIFT,
-                            DMAC4_CHCTRL_n_SWRST);
-        dummy = RZA_IO_RegRead_32(&DMAC4.CHCTRL_n,
-                                DMAC4_CHCTRL_n_SWRST_SHIFT,
-                                DMAC4_CHCTRL_n_SWRST);
-        /* Enable DMA transfer */
-        RZA_IO_RegWrite_32(&DMAC4.CHCTRL_n,
-                            1,
-                            DMAC4_CHCTRL_n_SETEN_SHIFT,
-                            DMAC4_CHCTRL_n_SETEN);
-
-        /* ---- Request by software ---- */
-        if (DMAC_REQ_MODE_SOFT == req)
-        {
-            /* DMA transfer Request by software */
-            RZA_IO_RegWrite_32(&DMAC4.CHCTRL_n,
-                                1,
-                                DMAC4_CHCTRL_n_STG_SHIFT,
-                                DMAC4_CHCTRL_n_STG);
-        }
-
-        ret = 0;
-    }
-    else
-    {
-        ret = -1;
-    }
-
-    return ret;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_DMAC4_Close
-* Description  : Aborts DMAC channel 4 transfer. Returns the remaining transfer
-*              : byte count at the time of DMA transfer abort to the argument
-*              : *remain.
-* Arguments    : uint32_t * remain : Remaining transfer byte count when
-*              :                   : DMA transfer is aborted
-* Return Value : none
-*******************************************************************************/
-void usb1_function_DMAC4_Close (uint32_t * remain)
-{
-
-    /* ==== Abort transfer ==== */
-    RZA_IO_RegWrite_32(&DMAC4.CHCTRL_n,
-                        1,
-                        DMAC4_CHCTRL_n_CLREN_SHIFT,
-                        DMAC4_CHCTRL_n_CLREN);
-
-    while (1 == RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
-                                DMAC4_CHSTAT_n_TACT_SHIFT,
-                                DMAC4_CHSTAT_n_TACT))
-    {
-        /* Loop until transfer is aborted */
-    }
-
-    while (1 == RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
-                                DMAC4_CHSTAT_n_EN_SHIFT,
-                                DMAC4_CHSTAT_n_EN))
-    {
-        /* Loop until 0 is set in EN before checking the remaining transfer byte count */
-    }
-    /* ==== Obtain remaining transfer byte count ==== */
-    *remain = DMAC4.CRTB_n;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_DMAC4_Load_Set
-* Description  : Sets the transfer source address, transfer destination
-*              : address, and total transfer byte count respectively
-*              : specified by the argument src_addr, dst_addr, and count to
-*              : DMAC channel 4 as DMA transfer information.
-*              : Sets the register set selected by the CHCFG_n register
-*              : RSEL bit from the Next0 or Next1 register set.
-*              : This function should be called when DMA transfer of DMAC
-*              : channel 4 is aboted.
-* Arguments    : uint32_t src_addr : Transfer source address
-*              : uint32_t dst_addr : Transfer destination address
-*              : uint32_t count    : Total transfer byte count
-* Return Value : none
-*******************************************************************************/
-void usb1_function_DMAC4_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
-{
-    uint8_t reg_set;
-
-    /* Obtain register set in use */
-    reg_set = RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
-                                DMAC4_CHSTAT_n_SR_SHIFT,
-                                DMAC4_CHSTAT_n_SR);
-
-    /* ==== Load ==== */
-    if (0 == reg_set)
-    {
-        /* ---- Next0 Register Set ---- */
-        DMAC4.N0SA_n = src_addr;    /* Start address of transfer source      */
-        DMAC4.N0DA_n = dst_addr;    /* Start address of transfer destination */
-        DMAC4.N0TB_n = count;       /* Total transfer byte count             */
-    }
-    else
-    {
-        /* ---- Next1 Register Set ---- */
-        DMAC4.N1SA_n = src_addr;    /* Start address of transfer source      */
-        DMAC4.N1DA_n = dst_addr;    /* Start address of transfer destination */
-        DMAC4.N1TB_n = count;       /* Total transfer byte count             */
-     }
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/userdef/usb1_function_userdef.c
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/userdef/usb1_function_userdef.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,762 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name    : usb1_function_userdef.c
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Device(s)    : RZ/A1H
-* Tool-Chain   :
-* OS           : None
-* H/W Platform :
-* Description  : RZ/A1H R7S72100 USB Sample Program
-* Operation    :
-* Limitations  :
-*******************************************************************************/
-
-
-/*******************************************************************************
-Includes   <System Includes> , "Project Includes"
-*******************************************************************************/
-#include <stdio.h>
-#include "r_typedefs.h"
-#include "iodefine.h"
-#include "devdrv_usb_function_api.h"
-#include "usb1_function_dmacdrv.h"  /* common DMAC driver for USB */
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-#define DUMMY_ACCESS OSTM0CNT
-
-/* #define CACHE_WRITEBACK */
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-extern int32_t io_cwb(unsigned long start, unsigned long end);
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-static void usb1_function_enable_dmac0(uint32_t src, uint32_t dst, uint32_t count,
-                                       uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
-static void usb1_function_enable_dmac1(uint32_t src, uint32_t dst, uint32_t count,
-                                       uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
-static void Userdef_USB_usb1_function_delay_10us_2(void);
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_d0fifo_dmaintid
-* Description  : get D0FIFO DMA Interrupt ID
-* Arguments    : none
-* Return Value : D0FIFO DMA Interrupt ID
-*******************************************************************************/
-IRQn_Type Userdef_USB_usb1_function_d0fifo_dmaintid (void)
-{
-#if 0
-    return DMAINT1_IRQn;
-#else
-    return 0xFFFF;
-#endif
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_d1fifo_dmaintid
-* Description  : get D1FIFO DMA Interrupt ID
-* Arguments    : none
-* Return Value : D1FIFO DMA Interrupt ID
-*******************************************************************************/
-IRQn_Type Userdef_USB_usb1_function_d1fifo_dmaintid (void)
-{
-#if 0
-    return DMAINT1_IRQn;
-#else
-    return 0xFFFF;
-#endif
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_attach
-* Description  : Wait for the software of 1ms.
-*              : Alter this function according to the user's system.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb1_function_attach (void)
-{
-    printf("\n");
-    printf("channel 1 attach device\n");
-    printf("\n");
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_detach
-* Description  : Wait for the software of 1ms.
-*              : Alter this function according to the user's system.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb1_function_detach (void)
-{
-    printf("\n");
-    printf("channel 1 detach device\n");
-    printf("\n");
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_delay_1ms
-* Description  : Wait for the software of 1ms.
-*              : Alter this function according to the user's system.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb1_function_delay_1ms (void)
-{
-    volatile int i;
-    volatile unsigned long tmp;
-
-    /*
-     * Wait 1ms (Please change for your MCU).
-     */
-    for (i = 0; i < 1440; ++i)
-    {
-        tmp = DUMMY_ACCESS;
-    }
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_delay_xms
-* Description  : Wait for the software in the period of time specified by the
-*              : argument.
-*              : Alter this function according to the user's system.
-* Arguments    : uint32_t msec ; Wait Time (msec)
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb1_function_delay_xms (uint32_t msec)
-{
-    volatile unsigned short i;
-
-    for (i = 0; i < msec; ++i)
-    {
-        Userdef_USB_usb1_function_delay_1ms();
-    }
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_delay_10us
-* Description  : Waits for software for the period specified by the argument.
-*              : Alter this function according to the user's system.
-* Arguments    : uint32_t usec ; Wait Time(x 10usec)
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb1_function_delay_10us (uint32_t usec)
-{
-    volatile int i;
-
-    /* Wait 10us (Please change for your MCU) */
-    for (i = 0; i < usec; ++i)
-    {
-        Userdef_USB_usb1_function_delay_10us_2();
-    }
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_delay_10us_2
-* Description  : Waits for software for the period specified by the argument.
-*              : Alter this function according to the user's system.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-static void Userdef_USB_usb1_function_delay_10us_2 (void)
-{
-    volatile int i;
-    volatile unsigned long tmp;
-
-    /* Wait 1us (Please change for your MCU) */
-    for (i = 0; i < 14; ++i)
-    {
-        tmp = DUMMY_ACCESS;
-    }
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_delay_500ns
-* Description  : Wait for software for 500ns.
-*              : Alter this function according to the user's system.
-* Arguments    : none
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb1_function_delay_500ns (void)
-{
-    volatile int i;
-    volatile unsigned long tmp;
-
-    /* Wait 500ns (Please change for your MCU) */
-    /* Wait 500ns I clock 266MHz */
-    tmp = DUMMY_ACCESS;
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_start_dma
-* Description  : Enables DMA transfer on the information specified by the argument.
-*              : Set DMAC register by this function to enable DMA transfer.
-*              : After executing this function, USB module is set to start DMA
-*              : transfer. DMA transfer should not wait for DMA transfer complete.
-* Arguments    : USB_FUNCTION_DMA_t *dma   : DMA parameter
-*              :  typedef struct{
-*              :      uint32_t fifo;    FIFO for using
-*              :      uint32_t buffer;  Start address of transfer source/destination
-*              :      uint32_t bytes;   Transfer size(Byte)
-*              :      uint32_t dir;     Transfer direction(0:Buffer->FIFO, 1:FIFO->Buffer)
-*              :      uint32_t size;    DMA transfer size
-*              :   } USB_FUNCTION_DMA_t;
-*              : uint16_t dfacc ; 0 : cycle steal mode
-*              :                  1 : 16byte continuous mode
-*              :                  2 : 32byte continuous mode
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb1_function_start_dma (USB_FUNCTION_DMA_t * dma, uint16_t dfacc)
-{
-    uint32_t trncount;
-    uint32_t src;
-    uint32_t dst;
-    uint32_t size;
-    uint32_t dir;
-#ifdef CACHE_WRITEBACK
-    uint32_t ptr;
-#endif
-
-    trncount = dma->bytes;
-    dir      = dma->dir;
-
-    if (dir == USB_FUNCTION_FIFO2BUF)
-    {
-        /* DxFIFO determination */
-        dst = dma->buffer;
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-        if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-        {
-            src = (uint32_t)(&USB201.D0FIFO.UINT32);
-        }
-        else
-        {
-            src = (uint32_t)(&USB201.D1FIFO.UINT32);
-        }
-        size = dma->size;
-
-        if (size == 0)
-        {
-            src += 3;       /* byte access  */
-        }
-        else if (size == 1)
-        {
-            src += 2;       /* short access */
-        }
-        else
-        {
-            /* Do Nothing */
-        }
-#else
-        size = dma->size;
-
-        if (size == 2)
-        {
-            /* 32bit access */
-            if (dfacc == 2)
-            {
-                /* 32byte access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    src = (uint32_t)(&USB201.D0FIFOB0);
-                }
-                else
-                {
-                    src = (uint32_t)(&USB201.D1FIFOB0);
-                }
-            }
-            else if (dfacc == 1)
-            {
-                /* 16byte access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    src = (uint32_t)(&USB201.D0FIFOB0);
-                }
-                else
-                {
-                    src = (uint32_t)(&USB201.D1FIFOB0);
-                }
-            }
-            else
-            {
-                /* normal access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    src = (uint32_t)(&USB201.D0FIFO.UINT32);
-                }
-                else
-                {
-                    src = (uint32_t)(&USB201.D1FIFO.UINT32);
-                }
-            }
-        }
-        else if (size == 1)
-        {
-            /* 16bit access */
-            dfacc = 0;      /* force normal access */
-
-            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-            {
-                src = (uint32_t)(&USB201.D0FIFO.UINT32);
-            }
-            else
-            {
-                src = (uint32_t)(&USB201.D1FIFO.UINT32);
-            }
-            src += 2;       /* short access */
-        }
-        else
-        {
-            /* 8bit access */
-            dfacc = 0;      /* force normal access */
-
-            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-            {
-                src = (uint32_t)(&USB201.D0FIFO.UINT32);
-            }
-            else
-            {
-                src = (uint32_t)(&USB201.D1FIFO.UINT32);
-            }
-            src += 3;       /* byte access */
-        }
-#endif
-    }
-    else
-    {
-        /* DxFIFO determination */
-        src = dma->buffer;
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-        if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-        {
-            dst = (uint32_t)(&USB201.D0FIFO.UINT32);
-        }
-        else
-        {
-            dst = (uint32_t)(&USB201.D1FIFO.UINT32);
-        }
-        size = dma->size;
-
-        if (size == 0)
-        {
-            dst += 3;       /* byte access  */
-        }
-        else if (size == 1)
-        {
-            dst += 2;       /* short access */
-        }
-        else
-        {
-            /* Do Nothing */
-        }
-#else
-        size = dma->size;
-
-        if (size == 2)
-        {
-            /* 32bit access */
-            if (dfacc == 2)
-            {
-                /* 32byte access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    dst = (uint32_t)(&USB201.D0FIFOB0);
-                }
-                else
-                {
-                    dst = (uint32_t)(&USB201.D1FIFOB0);
-                }
-            }
-            else if (dfacc == 1)
-            {
-                /* 16byte access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    dst = (uint32_t)(&USB201.D0FIFOB0);
-                }
-                else
-                {
-                    dst = (uint32_t)(&USB201.D1FIFOB0);
-                }
-            }
-            else
-            {
-                /* normal access */
-                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-                {
-                    dst = (uint32_t)(&USB201.D0FIFO.UINT32);
-                }
-                else
-                {
-                    dst = (uint32_t)(&USB201.D1FIFO.UINT32);
-                }
-            }
-        }
-        else if (size == 1)
-        {
-            /* 16bit access */
-            dfacc = 0;      /* force normal access */
-            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-            {
-                dst = (uint32_t)(&USB201.D0FIFO.UINT32);
-            }
-            else
-            {
-                dst = (uint32_t)(&USB201.D1FIFO.UINT32);
-            }
-            dst += 2;       /* short access */
-        }
-        else
-        {
-            /* 8bit access */
-            dfacc = 0;      /* force normal access */
-
-            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-            {
-                dst = (uint32_t)(&USB201.D0FIFO.UINT32);
-            }
-            else
-            {
-                dst = (uint32_t)(&USB201.D1FIFO.UINT32);
-            }
-            dst += 3;       /* byte access  */
-        }
-#endif
-    }
-
-#ifdef CACHE_WRITEBACK
-    ptr = (uint32_t)dma->buffer;
-
-    if ((ptr & 0x20000000ul) == 0)
-    {
-        io_cwb((uint32_t)ptr, (uint32_t)(ptr) + trncount);
-    }
-#endif
-
-    if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
-    {
-        usb1_function_enable_dmac0(src, dst, trncount, size, dir, dma->fifo, dfacc);
-    }
-    else
-    {
-        usb1_function_enable_dmac1(src, dst, trncount, size, dir, dma->fifo, dfacc);
-    }
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_enable_dmac0
-* Description  : Enables DMA transfer on the information specified by the argument.
-* Arguments    : uint32_t src   : src address
-*              : uint32_t dst   : dst address
-*              : uint32_t count : transfer byte
-*              : uint32_t size  : transfer size
-*              : uint32_t dir   : direction
-*              : uint32_t fifo  : FIFO(D0FIFO or D1FIFO)
-*              : uint16_t dfacc : 0 : normal access
-*              :                : 1 : 16byte access
-*              :                : 2 : 32byte access
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_enable_dmac0 (uint32_t src, uint32_t dst, uint32_t count,
-                                        uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
-{
-    dmac_transinfo_t trans_info;
-    uint32_t         request_factor = 0;
-    int32_t          ret;
-
-    /* ==== Variable setting for DMAC initialization ==== */
-    trans_info.src_addr = (uint32_t)src;                /* Start address of transfer source      */
-    trans_info.dst_addr = (uint32_t)dst;                /* Start address of transfer destination */
-    trans_info.count    = (uint32_t)count;              /* Total byte count to be transferred    */
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-    if (size == 0)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_8;        /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_8;        /* Transfer destination transfer size */
-    }
-    else if (size == 1)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_16;       /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_16;       /* Transfer destination transfer size */
-    }
-    else if (size == 2)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_32;       /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_32;       /* Transfer destination transfer size */
-    }
-    else
-    {
-        printf("size error!!\n");
-    }
-#else
-    if (dfacc == 2)
-    {
-        /* 32byte access */
-        trans_info.src_size = DMAC_TRANS_SIZE_256;      /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_256;      /* Transfer destination transfer size */
-    }
-    else if (dfacc == 1)
-    {
-        /* 16byte access */
-        trans_info.src_size = DMAC_TRANS_SIZE_128;      /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_128;      /* Transfer destination transfer size */
-    }
-    else
-    {
-        /* normal access */
-        if (size == 0)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_8;    /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_8;    /* Transfer destination transfer size */
-        }
-        else if (size == 1)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_16;   /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_16;   /* Transfer destination transfer size */
-        }
-        else if (size == 2)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_32;   /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_32;   /* Transfer destination transfer size */
-        }
-        else
-        {
-            printf("size error!!\n");
-        }
-    }
-#endif
-
-    if (dir == USB_FUNCTION_FIFO2BUF)
-    {
-        request_factor =DMAC_REQ_USB1_DMA0_RX;          /* USB_0 channel 0 receive FIFO full               */
-        trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer source address      */
-        trans_info.daddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer destination address */
-    }
-    else if (dir == USB_FUNCTION_BUF2FIFO)
-    {
-        request_factor =DMAC_REQ_USB1_DMA0_TX;          /* USB_0 channel 0 receive FIFO empty              */
-        trans_info.saddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer source address      */
-        trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer destination address */
-    }
-    else
-    {
-        /* Do Nothing */
-    }
-
-    /* ==== DMAC initialization ==== */
-    usb1_function_DMAC3_PeriReqInit((const dmac_transinfo_t *)&trans_info,
-                                    DMAC_MODE_REGISTER,
-                                    DMAC_SAMPLE_SINGLE,
-                                    request_factor,
-                                    0);     /* Don't care DMAC_REQ_REQD is setting in
-                                            usb1_function_DMAC3_PeriReqInit() */
-
-    /* ==== DMAC startup ==== */
-    ret = usb1_function_DMAC3_Open(DMAC_REQ_MODE_PERI);
-    if (ret != 0)
-    {
-        printf("DMAC3 Open error!!\n");
-    }
-
-    return;
-}
-
-/*******************************************************************************
-* Function Name: usb1_function_enable_dmac1
-* Description  : Enables DMA transfer on the information specified by the argument.
-* Arguments    : uint32_t src   : src address
-*              : uint32_t dst   : dst address
-*              : uint32_t count : transfer byte
-*              : uint32_t size  : transfer size
-*              : uint32_t dir   : direction
-*              : uint32_t fifo  : FIFO(D0FIFO or D1FIFO)
-*              : uint16_t dfacc : 0 : normal access
-*              :                : 1 : 16byte access
-*              :                : 2 : 32byte access
-* Return Value : none
-*******************************************************************************/
-static void usb1_function_enable_dmac1 (uint32_t src, uint32_t dst, uint32_t count,
-                                        uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
-{
-    dmac_transinfo_t trans_info;
-    uint32_t         request_factor = 0;
-    int32_t          ret;
-
-    /* ==== Variable setting for DMAC initialization ==== */
-    trans_info.src_addr = (uint32_t)src;                /* Start address of transfer source      */
-    trans_info.dst_addr = (uint32_t)dst;                /* Start address of transfer destination */
-    trans_info.count    = (uint32_t)count;              /* Total byte count to be transferred    */
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
-    if (size == 0)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_8;        /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_8;        /* Transfer destination transfer size */
-    }
-    else if (size == 1)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_16;       /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_16;       /* Transfer destination transfer size */
-    }
-    else if (size == 2)
-    {
-        trans_info.src_size = DMAC_TRANS_SIZE_32;       /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_32;       /* Transfer destination transfer size */
-    }
-    else
-    {
-        printf("size error!!\n");
-    }
-#else
-    if (dfacc == 2)
-    {
-        /* 32byte access */
-        trans_info.src_size = DMAC_TRANS_SIZE_256;      /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_256;      /* Transfer destination transfer size */
-    }
-    else if (dfacc == 1)
-    {
-        /* 16byte access */
-        trans_info.src_size = DMAC_TRANS_SIZE_128;      /* Transfer source transfer size      */
-        trans_info.dst_size = DMAC_TRANS_SIZE_128;      /* Transfer destination transfer size */
-    }
-    else
-    {
-        /* normal access */
-        if (size == 0)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_8;    /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_8;    /* Transfer destination transfer size */
-        }
-        else if (size == 1)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_16;   /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_16;   /* Transfer destination transfer size */
-        }
-        else if (size == 2)
-        {
-            trans_info.src_size = DMAC_TRANS_SIZE_32;   /* Transfer source transfer size      */
-            trans_info.dst_size = DMAC_TRANS_SIZE_32;   /* Transfer destination transfer size */
-        }
-        else
-        {
-            printf("size error!!\n");
-        }
-    }
-#endif
-
-    if (dir == USB_FUNCTION_FIFO2BUF)
-    {
-        request_factor =DMAC_REQ_USB1_DMA1_RX;          /* USB_0 channel 0 receive FIFO full               */
-        trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer source address      */
-        trans_info.daddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer destination address */
-    }
-    else if (dir == USB_FUNCTION_BUF2FIFO)
-    {
-        request_factor =DMAC_REQ_USB1_DMA1_TX;          /* USB_0 channel 0 receive FIFO empty              */
-        trans_info.saddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer source address      */
-        trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer destination address */
-    }
-    else
-    {
-        /* Do Nothing */
-    }
-
-    /* ==== DMAC initialization ==== */
-    usb1_function_DMAC4_PeriReqInit((const dmac_transinfo_t *)&trans_info,
-                                    DMAC_MODE_REGISTER,
-                                    DMAC_SAMPLE_SINGLE,
-                                    request_factor,
-                                    0);     /* Don't care DMAC_REQ_REQD is setting in
-                                            usb1_function_DMAC4_PeriReqInit() */
-
-    /* ==== DMAC startup ==== */
-    ret = usb1_function_DMAC4_Open(DMAC_REQ_MODE_PERI);
-    if (ret != 0)
-    {
-        printf("DMAC4 Open error!!\n");
-    }
-
-    return;
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_stop_dma0
-* Description  : Disables DMA transfer.
-*              : This function should be executed to DMAC executed at the time
-*              : of specification of D0_FIF0_DMA in dma->fifo.
-* Arguments    : none
-* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
-*              : regarding to the bus width.
-*******************************************************************************/
-uint32_t Userdef_USB_usb1_function_stop_dma0 (void)
-{
-    uint32_t remain;
-
-    /* ==== DMAC release ==== */
-    usb1_function_DMAC3_Close(&remain);
-
-    return remain;
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb1_function_stop_dma1
-* Description  : Disables DMA transfer.
-*              : This function should be executed to DMAC executed at the time
-*              : of specification of D1_FIF0_DMA in dma->fifo.
-* Arguments    : none
-* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
-*              : regarding to the bus width.
-*******************************************************************************/
-uint32_t Userdef_USB_usb1_function_stop_dma1 (void)
-{
-    uint32_t remain;
-
-    /* ==== DMAC release ==== */
-    usb1_function_DMAC4_Close(&remain);
-
-    return remain;
-}
-
-/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb_function_setting.h
--- a/USBDevice/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb_function_setting.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,173 +0,0 @@
-/*******************************************************************************
-* DISCLAIMER
-* This software is supplied by Renesas Electronics Corporation and is only
-* intended for use with Renesas products. No other uses are authorized. This
-* software is owned by Renesas Electronics Corporation and is protected under
-* all applicable laws, including copyright laws.
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
-* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
-* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
-* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
-* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
-* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-* Renesas reserves the right, without notice, to make changes to this software
-* and to discontinue the availability of this software. By using this software,
-* you agree to the additional terms and conditions found by accessing the
-* following link:
-* http://www.renesas.com/disclaimer
-* Copyright (C) 2014 - 2015 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-
-#ifndef USB_FUNCTION_SETTING_H
-#define USB_FUNCTION_SETTING_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define USB_FUNCTION_CH                       0
-#define USB_FUNCTION_HISPEED                  1
-
-#if (USB_FUNCTION_CH == 0)
-#include "usb0_function.h"
-#define USB20X                                USB200
-#define USBIX_IRQn                            USBI0_IRQn
-#define g_usbx_function_bit_set               g_usb0_function_bit_set
-#define g_usbx_function_PipeDataSize          g_usb0_function_PipeDataSize
-#define g_usbx_function_data_count            g_usb0_function_data_count
-#define g_usbx_function_PipeTbl               g_usb0_function_PipeTbl
-#define g_usbx_function_DmaStatus             g_usb0_function_DmaStatus
-#define g_usbx_function_pipecfg               g_usb0_function_pipecfg
-#define g_usbx_function_pipe_status           g_usb0_function_pipe_status
-#define g_usbx_function_data_pointer          g_usb0_function_data_pointer
-#define g_usbx_function_pipebuf               g_usb0_function_pipebuf
-#define g_usbx_function_pipemaxp              g_usb0_function_pipemaxp
-#define g_usbx_function_pipeperi              g_usb0_function_pipeperi
-#define g_usbx_function_TestModeFlag          g_usb0_function_TestModeFlag
-#define usbx_function_BRDYInterruptPIPE0      usb0_function_BRDYInterruptPIPE0
-#define usbx_function_BRDYInterrupt           usb0_function_BRDYInterrupt
-#define usbx_function_NRDYInterruptPIPE0      usb0_function_NRDYInterruptPIPE0
-#define usbx_function_NRDYInterrupt           usb0_function_NRDYInterrupt
-#define usbx_function_BEMPInterruptPIPE0      usb0_function_BEMPInterruptPIPE0
-#define usbx_function_BEMPInterrupt           usb0_function_BEMPInterrupt
-#define usbx_function_read_buffer_c           usb0_function_read_buffer_c
-#define usbx_function_set_pid_buf             usb0_function_set_pid_buf
-#define usbx_function_disable_brdy_int        usb0_function_disable_brdy_int
-#define usbx_function_set_pid_stall           usb0_function_set_pid_stall
-#define usbx_function_dma_interrupt_d0fifo    usb0_function_dma_interrupt_d0fifo
-#define usbx_function_read_dma                usb0_function_read_dma
-#define usbx_function_dma_interrupt_d1fifo    usb0_function_dma_interrupt_d1fifo
-#define usbx_function_write_buffer            usb0_function_write_buffer
-#define usbx_function_set_pid_nak             usb0_function_set_pid_nak
-#define usbx_function_get_mbw                 usb0_function_get_mbw
-#define usbx_function_set_curpipe             usb0_function_set_curpipe
-#define usbx_function_aclrm                   usb0_function_aclrm
-#define usbx_function_enable_nrdy_int         usb0_function_enable_nrdy_int
-#define usbx_function_enable_brdy_int         usb0_function_enable_brdy_int
-#define usbx_function_get_pid                 usb0_function_get_pid
-#define usbx_function_get_inbuf               usb0_function_get_inbuf
-#define usbx_function_disable_bemp_int        usb0_function_disable_bemp_int
-#define usbx_function_EpToPipe                usb0_function_EpToPipe
-#define usbx_function_clear_pipe_tbl          usb0_function_clear_pipe_tbl
-#define Userdef_USB_usbx_function_d0fifo_dmaintid Userdef_USB_usb0_function_d0fifo_dmaintid
-#define Userdef_USB_usbx_function_d1fifo_dmaintid Userdef_USB_usb0_function_d1fifo_dmaintid
-#define usbx_function_reset_module            usb0_function_reset_module
-#define usbx_function_init_status             usb0_function_init_status
-#define usbx_function_InitModule              usb0_function_InitModule
-#define usbx_function_clear_alt               usb0_function_clear_alt
-#define usbx_function_set_sqclr               usb0_function_set_sqclr
-#define usbx_api_function_CtrlWriteStart      usb0_api_function_CtrlWriteStart
-#define usbx_api_function_CtrlReadStart       usb0_api_function_CtrlReadStart
-#define usbx_function_write_buffer_c          usb0_function_write_buffer_c
-#define usbx_api_function_check_pipe_status   usb0_api_function_check_pipe_status
-#define usbx_api_function_set_pid_nak         usb0_api_function_set_pid_nak
-#define usbx_api_function_clear_pipe_status   usb0_api_function_clear_pipe_status
-#define usbx_api_function_start_receive_transfer usb0_api_function_start_receive_transfer
-#define usbx_function_read_buffer             usb0_function_read_buffer
-#define usbx_api_function_start_send_transfer usb0_api_function_start_send_transfer
-#define usbx_function_stop_transfer           usb0_function_stop_transfer
-#define usbx_function_clear_pid_stall         usb0_function_clear_pid_stall
-#define usbx_function_CheckVBUStaus           usb0_function_CheckVBUStaus
-#define usbx_function_USB_FUNCTION_Attach     usb0_function_USB_FUNCTION_Attach
-#define usbx_function_USB_FUNCTION_Detach     usb0_function_USB_FUNCTION_Detach
-#define usbx_function_is_hispeed              usb0_function_is_hispeed
-#define usbx_function_ResetDescriptor         usb0_function_ResetDescriptor
-#define usbx_function_USB_FUNCTION_Suspend    usb0_function_USB_FUNCTION_Suspend
-#define usbx_function_USB_FUNCTION_TestMode   usb0_function_USB_FUNCTION_TestMode
-#else
-#include "usb1_function.h"
-#define USB20X                                USB201
-#define USBIX_IRQn                            USBI1_IRQn
-#define g_usbx_function_bit_set               g_usb1_function_bit_set
-#define g_usbx_function_PipeDataSize          g_usb1_function_PipeDataSize
-#define g_usbx_function_data_count            g_usb1_function_data_count
-#define g_usbx_function_PipeTbl               g_usb1_function_PipeTbl
-#define g_usbx_function_DmaStatus             g_usb1_function_DmaStatus
-#define g_usbx_function_pipecfg               g_usb1_function_pipecfg
-#define g_usbx_function_pipe_status           g_usb1_function_pipe_status
-#define g_usbx_function_data_pointer          g_usb1_function_data_pointer
-#define g_usbx_function_pipebuf               g_usb1_function_pipebuf
-#define g_usbx_function_pipemaxp              g_usb1_function_pipemaxp
-#define g_usbx_function_pipeperi              g_usb1_function_pipeperi
-#define g_usbx_function_TestModeFlag          g_usb1_function_TestModeFlag
-#define usbx_function_BRDYInterruptPIPE0      usb1_function_BRDYInterruptPIPE0
-#define usbx_function_BRDYInterrupt           usb1_function_BRDYInterrupt
-#define usbx_function_NRDYInterruptPIPE0      usb1_function_NRDYInterruptPIPE0
-#define usbx_function_NRDYInterrupt           usb1_function_NRDYInterrupt
-#define usbx_function_BEMPInterruptPIPE0      usb1_function_BEMPInterruptPIPE0
-#define usbx_function_BEMPInterrupt           usb1_function_BEMPInterrupt
-#define usbx_function_read_buffer_c           usb1_function_read_buffer_c
-#define usbx_function_set_pid_buf             usb1_function_set_pid_buf
-#define usbx_function_disable_brdy_int        usb1_function_disable_brdy_int
-#define usbx_function_set_pid_stall           usb1_function_set_pid_stall
-#define usbx_function_dma_interrupt_d0fifo    usb1_function_dma_interrupt_d0fifo
-#define usbx_function_read_dma                usb1_function_read_dma
-#define usbx_function_dma_interrupt_d1fifo    usb1_function_dma_interrupt_d1fifo
-#define usbx_function_write_buffer            usb1_function_write_buffer
-#define usbx_function_set_pid_nak             usb1_function_set_pid_nak
-#define usbx_function_get_mbw                 usb1_function_get_mbw
-#define usbx_function_set_curpipe             usb1_function_set_curpipe
-#define usbx_function_aclrm                   usb1_function_aclrm
-#define usbx_function_enable_nrdy_int         usb1_function_enable_nrdy_int
-#define usbx_function_enable_brdy_int         usb1_function_enable_brdy_int
-#define usbx_function_get_pid                 usb1_function_get_pid
-#define usbx_function_get_inbuf               usb1_function_get_inbuf
-#define usbx_function_disable_bemp_int        usb1_function_disable_bemp_int
-#define usbx_function_EpToPipe                usb1_function_EpToPipe
-#define usbx_function_clear_pipe_tbl          usb1_function_clear_pipe_tbl
-#define Userdef_USB_usbx_function_d0fifo_dmaintid Userdef_USB_usb1_function_d0fifo_dmaintid
-#define Userdef_USB_usbx_function_d1fifo_dmaintid Userdef_USB_usb1_function_d1fifo_dmaintid
-#define usbx_function_reset_module            usb1_function_reset_module
-#define usbx_function_init_status             usb1_function_init_status
-#define usbx_function_InitModule              usb1_function_InitModule
-#define usbx_function_clear_alt               usb1_function_clear_alt
-#define usbx_function_set_sqclr               usb1_function_set_sqclr
-#define usbx_api_function_CtrlWriteStart      usb1_api_function_CtrlWriteStart
-#define usbx_api_function_CtrlReadStart       usb1_api_function_CtrlReadStart
-#define usbx_function_write_buffer_c          usb1_function_write_buffer_c
-#define usbx_api_function_check_pipe_status   usb1_api_function_check_pipe_status
-#define usbx_api_function_set_pid_nak         usb1_api_function_set_pid_nak
-#define usbx_api_function_clear_pipe_status   usb1_api_function_clear_pipe_status
-#define usbx_api_function_start_receive_transfer usb1_api_function_start_receive_transfer
-#define usbx_function_read_buffer             usb1_function_read_buffer
-#define usbx_api_function_start_send_transfer usb1_api_function_start_send_transfer
-#define usbx_function_stop_transfer           usb1_function_stop_transfer
-#define usbx_function_clear_pid_stall         usb1_function_clear_pid_stall
-#define usbx_function_CheckVBUStaus           usb1_function_CheckVBUStaus
-#define usbx_function_USB_FUNCTION_Attach     usb1_function_USB_FUNCTION_Attach
-#define usbx_function_USB_FUNCTION_Detach     usb1_function_USB_FUNCTION_Detach
-#define usbx_function_is_hispeed              usb1_function_is_hispeed
-#define usbx_function_ResetDescriptor         usb1_function_ResetDescriptor
-#define usbx_function_USB_FUNCTION_Suspend    usb1_function_USB_FUNCTION_Suspend
-#define usbx_function_USB_FUNCTION_TestMode   usb1_function_USB_FUNCTION_TestMode
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  /* USB_FUNCTION_SETTING_H */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/USBHAL_STM32F103RB.h
--- a/USBDevice/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/USBHAL_STM32F103RB.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,147 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#ifndef USBHAL_STM32F103RB
-#define USBHAL_STM32F103RB
-
-#define USBHAL_IRQn  USB_LP_CAN1_RX0_IRQn
-
-
-#define NB_ENDPOINT  8
-/*  must be multiple of 4 bytes */
-#define MAXTRANSFER_SIZE  0x200
-#define FIFO_USB_RAM_SIZE (MAXTRANSFER_SIZE+MAX_PACKET_SIZE_EP0+MAX_PACKET_SIZE_EP1+MAX_PACKET_SIZE_EP2+MAX_PACKET_SIZE_EP3)
-#if (FIFO_USB_RAM_SIZE > 0x500)
-#error "FIFO dimensioning incorrect"
-#endif
-
-typedef struct
-{
-    USBHAL *inst;
-    void (USBHAL::*bus_reset)(void);
-    void (USBHAL::*sof)(int frame);
-    void (USBHAL::*connect_change)(unsigned int  connected);
-    void (USBHAL::*suspend_change)(unsigned int suspended);
-    void (USBHAL::*ep0_setup)(void);
-    void (USBHAL::*ep0_in)(void);
-    void (USBHAL::*ep0_out)(void);
-    void (USBHAL::*ep0_read)(void);
-    bool (USBHAL::*ep_realise)(uint8_t endpoint, uint32_t maxPacket, uint32_t flags);
-    bool (USBHAL::*epCallback[2*NB_ENDPOINT-2])(void);
-    uint8_t epComplete[8];
-    /*  memorize dummy buffer used for reception */
-    uint32_t pBufRx[MAXTRANSFER_SIZE>>2];
-    uint32_t pBufRx0[MAX_PACKET_SIZE_EP0>>2];
-    gpio_t usb_switch;
-}USBHAL_Private_t;
-
-void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state)
-{
-    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
-    gpio_write(&(priv->usb_switch),!state);
-}
-
-uint32_t HAL_PCDEx_GetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo)
-{
-    return 1024;
-}
-void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
-{
-    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
-    USBHAL *obj= priv->inst;
-    uint32_t sofnum = (hpcd->Instance->FNR) & USB_FNR_FN;
-    void (USBHAL::*func)(int frame) = priv->sof;
-    (obj->*func)(sofnum);
-}
-
-USBHAL * USBHAL::instance;
-
-USBHAL::USBHAL(void)
-{
-    /*  init parameter  */
-    USBHAL_Private_t *HALPriv = new(USBHAL_Private_t);
-    /*  initialized all field of init including 0 field  */
-    /*  constructor does not fill with zero */
-    hpcd.Instance = USB;
-    /*  initialized all field of init including 0 field  */
-    /*  constructor does not fill with zero */
-    memset(&hpcd.Init, 0, sizeof(hpcd.Init));
-    hpcd.Init.dev_endpoints = NB_ENDPOINT;
-    hpcd.Init.ep0_mps =   MAX_PACKET_SIZE_EP0;
-    hpcd.Init.phy_itface = PCD_PHY_EMBEDDED;
-    hpcd.Init.Sof_enable = 1;
-    hpcd.Init.speed = PCD_SPEED_FULL;
-    /*  pass instance for usage inside call back */
-    HALPriv->inst = this;
-    HALPriv->bus_reset = &USBHAL::busReset;
-    HALPriv->suspend_change = &USBHAL::suspendStateChanged;
-    HALPriv->connect_change = &USBHAL::connectStateChanged;
-    HALPriv->sof = &USBHAL::SOF;
-    HALPriv->ep0_setup = &USBHAL::EP0setupCallback;
-    HALPriv->ep_realise = &USBHAL::realiseEndpoint;
-    HALPriv->ep0_in = &USBHAL::EP0in;
-    HALPriv->ep0_out = &USBHAL::EP0out;
-    HALPriv->ep0_read = &USBHAL::EP0read;
-    hpcd.pData = (void*)HALPriv;
-    HALPriv->epCallback[0] = &USBHAL::EP1_OUT_callback;
-    HALPriv->epCallback[1] = &USBHAL::EP1_IN_callback;
-    HALPriv->epCallback[2] = &USBHAL::EP2_OUT_callback;
-    HALPriv->epCallback[3] = &USBHAL::EP2_IN_callback;
-    HALPriv->epCallback[4] = &USBHAL::EP3_OUT_callback;
-    HALPriv->epCallback[5] = &USBHAL::EP3_IN_callback;
-    instance = this;
-
-
-    /* Configure USB VBUS GPIO */
-    gpio_init_out(&HALPriv->usb_switch,PB_14);
-    gpio_mode(&HALPriv->usb_switch,OpenDrain);
-    /* Configure USB FS GPIOs */
-
-    /* Configure DM DP Pins
-     *   - USB-DP (D+ of the USB connector) <======> PA12 (Nucleo board)
-     *   Make sure to connect a 1.5KOhm pull up to USB-DP PA12 pin
-     *   (permanent pull-up)
-     - USB-DM (D- of the USB connector) <======> PA11 (Nucleo board)
-     */
-
-    pin_function(PA_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_MODE_AF_INPUT));
-    pin_function(PA_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_MODE_AF_INPUT));
-
-    __HAL_RCC_USB_CLK_ENABLE();
-
-    hpcd.State = HAL_PCD_STATE_RESET;
-
-    HAL_PCD_Init(&hpcd);
-    /* hardcoded size of FIFO according definition*/
-    HAL_PCDEx_PMAConfig(&hpcd , 0x00 , PCD_SNG_BUF, 0x30);
-    HAL_PCDEx_PMAConfig(&hpcd , 0x80 , PCD_SNG_BUF, 0x70);
-    HAL_PCDEx_PMAConfig(&hpcd , 0x01 , PCD_SNG_BUF, 0x90);
-    HAL_PCDEx_PMAConfig(&hpcd , 0x81 , PCD_SNG_BUF, 0xb0);
-#if 0
-    HAL_PCDEx_PMAConfig(&hpcd , 0x2, PCD_DBL_BUF, 0x018000b0);
-#else
-    HAL_PCDEx_PMAConfig(&hpcd , 0x2, PCD_SNG_BUF, 0x100);
-#endif
-    HAL_PCDEx_PMAConfig(&hpcd , 0x82, PCD_SNG_BUF, 0x120);
-
-    NVIC_SetVector(USBHAL_IRQn,(uint32_t)&_usbisr);
-    NVIC_SetPriority( USBHAL_IRQn, 1);
-
-    HAL_PCD_Start(&hpcd);
-}
-
-#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/USBHAL_STM_TARGET.h
--- a/USBDevice/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/USBHAL_STM_TARGET.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#include "USBHAL_STM32F103RB.h"
-
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/USBHAL_STM_TARGET.h
--- a/USBDevice/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/USBHAL_STM_TARGET.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#include "USBHAL_STM_144_64pins.h"
-
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303ZE/USBHAL_STM32F303ZE.h
--- a/USBDevice/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303ZE/USBHAL_STM32F303ZE.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#ifndef USBHAL_STM32F303ZE_H
-#define USBHAL_STM32F303ZE_H
-#define USBHAL_IRQn  USB_LP_CAN_RX0_IRQn
-/*  must be multiple of 4 bytes */
-#define NB_ENDPOINT 8
-#define MAXTRANSFER_SIZE  0x200
-#define FIFO_USB_RAM_SIZE (MAXTRANSFER_SIZE+MAX_PACKET_SIZE_EP0+MAX_PACKET_SIZE_EP1+MAX_PACKET_SIZE_EP2+MAX_PACKET_SIZE_EP3)
-#if (FIFO_USB_RAM_SIZE > 0x500)
-#error "FIFO dimensioning incorrect"
-#endif
-
-typedef struct
-{
-	USBHAL *inst;
-	void (USBHAL::*bus_reset)(void);
-	void (USBHAL::*sof)(int frame);
-	void (USBHAL::*connect_change)(unsigned int  connected);
-	void (USBHAL::*suspend_change)(unsigned int suspended);
-	void (USBHAL::*ep0_setup)(void);
-	void (USBHAL::*ep0_in)(void);
-	void (USBHAL::*ep0_out)(void);
-	void (USBHAL::*ep0_read)(void);
-	bool (USBHAL::*ep_realise)(uint8_t endpoint, uint32_t maxPacket, uint32_t flags);
-	bool (USBHAL::*epCallback[6])(void);
-	uint8_t epComplete[2*NB_ENDPOINT];
-	/*  memorize dummy buffer used for reception */
-	uint32_t pBufRx[MAXTRANSFER_SIZE>>2];
-	uint32_t pBufRx0[MAX_PACKET_SIZE_EP0>>2];
-    gpio_t usb_switch;
-}USBHAL_Private_t;
-
-uint32_t HAL_PCDEx_GetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo)
-{
-        return 1024;
-}
-
-void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state){
-    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
-    gpio_write(&(priv->usb_switch),state);
-}
-
-void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd) {
-    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
-    USBHAL *obj= priv->inst;
-    uint32_t sofnum = (hpcd->Instance->FNR) & USB_FNR_FN;
-    void (USBHAL::*func)(int frame) = priv->sof;
-    (obj->*func)(sofnum);
-}
-
-USBHAL * USBHAL::instance;
-
-USBHAL::USBHAL(void) {
-    /*  init parameter  */
-    USBHAL_Private_t *HALPriv = new(USBHAL_Private_t);
-    hpcd.Instance = USB;
-    /*  initialized Init to zero (constructor does not zero initialized the
-     *  area */
-    /*  initialized all field of init including 0 field  */
-    /*  constructor does not fill with zero */
-    memset(&hpcd.Init, 0, sizeof(hpcd.Init));
-    hpcd.Init.dev_endpoints = NB_ENDPOINT;
-    hpcd.Init.ep0_mps =   MAX_PACKET_SIZE_EP0;
-    hpcd.Init.phy_itface = PCD_PHY_EMBEDDED;
-    hpcd.Init.Sof_enable = 1;
-    hpcd.Init.speed = PCD_SPEED_FULL;
-    /*  pass instance for usage inside call back */
-    HALPriv->inst = this;
-    HALPriv->bus_reset = &USBHAL::busReset;
-    HALPriv->suspend_change = &USBHAL::suspendStateChanged;
-    HALPriv->connect_change = &USBHAL::connectStateChanged;
-    HALPriv->sof = &USBHAL::SOF;
-    HALPriv->ep0_setup = &USBHAL::EP0setupCallback;
-    HALPriv->ep_realise = &USBHAL::realiseEndpoint;
-    HALPriv->ep0_in = &USBHAL::EP0in;
-    HALPriv->ep0_out = &USBHAL::EP0out;
-    HALPriv->ep0_read = &USBHAL::EP0read;
-    hpcd.pData = (void*)HALPriv;
-    HALPriv->epCallback[0] = &USBHAL::EP1_OUT_callback;
-    HALPriv->epCallback[1] = &USBHAL::EP1_IN_callback;
-    HALPriv->epCallback[2] = &USBHAL::EP2_OUT_callback;
-    HALPriv->epCallback[3] = &USBHAL::EP2_IN_callback;
-    HALPriv->epCallback[4] = &USBHAL::EP3_OUT_callback;
-    HALPriv->epCallback[5] = &USBHAL::EP3_IN_callback;
-    instance = this;
-    __HAL_RCC_GPIOA_CLK_ENABLE();
-    /* Configure USB DM pin. This is optional, and maintained only for user guidance. */
-    pin_function(PA_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF14_USB));
-    pin_function(PA_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF14_USB));
-    __HAL_RCC_GPIOG_CLK_ENABLE();
-    gpio_init_out(&HALPriv->usb_switch,PG_6);
-    /* Enable USB Clock */
-    __HAL_RCC_USB_CLK_ENABLE();
-    /* Enable SYSCFG Clock */
-    __HAL_RCC_SYSCFG_CLK_ENABLE();
-    hpcd.State = HAL_PCD_STATE_RESET;
-    HAL_PCD_Init(&hpcd);
-    /* hardcoded size of FIFO according definition*/
-    HAL_PCDEx_PMAConfig(&hpcd , 0x00 , PCD_SNG_BUF, 0x30);
-    HAL_PCDEx_PMAConfig(&hpcd , 0x80 , PCD_SNG_BUF, 0x70);
-#if 1
-    HAL_PCDEx_PMAConfig(&hpcd , 0x3, PCD_DBL_BUF, 0x018000b0);
-#else
-    HAL_PCDEx_PMAConfig(&hpcd , 0x3, PCD_SNG_BUF, 0x180);
-#endif
-    HAL_PCDEx_PMAConfig(&hpcd , 0x83, PCD_SNG_BUF, 0xb0);
-    NVIC_SetVector(USBHAL_IRQn,(uint32_t)&_usbisr);
-    NVIC_SetPriority(USBHAL_IRQn, 1);
-    HAL_PCD_Start(&hpcd);
-}
-#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303ZE/USBHAL_STM_TARGET.h
--- a/USBDevice/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303ZE/USBHAL_STM_TARGET.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#include "USBHAL_STM32F303ZE.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/USBHAL_STM_TARGET.h
--- a/USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/USBHAL_STM_TARGET.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#include "USBHAL_STM_144_64pins.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/USBHAL_STM_TARGET.h
--- a/USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/USBHAL_STM_TARGET.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#include "USBHAL_STM_144_64pins.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_NUCLEO_F411RE/USBHAL_STM_TARGET.h
--- a/USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_NUCLEO_F411RE/USBHAL_STM_TARGET.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#include "USBHAL_STM_144_64pins.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_NUCLEO_F412ZG/USBHAL_STM_TARGET.h
--- a/USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_NUCLEO_F412ZG/USBHAL_STM_TARGET.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#include "USBHAL_STM_144_64pins.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_NUCLEO_F429ZI/USBHAL_STM_TARGET.h
--- a/USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_NUCLEO_F429ZI/USBHAL_STM_TARGET.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#include "USBHAL_STM_144_64pins.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_NUCLEO_F439ZI/USBHAL_STM_TARGET.h
--- a/USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_NUCLEO_F439ZI/USBHAL_STM_TARGET.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#include "USBHAL_STM_144_64pins.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446RE/USBHAL_STM_TARGET.h
--- a/USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446RE/USBHAL_STM_TARGET.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#include "USBHAL_STM_144_64pins.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446ZE/USBHAL_STM_TARGET.h
--- a/USBDevice/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446ZE/USBHAL_STM_TARGET.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#include "USBHAL_STM_144_64pins.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/USBHAL_STM_TARGET.h
--- a/USBDevice/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/USBHAL_STM_TARGET.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#include "USBHAL_STM_144_64pins.h"
-
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/TARGET_NUCLEO_F756ZG/USBHAL_STM_TARGET.h
--- a/USBDevice/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/TARGET_NUCLEO_F756ZG/USBHAL_STM_TARGET.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#include "USBHAL_STM_144_64pins.h"
-
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/USBHAL_STM_TARGET.h
--- a/USBDevice/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/USBHAL_STM_TARGET.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#include "USBHAL_STM_144_64pins.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/TARGET_DISCO_F769NI/USBHAL_STM32F769NI.h
--- a/USBDevice/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/TARGET_DISCO_F769NI/USBHAL_STM32F769NI.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,147 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#ifndef USBHAL_STM32F769NI_H
-#define USBHAL_STM32F769NI_H
-#define USBHAL_IRQn  OTG_HS_IRQn
-/*  must be multiple of 4 bytes */
-#define NB_ENDPOINT 4
-#define MAXTRANSFER_SIZE  0x200
-#define FIFO_USB_RAM_SIZE (MAXTRANSFER_SIZE+MAX_PACKET_SIZE_EP0+MAX_PACKET_SIZE_EP1+MAX_PACKET_SIZE_EP2+MAX_PACKET_SIZE_EP3)
-#if (FIFO_USB_RAM_SIZE > 0x500)
-#error "FIFO dimensioning incorrect"
-#endif
-
-typedef struct
-{
-    USBHAL *inst;
-    void (USBHAL::*bus_reset)(void);
-    void (USBHAL::*sof)(int frame);
-    void (USBHAL::*connect_change)(unsigned int  connected);
-    void (USBHAL::*suspend_change)(unsigned int suspended);
-    void (USBHAL::*ep0_setup)(void);
-    void (USBHAL::*ep0_in)(void);
-    void (USBHAL::*ep0_out)(void);
-    void (USBHAL::*ep0_read)(void);
-    bool (USBHAL::*ep_realise)(uint8_t endpoint, uint32_t maxPacket, uint32_t flags);
-    bool (USBHAL::*epCallback[2*NB_ENDPOINT-2])(void);
-    /*  memorize dummy buffer used for reception */
-    uint32_t pBufRx[MAXTRANSFER_SIZE>>2];
-    uint32_t pBufRx0[MAX_PACKET_SIZE_EP0>>2];
-    uint8_t epComplete[2*NB_ENDPOINT];
-}USBHAL_Private_t;
-
-uint32_t HAL_PCDEx_GetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo)
-{
-    uint32_t len;
-    if (fifo == 0) len = hpcd->Instance->DIEPTXF0_HNPTXFSIZ>>16;
-    else
-        len =  hpcd->Instance->DIEPTXF[fifo - 1] >> 16;
-    return len*4;
-}
-void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd) 
-{
-    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
-    USBHAL *obj= priv->inst;
-    USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
-    uint32_t sofnum = (USBx_DEVICE->DSTS & USB_OTG_DSTS_FNSOF) >> 8;
-    void (USBHAL::*func)(int frame) = priv->sof;
-    /* fix me  call with same frame number */
-    (obj->*func)(sofnum);
-}
-
-
-USBHAL * USBHAL::instance;
-
-USBHAL::USBHAL(void) {
-    /*  init parameter  */
-    USBHAL_Private_t *HALPriv = new(USBHAL_Private_t);
-    hpcd.Instance = USB_OTG_HS;
-    memset(&hpcd.Init, 0, sizeof(hpcd.Init));
-    hpcd.Init.dev_endpoints = NB_ENDPOINT;
-    hpcd.Init.ep0_mps =   MAX_PACKET_SIZE_EP0;
-    hpcd.Init.phy_itface = PCD_PHY_ULPI;
-    hpcd.Init.Sof_enable = 0;
-
-    hpcd.Init.speed = PCD_SPEED_HIGH;
-    //hpcd.Init.vbus_sensing_enable = 0;
-    //hpcd.Init.lpm_enable = 0;
-    /*  pass instance for usage inside call back */
-    HALPriv->inst = this;
-    HALPriv->bus_reset = &USBHAL::busReset;
-    HALPriv->suspend_change = &USBHAL::suspendStateChanged;
-    HALPriv->connect_change = &USBHAL::connectStateChanged;
-    HALPriv->sof = &USBHAL::SOF;
-    HALPriv->ep0_setup = &USBHAL::EP0setupCallback;
-    HALPriv->ep_realise = &USBHAL::realiseEndpoint;
-    HALPriv->ep0_in = &USBHAL::EP0in;
-    HALPriv->ep0_out = &USBHAL::EP0out;
-    HALPriv->ep0_read = &USBHAL::EP0read;
-    hpcd.pData = (void*)HALPriv;
-    HALPriv->epCallback[0] = &USBHAL::EP1_OUT_callback;
-    HALPriv->epCallback[1] = &USBHAL::EP1_IN_callback;
-    HALPriv->epCallback[2] = &USBHAL::EP2_OUT_callback;
-    HALPriv->epCallback[3] = &USBHAL::EP2_IN_callback;
-    HALPriv->epCallback[4] = &USBHAL::EP3_OUT_callback;
-    HALPriv->epCallback[5] = &USBHAL::EP3_IN_callback;
-    instance = this;
-    /* Enable power and clocking */
-    __HAL_RCC_GPIOA_CLK_ENABLE();
-    __HAL_RCC_GPIOB_CLK_ENABLE();
-    __HAL_RCC_GPIOC_CLK_ENABLE();
-    __HAL_RCC_GPIOH_CLK_ENABLE();
-    __HAL_RCC_GPIOI_CLK_ENABLE();
-
-    pin_function(PA_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // CLK
-    pin_function(PA_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // D0
-
-    pin_function(PB_0, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // D1
-    pin_function(PB_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // D2
-    pin_function(PB_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // D3
-    pin_function(PB_10, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // D4
-    pin_function(PB_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // D5
-    pin_function(PB_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // D6
-    pin_function(PB_13, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // D7
-
-    pin_function(PC_0, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // STP
-    pin_function(PH_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // NXT
-    pin_function(PI_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // DIR
-
-    __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE();
-    __HAL_RCC_USB_OTG_HS_CLK_ENABLE();
-
-    __HAL_RCC_SYSCFG_CLK_ENABLE();
-    hpcd.State = HAL_PCD_STATE_RESET;
-    HAL_PCD_Init(&hpcd);
-    /* 1.25kbytes */
-    /* min value 16 (= 16 x 4 bytes) */
-    /*  max value 256 (= 1K bytes ) */
-    /*  maximum sum is 0x140 */
-    HAL_PCDEx_SetRxFiFo(&hpcd, (MAXTRANSFER_SIZE/4));
-    /*  bulk/int 64 bytes in FS  */
-    HAL_PCDEx_SetTxFiFo(&hpcd, 0, (MAX_PACKET_SIZE_EP0/4)+1);
-    /*  bulk/int bytes in FS */
-    HAL_PCDEx_SetTxFiFo(&hpcd, 1, (MAX_PACKET_SIZE_EP1/4)+1);
-    HAL_PCDEx_SetTxFiFo(&hpcd, 2, (MAX_PACKET_SIZE_EP2/4));
-    /* ISOchronous */
-    HAL_PCDEx_SetTxFiFo(&hpcd, 3, (MAX_PACKET_SIZE_EP3/4));
-    NVIC_SetVector(USBHAL_IRQn, (uint32_t)&_usbisr);
-    NVIC_SetPriority(USBHAL_IRQn, 1);
-    HAL_PCD_Start(&hpcd);
-}
-#endif
-
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/TARGET_DISCO_F769NI/USBHAL_STM_TARGET.h
--- a/USBDevice/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/TARGET_DISCO_F769NI/USBHAL_STM_TARGET.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#include "USBHAL_STM32F769NI.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L053C8/USBHAL_STM32L053C8.h
--- a/USBDevice/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L053C8/USBHAL_STM32L053C8.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,134 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#ifndef USBHAL_STM32L053C8_H
-#define USBHAL_STM32L053C8_H
-
-#define USBHAL_IRQn  USB_IRQn
-
-/*  must be multiple of 4 bytes */
-#define NB_ENDPOINT 8
-#define MAXTRANSFER_SIZE  0x200
-#define FIFO_USB_RAM_SIZE (MAXTRANSFER_SIZE+MAX_PACKET_SIZE_EP0+MAX_PACKET_SIZE_EP1+MAX_PACKET_SIZE_EP2+MAX_PACKET_SIZE_EP3)
-#if (FIFO_USB_RAM_SIZE > 0x500)
-#error "FIFO dimensioning incorrect"
-#endif
-
-typedef struct
-{
-	USBHAL *inst;
-	void (USBHAL::*bus_reset)(void);
-	void (USBHAL::*sof)(int frame);
-	void (USBHAL::*connect_change)(unsigned int  connected);
-	void (USBHAL::*suspend_change)(unsigned int suspended);
-	void (USBHAL::*ep0_setup)(void);
-	void (USBHAL::*ep0_in)(void);
-	void (USBHAL::*ep0_out)(void);
-	void (USBHAL::*ep0_read)(void);
-	bool (USBHAL::*ep_realise)(uint8_t endpoint, uint32_t maxPacket, uint32_t flags);
-	bool (USBHAL::*epCallback[6])(void);
-	uint8_t epComplete[2*NB_ENDPOINT];
-	/*  memorize dummy buffer used for reception */
-	uint32_t pBufRx[MAXTRANSFER_SIZE>>2];
-	uint32_t pBufRx0[MAX_PACKET_SIZE_EP0>>2];
-    gpio_t usb_switch;
-}USBHAL_Private_t;
-
-uint32_t HAL_PCDEx_GetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo)
-{
-        return 1024;
-}
-
-void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state)
-{
-    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
-    gpio_write(&(priv->usb_switch),state);
-}
-
-void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
-{
-    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
-    USBHAL *obj= priv->inst;
-    uint32_t sofnum = (hpcd->Instance->FNR) & USB_FNR_FN;
-    void (USBHAL::*func)(int frame) = priv->sof;
-    (obj->*func)(sofnum);
-}
-
-USBHAL * USBHAL::instance;
-
-USBHAL::USBHAL(void)
-{
-    /*  init parameter  */
-    USBHAL_Private_t *HALPriv = new(USBHAL_Private_t);
-    hpcd.Instance = USB;
-    /*  initialized Init to zero (constructor does not zero initialized the
-     *  area */
-    /*  initialized all field of init including 0 field  */
-    /*  constructor does not fill with zero */
-    memset(&hpcd.Init, 0, sizeof(hpcd.Init));
-    hpcd.Init.dev_endpoints = NB_ENDPOINT;
-    hpcd.Init.ep0_mps =   MAX_PACKET_SIZE_EP0;
-    hpcd.Init.phy_itface = PCD_PHY_EMBEDDED;
-    hpcd.Init.Sof_enable = 1;
-    hpcd.Init.speed = PCD_SPEED_FULL;
-    /*  pass instance for usage inside call back */
-    HALPriv->inst = this;
-    HALPriv->bus_reset = &USBHAL::busReset;
-    HALPriv->suspend_change = &USBHAL::suspendStateChanged;
-    HALPriv->connect_change = &USBHAL::connectStateChanged;
-    HALPriv->sof = &USBHAL::SOF;
-    HALPriv->ep0_setup = &USBHAL::EP0setupCallback;
-    HALPriv->ep_realise = &USBHAL::realiseEndpoint;
-    HALPriv->ep0_in = &USBHAL::EP0in;
-    HALPriv->ep0_out = &USBHAL::EP0out;
-    HALPriv->ep0_read = &USBHAL::EP0read;
-    hpcd.pData = (void*)HALPriv;
-    HALPriv->epCallback[0] = &USBHAL::EP1_OUT_callback;
-    HALPriv->epCallback[1] = &USBHAL::EP1_IN_callback;
-    HALPriv->epCallback[2] = &USBHAL::EP2_OUT_callback;
-    HALPriv->epCallback[3] = &USBHAL::EP2_IN_callback;
-    HALPriv->epCallback[4] = &USBHAL::EP3_OUT_callback;
-    HALPriv->epCallback[5] = &USBHAL::EP3_IN_callback;
-    instance = this;
-    
-    /* Configure USB DM pin. This is optional, and maintained only for user guidance. */
-    __HAL_RCC_GPIOA_CLK_ENABLE();
-    pin_function(PA_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_USB));
-    pin_function(PA_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_USB));
-    
-    /* Enable USB Clock */
-    __HAL_RCC_USB_CLK_ENABLE();
-    
-    /* Enable SYSCFG Clock */
-    __HAL_RCC_SYSCFG_CLK_ENABLE();
-    hpcd.State = HAL_PCD_STATE_RESET;
-    HAL_PCD_Init(&hpcd);
-    
-    /* hardcoded size of FIFO according definition*/
-    HAL_PCDEx_PMAConfig(&hpcd , 0x00 , PCD_SNG_BUF, 0x30);
-    HAL_PCDEx_PMAConfig(&hpcd , 0x80 , PCD_SNG_BUF, 0x70);
-#if 1
-    HAL_PCDEx_PMAConfig(&hpcd , 0x3, PCD_DBL_BUF, 0x018000b0);
-#else
-    HAL_PCDEx_PMAConfig(&hpcd , 0x3, PCD_SNG_BUF, 0x180);
-#endif
-    HAL_PCDEx_PMAConfig(&hpcd , 0x83, PCD_SNG_BUF, 0xb0);
-    NVIC_SetVector(USBHAL_IRQn,(uint32_t)&_usbisr);
-    NVIC_SetPriority(USBHAL_IRQn, 1);
-    HAL_PCD_Start(&hpcd);
-}
-#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L053C8/USBHAL_STM_TARGET.h
--- a/USBDevice/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L053C8/USBHAL_STM_TARGET.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#include "USBHAL_STM32L053C8.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L072CZ_LRWAN1/USBHAL_STM32L072CZ.h
--- a/USBDevice/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L072CZ_LRWAN1/USBHAL_STM32L072CZ.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,131 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#ifndef USBHAL_STM32L072CZ_H
-#define USBHAL_STM32L072CZ_H
-
-#define USBHAL_IRQn  USB_IRQn
-
-/*  must be multiple of 4 bytes */
-#define NB_ENDPOINT 8
-#define MAXTRANSFER_SIZE  0x200
-#define FIFO_USB_RAM_SIZE (MAXTRANSFER_SIZE+MAX_PACKET_SIZE_EP0+MAX_PACKET_SIZE_EP1+MAX_PACKET_SIZE_EP2+MAX_PACKET_SIZE_EP3)
-#if (FIFO_USB_RAM_SIZE > 0x500)
-#error "FIFO dimensioning incorrect"
-#endif
-
-typedef struct
-{
-	USBHAL *inst;
-	void (USBHAL::*bus_reset)(void);
-	void (USBHAL::*sof)(int frame);
-	void (USBHAL::*connect_change)(unsigned int  connected);
-	void (USBHAL::*suspend_change)(unsigned int suspended);
-	void (USBHAL::*ep0_setup)(void);
-	void (USBHAL::*ep0_in)(void);
-	void (USBHAL::*ep0_out)(void);
-	void (USBHAL::*ep0_read)(void);
-	bool (USBHAL::*ep_realise)(uint8_t endpoint, uint32_t maxPacket, uint32_t flags);
-	bool (USBHAL::*epCallback[6])(void);
-	uint8_t epComplete[2*NB_ENDPOINT];
-	/*  memorize dummy buffer used for reception */
-	uint32_t pBufRx[MAXTRANSFER_SIZE>>2];
-	uint32_t pBufRx0[MAX_PACKET_SIZE_EP0>>2];
-    gpio_t usb_switch;
-}USBHAL_Private_t;
-
-uint32_t HAL_PCDEx_GetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo)
-{
-        return 1024;
-}
-
-void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state)
-{
-    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
-    gpio_write(&(priv->usb_switch),state);
-}
-
-void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
-{
-    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
-    USBHAL *obj= priv->inst;
-    uint32_t sofnum = (hpcd->Instance->FNR) & USB_FNR_FN;
-    void (USBHAL::*func)(int frame) = priv->sof;
-    (obj->*func)(sofnum);
-}
-
-USBHAL * USBHAL::instance;
-
-USBHAL::USBHAL(void)
-{
-    /*  init parameter  */
-    USBHAL_Private_t *HALPriv = new(USBHAL_Private_t);
-    hpcd.Instance = USB;
-    /*  initialized Init to zero (constructor does not zero initialized the
-     *  area */
-    /*  initialized all field of init including 0 field  */
-    /*  constructor does not fill with zero */
-    memset(&hpcd.Init, 0, sizeof(hpcd.Init));
-    hpcd.Init.dev_endpoints = NB_ENDPOINT;
-    hpcd.Init.ep0_mps =   MAX_PACKET_SIZE_EP0;
-    hpcd.Init.phy_itface = PCD_PHY_EMBEDDED;
-    hpcd.Init.Sof_enable = 1;
-    hpcd.Init.speed = PCD_SPEED_FULL;
-    /*  pass instance for usage inside call back */
-    HALPriv->inst = this;
-    HALPriv->bus_reset = &USBHAL::busReset;
-    HALPriv->suspend_change = &USBHAL::suspendStateChanged;
-    HALPriv->connect_change = &USBHAL::connectStateChanged;
-    HALPriv->sof = &USBHAL::SOF;
-    HALPriv->ep0_setup = &USBHAL::EP0setupCallback;
-    HALPriv->ep_realise = &USBHAL::realiseEndpoint;
-    HALPriv->ep0_in = &USBHAL::EP0in;
-    HALPriv->ep0_out = &USBHAL::EP0out;
-    HALPriv->ep0_read = &USBHAL::EP0read;
-    hpcd.pData = (void*)HALPriv;
-    HALPriv->epCallback[0] = &USBHAL::EP1_OUT_callback;
-    HALPriv->epCallback[1] = &USBHAL::EP1_IN_callback;
-    HALPriv->epCallback[2] = &USBHAL::EP2_OUT_callback;
-    HALPriv->epCallback[3] = &USBHAL::EP2_IN_callback;
-    HALPriv->epCallback[4] = &USBHAL::EP3_OUT_callback;
-    HALPriv->epCallback[5] = &USBHAL::EP3_IN_callback;
-    instance = this;
-    
-    /* Configure USB DM pin. This is optional, and maintained only for user guidance. */
-    __HAL_RCC_GPIOA_CLK_ENABLE();
-    pin_function(PA_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_USB));
-    pin_function(PA_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_USB));
-    
-    /* Enable USB Clock */
-    __HAL_RCC_USB_CLK_ENABLE();
-    
-    /* Enable SYSCFG Clock */
-    __HAL_RCC_SYSCFG_CLK_ENABLE();
-    hpcd.State = HAL_PCD_STATE_RESET;
-    HAL_PCD_Init(&hpcd);
-    
-    /* hardcoded size of FIFO according definition*/
-    HAL_PCDEx_PMAConfig(&hpcd , 0x00 , PCD_SNG_BUF, 0x30);
-    HAL_PCDEx_PMAConfig(&hpcd , 0x80 , PCD_SNG_BUF, 0x70);
-    HAL_PCDEx_PMAConfig(&hpcd , 0x3, PCD_DBL_BUF, 0x018000b0);
-    HAL_PCDEx_PMAConfig(&hpcd , 0x83, PCD_SNG_BUF, 0xb0);
-
-    NVIC_SetVector(USBHAL_IRQn,(uint32_t)&_usbisr);
-    NVIC_SetPriority(USBHAL_IRQn, 1);
-    HAL_PCD_Start(&hpcd);
-}
-#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L072CZ_LRWAN1/USBHAL_STM_TARGET.h
--- a/USBDevice/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L072CZ_LRWAN1/USBHAL_STM_TARGET.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#include "USBHAL_STM32L072CZ.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/USBHAL_STM32L475VG.h
--- a/USBDevice/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/USBHAL_STM32L475VG.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,145 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#ifndef USBHAL_STM32L475VG
-#define USBHAL_STM32L475VG
-
-#define USBHAL_IRQn  OTG_FS_IRQn
-
-
-#define NB_ENDPOINT  4
-/*  must be multiple of 4 bytes */
-#define MAXTRANSFER_SIZE  0x200
-#define FIFO_USB_RAM_SIZE (MAXTRANSFER_SIZE+MAX_PACKET_SIZE_EP0+MAX_PACKET_SIZE_EP1+MAX_PACKET_SIZE_EP2+MAX_PACKET_SIZE_EP3)
-#if (FIFO_USB_RAM_SIZE > 0x500)
-#error "FIFO dimensioning incorrect"
-#endif
-
-typedef struct
-{
-    USBHAL *inst;
-    void (USBHAL::*bus_reset)(void);
-    void (USBHAL::*sof)(int frame);
-    void (USBHAL::*connect_change)(unsigned int  connected);
-    void (USBHAL::*suspend_change)(unsigned int suspended);
-    void (USBHAL::*ep0_setup)(void);
-    void (USBHAL::*ep0_in)(void);
-    void (USBHAL::*ep0_out)(void);
-    void (USBHAL::*ep0_read)(void);
-    bool (USBHAL::*ep_realise)(uint8_t endpoint, uint32_t maxPacket, uint32_t flags);
-    bool (USBHAL::*epCallback[2*NB_ENDPOINT-2])(void);
-    uint8_t epComplete[8];
-    /*  memorize dummy buffer used for reception */
-    uint32_t pBufRx[MAXTRANSFER_SIZE>>2];
-    uint32_t pBufRx0[MAX_PACKET_SIZE_EP0>>2];
-}USBHAL_Private_t;
-
-uint32_t HAL_PCDEx_GetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo)
-{
-    uint32_t len;
-    if (fifo == 0) len = hpcd->Instance->DIEPTXF0_HNPTXFSIZ>>16;
-    else
-        len =  hpcd->Instance->DIEPTXF[fifo - 1] >> 16;
-    return len*4;
-}
-void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd) {
-    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
-    USBHAL *obj= priv->inst;
-    USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
-    uint32_t sofnum = (USBx_DEVICE->DSTS & USB_OTG_DSTS_FNSOF) >> 8;
-    void (USBHAL::*func)(int frame) = priv->sof;
-    /* fix me  call with same frame number */
-    (obj->*func)(sofnum);
-}
-
-USBHAL * USBHAL::instance;
-
-USBHAL::USBHAL(void) {
-    /*  init parameter  */
-    USBHAL_Private_t *HALPriv = new(USBHAL_Private_t);
-    /*  initialized all field of init including 0 field  */
-    /*  constructor does not fill with zero */
-    hpcd.Instance = USB_OTG_FS;
-    /*  initialized all field of init including 0 field  */
-    /*  constructor does not fill with zero */
-    memset(&hpcd.Init, 0, sizeof(hpcd.Init));
-    hpcd.Init.dev_endpoints = NB_ENDPOINT;
-    hpcd.Init.ep0_mps =   MAX_PACKET_SIZE_EP0;
-    hpcd.Init.phy_itface = PCD_PHY_EMBEDDED;
-    hpcd.Init.Sof_enable = 1;
-    hpcd.Init.speed = PCD_SPEED_FULL;
-    /*  pass instance for usage inside call back */
-    HALPriv->inst = this;
-    HALPriv->bus_reset = &USBHAL::busReset;
-    HALPriv->suspend_change = &USBHAL::suspendStateChanged;
-    HALPriv->connect_change = &USBHAL::connectStateChanged;
-    HALPriv->sof = &USBHAL::SOF;
-    HALPriv->ep0_setup = &USBHAL::EP0setupCallback;
-    HALPriv->ep_realise = &USBHAL::realiseEndpoint;
-    HALPriv->ep0_in = &USBHAL::EP0in;
-    HALPriv->ep0_out = &USBHAL::EP0out;
-    HALPriv->ep0_read = &USBHAL::EP0read;
-    hpcd.pData = (void*)HALPriv;
-    HALPriv->epCallback[0] = &USBHAL::EP1_OUT_callback;
-    HALPriv->epCallback[1] = &USBHAL::EP1_IN_callback;
-    HALPriv->epCallback[2] = &USBHAL::EP2_OUT_callback;
-    HALPriv->epCallback[3] = &USBHAL::EP2_IN_callback;
-    HALPriv->epCallback[4] = &USBHAL::EP3_OUT_callback;
-    HALPriv->epCallback[5] = &USBHAL::EP3_IN_callback;
-    instance = this;
-
-    __HAL_RCC_PWR_CLK_ENABLE();
-
-    HAL_PWREx_EnableVddUSB(); 
-    /* Configure USB VBUS GPIO */
-    __HAL_RCC_GPIOC_CLK_ENABLE();
-
-    /* Configure USB FS GPIOs */
-    __HAL_RCC_GPIOA_CLK_ENABLE();
-
-    /* Configure DM DP Pins */
-    pin_function(PA_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
-    pin_function(PA_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
-
-    /* Configure VBUS Pin */
-    pin_function(PC_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
-
-    __HAL_RCC_USB_OTG_FS_CLK_ENABLE();
-
-    hpcd.State = HAL_PCD_STATE_RESET;
-
-    HAL_PCD_Init(&hpcd);
-    /* 1.25kbytes */
-    /* min value 16 (= 16 x 4 bytes) */
-    /*  max value 256 (= 1K bytes ) */
-    /*  maximum sum is 0x140 */
-    HAL_PCDEx_SetRxFiFo(&hpcd, (MAXTRANSFER_SIZE/4));
-    /*  bulk/int 64 bytes in FS  */
-    HAL_PCDEx_SetTxFiFo(&hpcd, 0, (MAX_PACKET_SIZE_EP0/4)+1);
-    /*  bulk/int bytes in FS */
-    HAL_PCDEx_SetTxFiFo(&hpcd, 1, (MAX_PACKET_SIZE_EP1/4)+1);
-    HAL_PCDEx_SetTxFiFo(&hpcd, 2, (MAX_PACKET_SIZE_EP2/4));
-    /* ISOchronous */
-    HAL_PCDEx_SetTxFiFo(&hpcd, 3, (MAX_PACKET_SIZE_EP3/4));
-
-    NVIC_SetVector(USBHAL_IRQn,(uint32_t)&_usbisr);
-    NVIC_SetPriority( USBHAL_IRQn, 1);
-
-    HAL_PCD_Start(&hpcd);
-}
-
-#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/USBHAL_STM_TARGET.h
--- a/USBDevice/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/USBHAL_STM_TARGET.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#include "USBHAL_STM32L475VG.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_DISCO_L476VG/USBHAL_STM32L476VG.h
--- a/USBDevice/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_DISCO_L476VG/USBHAL_STM32L476VG.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,145 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#ifndef USBHAL_STM32L476VG
-#define USBHAL_STM32L476VG
-
-#define USBHAL_IRQn  OTG_FS_IRQn
-
-
-#define NB_ENDPOINT  4
-/*  must be multiple of 4 bytes */
-#define MAXTRANSFER_SIZE  0x200
-#define FIFO_USB_RAM_SIZE (MAXTRANSFER_SIZE+MAX_PACKET_SIZE_EP0+MAX_PACKET_SIZE_EP1+MAX_PACKET_SIZE_EP2+MAX_PACKET_SIZE_EP3)
-#if (FIFO_USB_RAM_SIZE > 0x500)
-#error "FIFO dimensioning incorrect"
-#endif
-
-typedef struct
-{
-    USBHAL *inst;
-    void (USBHAL::*bus_reset)(void);
-    void (USBHAL::*sof)(int frame);
-    void (USBHAL::*connect_change)(unsigned int  connected);
-    void (USBHAL::*suspend_change)(unsigned int suspended);
-    void (USBHAL::*ep0_setup)(void);
-    void (USBHAL::*ep0_in)(void);
-    void (USBHAL::*ep0_out)(void);
-    void (USBHAL::*ep0_read)(void);
-    bool (USBHAL::*ep_realise)(uint8_t endpoint, uint32_t maxPacket, uint32_t flags);
-    bool (USBHAL::*epCallback[2*NB_ENDPOINT-2])(void);
-    uint8_t epComplete[8];
-    /*  memorize dummy buffer used for reception */
-    uint32_t pBufRx[MAXTRANSFER_SIZE>>2];
-    uint32_t pBufRx0[MAX_PACKET_SIZE_EP0>>2];
-}USBHAL_Private_t;
-
-uint32_t HAL_PCDEx_GetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo)
-{
-    uint32_t len;
-    if (fifo == 0) len = hpcd->Instance->DIEPTXF0_HNPTXFSIZ>>16;
-    else
-        len =  hpcd->Instance->DIEPTXF[fifo - 1] >> 16;
-    return len*4;
-}
-void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd) {
-    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
-    USBHAL *obj= priv->inst;
-    USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
-    uint32_t sofnum = (USBx_DEVICE->DSTS & USB_OTG_DSTS_FNSOF) >> 8;
-    void (USBHAL::*func)(int frame) = priv->sof;
-    /* fix me  call with same frame number */
-    (obj->*func)(sofnum);
-}
-
-USBHAL * USBHAL::instance;
-
-USBHAL::USBHAL(void) {
-    /*  init parameter  */
-    USBHAL_Private_t *HALPriv = new(USBHAL_Private_t);
-    /*  initialized all field of init including 0 field  */
-    /*  constructor does not fill with zero */
-    hpcd.Instance = USB_OTG_FS;
-    /*  initialized all field of init including 0 field  */
-    /*  constructor does not fill with zero */
-    memset(&hpcd.Init, 0, sizeof(hpcd.Init));
-    hpcd.Init.dev_endpoints = NB_ENDPOINT;
-    hpcd.Init.ep0_mps =   MAX_PACKET_SIZE_EP0;
-    hpcd.Init.phy_itface = PCD_PHY_EMBEDDED;
-    hpcd.Init.Sof_enable = 1;
-    hpcd.Init.speed = PCD_SPEED_FULL;
-    /*  pass instance for usage inside call back */
-    HALPriv->inst = this;
-    HALPriv->bus_reset = &USBHAL::busReset;
-    HALPriv->suspend_change = &USBHAL::suspendStateChanged;
-    HALPriv->connect_change = &USBHAL::connectStateChanged;
-    HALPriv->sof = &USBHAL::SOF;
-    HALPriv->ep0_setup = &USBHAL::EP0setupCallback;
-    HALPriv->ep_realise = &USBHAL::realiseEndpoint;
-    HALPriv->ep0_in = &USBHAL::EP0in;
-    HALPriv->ep0_out = &USBHAL::EP0out;
-    HALPriv->ep0_read = &USBHAL::EP0read;
-    hpcd.pData = (void*)HALPriv;
-    HALPriv->epCallback[0] = &USBHAL::EP1_OUT_callback;
-    HALPriv->epCallback[1] = &USBHAL::EP1_IN_callback;
-    HALPriv->epCallback[2] = &USBHAL::EP2_OUT_callback;
-    HALPriv->epCallback[3] = &USBHAL::EP2_IN_callback;
-    HALPriv->epCallback[4] = &USBHAL::EP3_OUT_callback;
-    HALPriv->epCallback[5] = &USBHAL::EP3_IN_callback;
-    instance = this;
-
-    __HAL_RCC_PWR_CLK_ENABLE();
-
-    HAL_PWREx_EnableVddUSB(); 
-    /* Configure USB VBUS GPIO */
-    __HAL_RCC_GPIOC_CLK_ENABLE();
-
-    /* Configure USB FS GPIOs */
-    __HAL_RCC_GPIOA_CLK_ENABLE();
-
-    /* Configure DM DP Pins */
-    pin_function(PA_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
-    pin_function(PA_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
-
-    /* Configure VBUS Pin */
-    pin_function(PC_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
-
-    __HAL_RCC_USB_OTG_FS_CLK_ENABLE();
-
-    hpcd.State = HAL_PCD_STATE_RESET;
-
-    HAL_PCD_Init(&hpcd);
-    /* 1.25kbytes */
-    /* min value 16 (= 16 x 4 bytes) */
-    /*  max value 256 (= 1K bytes ) */
-    /*  maximum sum is 0x140 */
-    HAL_PCDEx_SetRxFiFo(&hpcd, (MAXTRANSFER_SIZE/4));
-    /*  bulk/int 64 bytes in FS  */
-    HAL_PCDEx_SetTxFiFo(&hpcd, 0, (MAX_PACKET_SIZE_EP0/4)+1);
-    /*  bulk/int bytes in FS */
-    HAL_PCDEx_SetTxFiFo(&hpcd, 1, (MAX_PACKET_SIZE_EP1/4)+1);
-    HAL_PCDEx_SetTxFiFo(&hpcd, 2, (MAX_PACKET_SIZE_EP2/4));
-    /* ISOchronous */
-    HAL_PCDEx_SetTxFiFo(&hpcd, 3, (MAX_PACKET_SIZE_EP3/4));
-
-    NVIC_SetVector(USBHAL_IRQn,(uint32_t)&_usbisr);
-    NVIC_SetPriority( USBHAL_IRQn, 1);
-
-    HAL_PCD_Start(&hpcd);
-}
-
-#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_DISCO_L476VG/USBHAL_STM_TARGET.h
--- a/USBDevice/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_DISCO_L476VG/USBHAL_STM_TARGET.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#include "USBHAL_STM32L476VG.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/USBHAL_STM32.cpp
--- a/USBDevice/TARGET_STM/USBHAL_STM32.cpp	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,332 +0,0 @@
-/* Copyright (c) 2010-2011 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-/* TARGET NOT STM does not support this HAL */
-#ifndef TARGET_STM
-#define USBSTM_HAL_UNSUPPORTED
-#endif
-/* F4 famlily wihtout USB_STM_HAL use another HAL*/
-#if defined(TARGET_STM) && defined(TARGET_STM32F4) && !defined(USB_STM_HAL)
-#define USBSTM_HAL_UNSUPPORTED
-#endif
-
-#ifndef USBSTM_HAL_UNSUPPORTED
-#include "USBHAL.h"
-#include "pinmap.h"
-/* mbed endpoint definition to hal definition   */
-#define EP_ADDR(ep) (((ep) >> 1)|((ep) & 1) << 7)
-/* from hal definition to mbed definition */
-#define ADDR_EPIN(ep) (((ep) << 1) | 1)
-#define ADDR_EPOUT(ep) (((ep) << 1))
-/* id to detect if rx buffer is used or not  */
-
-#include "USBHAL_STM_TARGET.h"
-
-
-/*  this call at device reception completion on a Out Enpoint  */
-void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
-{
-    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
-    USBHAL *obj= priv->inst;
-    uint8_t endpoint = ADDR_EPOUT(epnum);
-    priv->epComplete[endpoint] = 1;
-    /* -2 endpoint 0 In out are not in call back list */
-    if (epnum) {
-        bool (USBHAL::*func)(void) = priv->epCallback[endpoint-2];
-        (obj->*func)();
-    } else {
-        void (USBHAL::*func)(void) = priv->ep0_out;
-        (obj->*func)();
-    }
-}
-
-/*  this is call at device transmission completion on In endpoint */
-void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
-{
-    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
-    USBHAL *obj= priv->inst;
-    uint8_t endpoint = ADDR_EPIN(epnum);
-    priv->epComplete[endpoint] = 1;
-    /*  -2 endpoint 0 In out are not in call back list */
-    if (epnum) {
-        bool (USBHAL::*func)(void) = priv->epCallback[endpoint-2];
-        (obj->*func)();
-    } else {
-        void (USBHAL::*func)(void) = priv->ep0_in;
-        (obj->*func)();
-    }
-}
-/*  This is call at device set up reception  */
-void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd)
-{
-    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
-    USBHAL *obj= priv->inst;
-    void (USBHAL::*func)(void)=priv->ep0_setup;
-    void (USBHAL::*func1)(void)=priv->ep0_read;
-    (obj->*func)();
-    (obj->*func1)();
-}
-
-void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd)
-{
-    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
-    USBHAL *obj= priv->inst;
-    void (USBHAL::*func)(unsigned int suspended) = priv->suspend_change;
-    (obj->*func)(1);
-}
-
-void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd)
-{
-    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
-    USBHAL *obj= priv->inst;
-    void (USBHAL::*func)(unsigned int suspended) = priv->suspend_change;
-    (obj->*func)(0);
-}
-
-void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd)
-{
-    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
-    USBHAL *obj= priv->inst;
-    void (USBHAL::*func)(unsigned int suspended) = priv->connect_change;
-    (obj->*func)(1);
-}
-
-void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd)
-{
-    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
-    USBHAL *obj= priv->inst;
-    void (USBHAL::*func)(unsigned int suspended) = priv->connect_change;
-    (obj->*func)(0);
-}
-
-void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd)
-{
-    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
-    USBHAL *obj= priv->inst;
-    unsigned int i;
-    for(i=0;i<hpcd->Init.dev_endpoints;i++) {
-        priv->epComplete[2*i]=0;
-        HAL_PCD_EP_Close(hpcd,EP_ADDR(2*i));
-        HAL_PCD_EP_Flush(hpcd,EP_ADDR(2*i));
-        priv->epComplete[2*i+1]=0;
-        HAL_PCD_EP_Close(hpcd,EP_ADDR(2*i+1));
-        HAL_PCD_EP_Flush(hpcd,EP_ADDR(2*i+1));
-
-    }
-    void (USBHAL::*func)(void)=priv->bus_reset;
-    bool (USBHAL::*ep_realise)(uint8_t endpoint, uint32_t maxPacket, uint32_t flags) = priv->ep_realise;
-    (obj->*func)();
-    (obj->*ep_realise)(EP0IN, MAX_PACKET_SIZE_EP0,0);
-    (obj->*ep_realise)(EP0OUT, MAX_PACKET_SIZE_EP0,0);
-}
-
-
-/* hal pcd handler , used for STM32 HAL PCD Layer */
-
-uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) {
-    return 0;
-}
-
-USBHAL::~USBHAL(void) {
-	USBHAL_Private_t *HALPriv = (USBHAL_Private_t *)(hpcd.pData);
-	HAL_PCD_DeInit(&hpcd);
-	delete HALPriv;
-}
-
-void USBHAL::connect(void) {
-    NVIC_EnableIRQ(USBHAL_IRQn);
-}
-
-void USBHAL::disconnect(void) {
-    NVIC_DisableIRQ(USBHAL_IRQn);
-}
-
-void USBHAL::configureDevice(void) {
-    // Not needed
-}
-
-void USBHAL::unconfigureDevice(void) {
-    // Not needed
-}
-
-void USBHAL::setAddress(uint8_t address) {
-	HAL_PCD_SetAddress(&hpcd, address);
-    EP0write(0, 0);
-}
-
-bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t flags) {
-    uint32_t epIndex = EP_ADDR(endpoint);
-    uint32_t type;
-    uint32_t len;
-    HAL_StatusTypeDef ret;
-    switch (endpoint) {
-    case EP0IN:
-    case EP0OUT:
-        type =  0;
-        break;
-    case EPISO_IN:
-    case EPISO_OUT:
-        type = 1;
-        break;
-    case EPBULK_IN:
-    case EPBULK_OUT:
-        type =  2;
-        break;
-    case EPINT_IN:
-    case EPINT_OUT:
-        type =  3;
-        break;
-    }
-    if (maxPacket > MAXTRANSFER_SIZE) return false;
-    if (epIndex & 0x80) {
-        len = HAL_PCDEx_GetTxFiFo(&hpcd,epIndex & 0x7f);
-        MBED_ASSERT(len >= maxPacket);
-    }
-    ret = HAL_PCD_EP_Open(&hpcd, epIndex,  maxPacket, type);
-    MBED_ASSERT(ret!=HAL_BUSY);
-    return (ret == HAL_OK) ? true:false;
-}
-
-// read setup packet
-void USBHAL::EP0setup(uint8_t *buffer) {
-    memcpy(buffer,  hpcd.Setup, MAX_PACKET_SIZE_SETUP);
-	memset(hpcd.Setup,0,MAX_PACKET_SIZE_SETUP);
-}
-
-void USBHAL::EP0readStage(void) {
-}
-
-void USBHAL::EP0read(void) {
-     USBHAL_Private_t *HALPriv =  (USBHAL_Private_t *)hpcd.pData;
-	 uint32_t epIndex = EP_ADDR(EP0OUT);
-	 uint8_t *pBuf = (uint8_t *)HALPriv->pBufRx0;
-	 HAL_StatusTypeDef ret;
-	 HALPriv->epComplete[EP0OUT] = 2;
-	 ret = HAL_PCD_EP_Receive(&hpcd, epIndex, pBuf, MAX_PACKET_SIZE_EP0 );
-	 MBED_ASSERT(ret!=HAL_BUSY);
-
-}
-
-uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) {
-    USBHAL_Private_t *HALPriv =  (USBHAL_Private_t *)hpcd.pData;
-    uint32_t length = (uint32_t) HAL_PCD_EP_GetRxCount(&hpcd, 0);
-	HALPriv->epComplete[EP0OUT] = 0;
-    if (length) {
-        uint8_t  *buff = (uint8_t *)HALPriv->pBufRx0;
-        memcpy(buffer, buff, length);
-    }
-    return length;
-}
-
-void USBHAL::EP0write(uint8_t *buffer, uint32_t size) {
-    /*  check that endpoint maximum size is not exceeding TX fifo */
-    MBED_ASSERT(hpcd.IN_ep[0].maxpacket >= size);
-    endpointWrite(EP0IN, buffer, size);
-}
-
-void USBHAL::EP0getWriteResult(void) {
-
-}
-
-void USBHAL::EP0stall(void) {
-    stallEndpoint(EP0IN);
-}
-
-EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) {
-    USBHAL_Private_t *HALPriv =  (USBHAL_Private_t *)(hpcd.pData);
-    uint32_t epIndex = EP_ADDR(endpoint);
-    uint8_t* pBuf = (uint8_t *)HALPriv->pBufRx;
-	HAL_StatusTypeDef ret;
-    // clean reception end flag before requesting reception
-    HALPriv->epComplete[endpoint] = 2;
-    ret = HAL_PCD_EP_Receive(&hpcd, epIndex, pBuf, maximumSize);
-	MBED_ASSERT(ret!=HAL_BUSY);
-    return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_t *bytesRead) {
-    USBHAL_Private_t *HALPriv =  (USBHAL_Private_t *)(hpcd.pData);
-	if (HALPriv->epComplete[endpoint]==0) {
-		/*  no reception possible !!! */
-		bytesRead = 0;
-        return EP_COMPLETED;
-    }else if ((HALPriv->epComplete[endpoint]!=1))
-	return EP_PENDING;
-    uint32_t epIndex = EP_ADDR(endpoint);
-    uint8_t  *buff = (uint8_t *)HALPriv->pBufRx;
-    uint32_t length = (uint32_t) HAL_PCD_EP_GetRxCount(&hpcd, epIndex);
-    memcpy(buffer, buff, length);
-    *bytesRead = length;
-	HALPriv->epComplete[endpoint]= 0;
-    return EP_COMPLETED;
-}
-
-EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size) {
-	USBHAL_Private_t *HALPriv =  (USBHAL_Private_t *)(hpcd.pData);
-    uint32_t epIndex = EP_ADDR(endpoint);
-    HAL_StatusTypeDef ret;
-    // clean transmission end flag before requesting transmission
-    HALPriv->epComplete[endpoint] = 2;
-    ret = HAL_PCD_EP_Transmit(&hpcd, epIndex, data, size);
-	MBED_ASSERT(ret!=HAL_BUSY);
-    // update the status
-    if (ret != HAL_OK) return EP_INVALID; 
-    // fix me return is too simple
-    return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint) {
-	USBHAL_Private_t *HALPriv =  (USBHAL_Private_t *)(hpcd.pData);
-    if (HALPriv->epComplete[endpoint] == 1)
-        return EP_COMPLETED;
-    return EP_PENDING;
-}
-
-void USBHAL::stallEndpoint(uint8_t endpoint) {
-    USBHAL_Private_t *HALPriv =  (USBHAL_Private_t *)(hpcd.pData);
-	HAL_StatusTypeDef ret;
-	HALPriv->epComplete[endpoint] = 0;
-	ret = HAL_PCD_EP_SetStall(&hpcd, EP_ADDR(endpoint));
-	MBED_ASSERT(ret!=HAL_BUSY);
-}
-
-void USBHAL::unstallEndpoint(uint8_t endpoint) {
-	HAL_StatusTypeDef ret;
-    ret = HAL_PCD_EP_ClrStall(&hpcd, EP_ADDR(endpoint));
-	MBED_ASSERT(ret!=HAL_BUSY);
-
-}
-
-bool USBHAL::getEndpointStallState(uint8_t endpoint) {
-    return false;
-}
-
-void USBHAL::remoteWakeup(void) {
-}
-
-
-void USBHAL::_usbisr(void) {
-    instance->usbisr();
-}
-
-
-void USBHAL::usbisr(void) {
-
-    HAL_PCD_IRQHandler(&instance->hpcd);
-}
-#endif
-
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_STM/USBHAL_STM_144_64pins.h
--- a/USBDevice/TARGET_STM/USBHAL_STM_144_64pins.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +0,0 @@
-/* Copyright (c) 2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#ifndef USBHAL_STM32_144_64
-#define USBHAL_STM32_144_64
-
-#define USBHAL_IRQn  OTG_FS_IRQn
-/*  must be multiple of 4 bytes */
-#define NB_ENDPOINT 4
-#define MAXTRANSFER_SIZE  0x200
-#define FIFO_USB_RAM_SIZE (MAXTRANSFER_SIZE+MAX_PACKET_SIZE_EP0+MAX_PACKET_SIZE_EP1+MAX_PACKET_SIZE_EP2+MAX_PACKET_SIZE_EP3)
-#if (FIFO_USB_RAM_SIZE > 0x500)
-#error "FIFO dimensioning incorrect"
-#endif
-
-typedef struct
-{
-    USBHAL *inst;
-    void (USBHAL::*bus_reset)(void);
-    void (USBHAL::*sof)(int frame);
-    void (USBHAL::*connect_change)(unsigned int  connected);
-    void (USBHAL::*suspend_change)(unsigned int suspended);
-    void (USBHAL::*ep0_setup)(void);
-    void (USBHAL::*ep0_in)(void);
-    void (USBHAL::*ep0_out)(void);
-    void (USBHAL::*ep0_read)(void);
-    bool (USBHAL::*ep_realise)(uint8_t endpoint, uint32_t maxPacket, uint32_t flags);
-    bool (USBHAL::*epCallback[2*NB_ENDPOINT-2])(void);
-    /*  memorize dummy buffer used for reception */
-    uint32_t pBufRx[MAXTRANSFER_SIZE>>2];
-    uint32_t pBufRx0[MAX_PACKET_SIZE_EP0>>2];
-    uint8_t epComplete[2*NB_ENDPOINT];
-}USBHAL_Private_t;
-
-uint32_t HAL_PCDEx_GetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo)
-{
-    uint32_t len;
-    if (fifo == 0) len = hpcd->Instance->DIEPTXF0_HNPTXFSIZ>>16;
-    else
-        len =  hpcd->Instance->DIEPTXF[fifo - 1] >> 16;
-    return len*4;
-}
-void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd) 
-{
-    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
-    USBHAL *obj= priv->inst;
-    USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
-    uint32_t sofnum = (USBx_DEVICE->DSTS & USB_OTG_DSTS_FNSOF) >> 8;
-    void (USBHAL::*func)(int frame) = priv->sof;
-    (obj->*func)(sofnum);
-}
-
-
-USBHAL * USBHAL::instance;
-
-USBHAL::USBHAL(void) {
-    /*  init parameter  */
-    USBHAL_Private_t *HALPriv = new(USBHAL_Private_t);
-    hpcd.Instance = USB_OTG_FS;
-    memset(&hpcd.Init, 0, sizeof(hpcd.Init));
-    hpcd.Init.dev_endpoints = NB_ENDPOINT;
-    hpcd.Init.ep0_mps =   MAX_PACKET_SIZE_EP0;
-    hpcd.Init.phy_itface = PCD_PHY_EMBEDDED;
-    hpcd.Init.Sof_enable = 1;
-
-    hpcd.Init.speed = PCD_SPEED_FULL;
-    //hpcd.Init.vbus_sensing_enable = 0;
-    //hpcd.Init.lpm_enable = 0;
-    /*  pass instance for usage inside call back */
-    HALPriv->inst = this;
-    HALPriv->bus_reset = &USBHAL::busReset;
-    HALPriv->suspend_change = &USBHAL::suspendStateChanged;
-    HALPriv->connect_change = &USBHAL::connectStateChanged;
-    HALPriv->sof = &USBHAL::SOF;
-    HALPriv->ep0_setup = &USBHAL::EP0setupCallback;
-    HALPriv->ep_realise = &USBHAL::realiseEndpoint;
-    HALPriv->ep0_in = &USBHAL::EP0in;
-    HALPriv->ep0_out = &USBHAL::EP0out;
-    HALPriv->ep0_read = &USBHAL::EP0read;
-    hpcd.pData = (void*)HALPriv;
-    HALPriv->epCallback[0] = &USBHAL::EP1_OUT_callback;
-    HALPriv->epCallback[1] = &USBHAL::EP1_IN_callback;
-    HALPriv->epCallback[2] = &USBHAL::EP2_OUT_callback;
-    HALPriv->epCallback[3] = &USBHAL::EP2_IN_callback;
-    HALPriv->epCallback[4] = &USBHAL::EP3_OUT_callback;
-    HALPriv->epCallback[5] = &USBHAL::EP3_IN_callback;
-    instance = this;
-    // Enable power and clocking
-    /*  board 144 pin all similar  */
-    __HAL_RCC_GPIOA_CLK_ENABLE();
-    pin_function(PA_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
-    pin_function(PA_9, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF10_OTG_FS));
-    pin_function(PA_10, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF10_OTG_FS));
-    pin_function(PA_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
-    pin_function(PA_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
-
-    __HAL_RCC_USB_OTG_FS_CLK_ENABLE();
-    __HAL_RCC_SYSCFG_CLK_ENABLE();
-    hpcd.State = HAL_PCD_STATE_RESET;
-    HAL_PCD_Init(&hpcd);
-    /* 1.25kbytes */
-    /* min value 16 (= 16 x 4 bytes) */
-    /*  max value 256 (= 1K bytes ) */
-    /*  maximum sum is 0x140 */
-    HAL_PCDEx_SetRxFiFo(&hpcd, (MAXTRANSFER_SIZE/4));
-    /*  bulk/int 64 bytes in FS  */
-    HAL_PCDEx_SetTxFiFo(&hpcd, 0, (MAX_PACKET_SIZE_EP0/4)+1);
-    /*  bulk/int bytes in FS */
-    HAL_PCDEx_SetTxFiFo(&hpcd, 1, (MAX_PACKET_SIZE_EP1/4)+1);
-    HAL_PCDEx_SetTxFiFo(&hpcd, 2, (MAX_PACKET_SIZE_EP2/4));
-    /* ISOchronous */
-    HAL_PCDEx_SetTxFiFo(&hpcd, 3, (MAX_PACKET_SIZE_EP3/4));
-    NVIC_SetVector(USBHAL_IRQn, (uint32_t)&_usbisr);
-    NVIC_SetPriority(USBHAL_IRQn, 1);
-    HAL_PCD_Start(&hpcd);
-}
-#endif
-
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_Silicon_Labs/inc/em_usb.h
--- a/USBDevice/TARGET_Silicon_Labs/inc/em_usb.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1011 +0,0 @@
-/***************************************************************************//**
- * @file em_usb.h
- * @brief USB protocol stack library API for EFM32.
- * @version 3.20.14
- *******************************************************************************
- * @section License
- * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
- *******************************************************************************
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************/
-
-#ifndef __EM_USB_H
-#define __EM_USB_H
-
-#include "em_device.h"
-#include "em_assert.h"
-#if defined( USB_PRESENT ) && ( USB_COUNT == 1 )
-#include "usbconfig.h"
-#if defined( USB_DEVICE ) || defined( USB_HOST )
-
-#include <string.h>
-#include <stddef.h>
-#include "em_common.h"
-/* Workaround for em_common naming change so that we don't need to rework the
-   entire USB HAL */
-#define EFM32_PACK_START(x)        SL_PACK_START(x)
-#define EFM32_PACK_END()           SL_PACK_END()
-#define EFM32_MIN(a, b)            SL_MIN(a, b)
-#define EFM32_MAX(a, b)            SL_MAX(a, b)
-#define EFM32_ATTRIBUTE_PACKED     SL_ATTRIBUTE_PACKED
-#define EFM32_ATTRIBUTE_ALIGN(X)   SL_ATTRIBUTE_ALIGN(X)
-#define EFM32_ALIGN(X)             SL_ALIGN(X)
-#define EFM32_WEAK                 SL_WEAK
-#define EFM32_ATTRIBUTE_SECTION(X) SL_ATTRIBUTE_SECTION(X)
-
-#include "em_int.h"
-
-#if defined( USB_USE_PRINTF )
-#include <stdio.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef __CC_ARM
-#pragma anon_unions
-#endif
-
-/***************************************************************************//**
- * @addtogroup USB
- * @brief USB HOST and DEVICE protocol stacks.
- * @{
- ******************************************************************************/
-
-/***************************************************************************//**
- * @addtogroup USB_COMMON
- * @brief Common parts for both HOST and DEVICE USB stacks, see @ref usb_device
- *        and @ref usb_host pages for device and host library documentation.
- * @{
- ******************************************************************************/
-
-#define SILABS_USB_VID          0x10C4          /**< Silicon Labs Vendor ID, supplied by USB-IF.       */
-
-/* SETUP request, direction of data stage */
-#define USB_SETUP_DIR_OUT       0               /**< Setup request data stage OUT direction value.     */
-#define USB_SETUP_DIR_IN        1               /**< Setup request data stage IN direction value.      */
-#define USB_SETUP_DIR_MASK      0x80            /**< Setup request data stage direction mask.          */
-#define USB_SETUP_DIR_D2H       0x80            /**< Setup request data stage IN direction mask.       */
-#define USB_SETUP_DIR_H2D       0x00            /**< Setup request data stage OUT direction mask.      */
-
-/* SETUP request type */
-#define USB_SETUP_TYPE_STANDARD       0         /**< Standard setup request value.                     */
-#define USB_SETUP_TYPE_CLASS          1         /**< Class setup request value.                        */
-#define USB_SETUP_TYPE_VENDOR         2         /**< Vendor setup request value.                       */
-#define USB_SETUP_TYPE_STANDARD_MASK  0x00      /**< Standard setup request mask.                      */
-#define USB_SETUP_TYPE_CLASS_MASK     0x20      /**< Class setup request mask.                         */
-#define USB_SETUP_TYPE_VENDOR_MASK    0x40      /**< Vendor setup request mask.                        */
-
-/* SETUP request recipient */
-#define USB_SETUP_RECIPIENT_DEVICE    0         /**< Setup request device recipient value.             */
-#define USB_SETUP_RECIPIENT_INTERFACE 1         /**< Setup request interface recipient value.          */
-#define USB_SETUP_RECIPIENT_ENDPOINT  2         /**< Setup request endpoint recipient value.           */
-#define USB_SETUP_RECIPIENT_OTHER     3         /**< Setup request other recipient value.              */
-
-/* SETUP standard request codes for Full Speed devices */
-#define GET_STATUS                0             /**< Standard setup request GET_STATUS.                */
-#define CLEAR_FEATURE             1             /**< Standard setup request CLEAR_FEATURE.             */
-#define SET_FEATURE               3             /**< Standard setup request SET_FEATURE.               */
-#define SET_ADDRESS               5             /**< Standard setup request SET_ADDRESS.               */
-#define GET_DESCRIPTOR            6             /**< Standard setup request GET_DESCRIPTOR.            */
-#define SET_DESCRIPTOR            7             /**< Standard setup request SET_DESCRIPTOR.            */
-#define GET_CONFIGURATION         8             /**< Standard setup request GET_CONFIGURATION.         */
-#define SET_CONFIGURATION         9             /**< Standard setup request SET_CONFIGURATION.         */
-#define GET_INTERFACE             10            /**< Standard setup request GET_INTERFACE.             */
-#define SET_INTERFACE             11            /**< Standard setup request SET_INTERFACE.             */
-#define SYNCH_FRAME               12            /**< Standard setup request SYNCH_FRAME.               */
-
-/* SETUP class request codes */
-#define USB_HID_GET_REPORT        0x01          /**< HID class setup request GET_REPORT.               */
-#define USB_HID_GET_IDLE          0x02          /**< HID class setup request GET_IDLE.                 */
-#define USB_HID_SET_REPORT        0x09          /**< HID class setup request SET_REPORT.               */
-#define USB_HID_SET_IDLE          0x0A          /**< HID class setup request SET_IDLE.                 */
-#define USB_HID_SET_PROTOCOL      0x0B          /**< HID class setup request SET_PROTOCOL.             */
-#define USB_CDC_SETLINECODING     0x20          /**< CDC class setup request SET_LINE_CODING.          */
-#define USB_CDC_GETLINECODING     0x21          /**< CDC class setup request GET_LINE_CODING.          */
-#define USB_CDC_SETCTRLLINESTATE  0x22          /**< CDC class setup request SET_CONTROL_LINE_STATE.   */
-#define USB_MSD_BOTRESET          0xFF          /**< MSD class setup request Bulk only transfer reset. */
-#define USB_MSD_GETMAXLUN         0xFE          /**< MSD class setup request Get Max LUN.              */
-#define USB_AUDIO_GET_CUR         0x81          /**< Audio class setup request GET_CUR.                */
-#define USB_AUDIO_SET_CUR         0x01          /**< Audio class setup request SET_CUR.                */
-#define USB_AUDIO_GET_CUR         0x81          /**< Audio class setup request GET_CUR.                */
-#define USB_AUDIO_SET_MIN         0x02          /**< Audio class setup request SET_MIN.                */
-#define USB_AUDIO_GET_MIN         0x82          /**< Audio class setup request GET_MIN.                */
-#define USB_AUDIO_SET_MAX         0x03          /**< Audio class setup request SET_MAX.                */
-#define USB_AUDIO_GET_MAX         0x83          /**< Audio class setup request GET_MAX.                */
-#define USB_AUDIO_SET_RES         0x04          /**< Audio class setup request SET_RES.                */
-#define USB_AUDIO_GET_RES         0x84          /**< Audio class setup request GET_RES.                */
-#define USB_AUDIO_SET_MEM         0x05          /**< Audio class setup request SET_MEM.                */
-#define USB_AUDIO_GET_MEM         0x85          /**< Audio class setup request GET_MEM.                */
-#define USB_AUDIO_GET_STAT        0xFF          /**< Audio class setup request GET_STAT.               */
-
-/* SETUP command GET/SET_DESCRIPTOR decriptor types */
-#define USB_DEVICE_DESCRIPTOR             1     /**< DEVICE descriptor value.                          */
-#define USB_CONFIG_DESCRIPTOR             2     /**< CONFIGURATION descriptor value.                   */
-#define USB_STRING_DESCRIPTOR             3     /**< STRING descriptor value.                          */
-#define USB_MAX_STRING_DESCRIPTOR_CHARS   126   /**< Maximum STRING descriptor bString length.         */
-#define USB_INTERFACE_DESCRIPTOR          4     /**< INTERFACE descriptor value.                       */
-#define USB_ENDPOINT_DESCRIPTOR           5     /**< ENDPOINT descriptor value.                        */
-#define USB_DEVICE_QUALIFIER_DESCRIPTOR   6     /**< DEVICE_QUALIFIER descriptor value.                */
-#define USB_OTHER_SPEED_CONFIG_DESCRIPTOR 7     /**< OTHER_SPEED_CONFIGURATION descriptor value.       */
-#define USB_INTERFACE_POWER_DESCRIPTOR    8     /**< INTERFACE_POWER descriptor value.                 */
-#define USB_INTERFACE_ASSOCIATION_DESCRIPTOR 11 /**< INTERFACE_ASSOCIATION descriptor value.           */
-#define USB_HID_DESCRIPTOR                0x21  /**< HID descriptor value.                             */
-#define USB_SMARTCARD_DESCRIPTOR          0x21  /**< Smartcard usb-ccid-specific Descriptor Type.      */
-#define USB_HID_REPORT_DESCRIPTOR         0x22  /**< HID REPORT descriptor value.                      */
-#define USB_CS_INTERFACE_DESCRIPTOR       0x24  /**< Audio Class-specific interface Descriptor Type.   */
-#define USB_CS_ENDPOINT_DESCRIPTOR        0x25  /**< Audio Class-specific endpoint Descriptor Type.    */
-#define USB_HUB_DESCRIPTOR                0x29  /**< HUB descriptor value.                             */
-#define USB_CA_HEADER_DESCRIPTOR          1     /**< Audio Class-Specific AC Interface Header descriptor.*/
-#define USB_CA_INPUT_TERMINAL_DESCRIPTOR  2     /**< Audio Class-Specific AC Interface Input Terminal desc. */
-#define USB_CA_OUTPUT_TERMINAL_DESCRIPTOR 3     /**< Audio Class-Specific AC Interface Output Terminal desc.*/
-#define USB_CA_MIXER_UNIT_DESCRIPTOR      4     /**< Audio Class-Specific AC Interface Mixer descriptor.*/
-#define USB_CA_SELECTOR_UNIT_DESCRIPTOR   5     /**< Audio Class-Specific AC Interface Selector desc.  */
-#define USB_CA_FEATURE_UNIT_DESCRIPTOR    6     /**< Audio Class-Specific AC Interface Feature desc.   */
-#define USB_CA_PROCESSING_UNIT_DESCRIPTOR 7     /**< Audio Class-Specific AC Interface Processing desc.*/
-#define USB_CA_EXTENSION_UNIT_DESCRIPTOR  8     /**< Audio Class-Specific AC Interface Extension desc. */
-#define USB_CA_EP_GENERAL_DESCRIPTOR      1     /**< Audio Class-Specific general descriptor subtype code.*/
-#define USB_CA_AS_GENERAL_DESCRIPTOR      1     /**< Audio Class-Specific AS Interface General descriptor.*/
-#define USB_CA_FORMAT_TYPE_DESCRIPTOR     2     /**< Audio Class-Specific AS Interface Format Type desc. */
-
-#define USB_DEVICE_DESCSIZE               18    /**< Device descriptor size.                           */
-#define USB_CONFIG_DESCSIZE               9     /**< Configuration descriptor size.                    */
-#define USB_INTERFACE_DESCSIZE            9     /**< Interface descriptor size.                        */
-#define USB_ENDPOINT_DESCSIZE             7     /**< Endpoint descriptor size.                         */
-#define USB_DEVICE_QUALIFIER_DESCSIZE     10    /**< Device qualifier descriptor size.                 */
-#define USB_OTHER_SPEED_CONFIG_DESCSIZE   9     /**< Device other speed configuration descriptor size. */
-#define USB_INTERFACE_ASSOCIATION_DESCSIZE 8    /**< INTERFACE_ASSOCIATION descriptor size.            */
-#define USB_HID_DESCSIZE                  9     /**< HID descriptor size.                              */
-#define USB_SMARTCARD_DESCSIZE            54    /**< CCID descriptor size.                             */
-#define USB_CDC_HEADER_FND_DESCSIZE       5     /**< CDC Header functional descriptor size.            */
-#define USB_CDC_CALLMNG_FND_DESCSIZE      5     /**< CDC Call Management functional descriptor size.   */
-#define USB_CDC_ACM_FND_DESCSIZE          4     /**< CDC Abstract Control Management functional descriptor size.*/
-#define USB_CA_INPUT_TERMINAL_DESCSIZE    12    /**< Audio Input Terminal descriptor size.             */
-#define USB_CA_OUTPUT_TERMINAL_DESCSIZE   9     /**< Audio Output Terminal descriptor size.            */
-#define USB_CA_EP_GENERAL_DESCSIZE        7     /**< Audio Class-Specific general descriptor subtype size.*/
-#define USB_CA_AS_GENERAL_DESCSIZE        7     /**< Audio Class-Specific AS Interface General desc size.*/
-#define USB_CA_STD_AS_ENDPOINT_DESCSZIE   9     /**< Audio-class standard audio stream descriptor size.*/
-
-/* Misc. USB definitions */
-#define USB_LS_CTRL_EP_MAXSIZE  8               /**< The max size of low speed control endpoints.      */
-#define USB_LS_INTR_EP_MAXSIZE  8               /**< The max size of low speed interrupt endpoints.    */
-#define USB_FS_CTRL_EP_MAXSIZE  64              /**< The max size of full speed control endpoints.     */
-#define USB_FS_INTR_EP_MAXSIZE  64              /**< The max size of full speed interrupt endpoints.   */
-#define USB_FS_BULK_EP_MAXSIZE  64              /**< The max size of full speed bulk endpoints.        */
-#define USB_FS_ISOC_EP_MAXSIZE  1023            /**< The max size of full speed isochronous endpoints. */
-#define USB_EPTYPE_CTRL         0               /**< Endpoint type control.                            */
-#define USB_EPTYPE_ISOC         1               /**< Endpoint type isochron.                           */
-#define USB_EPTYPE_BULK         2               /**< Endpoint type bulk.                               */
-#define USB_EPTYPE_INTR         3               /**< Endpoint type interrupt.                          */
-#define USB_EPSYNC_NO           (0 << 2)        /**< Endpoint synchronization type, none.              */
-#define USB_EPSYNC_ASYNC        (1 << 2)        /**< Endpoint synchronization type, asynchronous.      */
-#define USB_EPSYNC_ADAPTIVE     (2 << 2)        /**< Endpoint synchronization type, adaptive.          */
-#define USB_EPSYNC_SYNC         (3 << 2)        /**< Endpoint synchronization type, synchronous.       */
-#define USB_EP_DIR_IN           0x80            /**< Endpoint direction mask.                          */
-#define USB_SETUP_PKT_SIZE      8               /**< Setup request packet size.                        */
-#define USB_EPNUM_MASK          0x0F            /**< Endpoint number mask.                             */
-#define USB_LANGID_ENUS         0x0409          /**< English-United States language id.                */
-#define USB_MAX_DEVICE_ADDRESS  127             /**< Maximum allowable device address.                 */
-
-#define CONFIG_DESC_BM_REMOTEWAKEUP 0x20        /**< Configuration descriptor attribute macro.         */
-#define CONFIG_DESC_BM_SELFPOWERED  0x40        /**< Configuration descriptor attribute macro.         */
-#define CONFIG_DESC_BM_RESERVED_D7  0x80        /**< Configuration descriptor attribute macro.         */
-#define CONFIG_DESC_BM_TRANSFERTYPE 0x03        /**< Configuration descriptor transfer type bitmask.   */
-#define CONFIG_DESC_MAXPOWER_mA(x)  (((x)+1)/2) /**< Configuration descriptor power macro.             */
-
-#define DEVICE_IS_SELFPOWERED       0x0001      /**< Standard request GET_STATUS bitmask.              */
-#define REMOTE_WAKEUP_ENABLED       0x0002      /**< Standard request GET_STATUS bitmask.              */
-#define USB_FEATURE_ENDPOINT_HALT         0     /**< Standard request CLEAR/SET_FEATURE bitmask.       */
-#define USB_FEATURE_DEVICE_REMOTE_WAKEUP  1     /**< Standard request CLEAR/SET_FEATURE bitmask.       */
-
-#define HUB_FEATURE_PORT_RESET            4     /**< HUB class request CLEAR/SET_PORT_FEATURE feature selector. */
-#define HUB_FEATURE_PORT_POWER            8     /**< HUB class request CLEAR/SET_PORT_FEATURE feature selector. */
-#define HUB_FEATURE_C_PORT_CONNECTION     16    /**< HUB class request CLEAR/SET_PORT_FEATURE feature selector. */
-#define HUB_FEATURE_C_PORT_RESET          20    /**< HUB class request CLEAR/SET_PORT_FEATURE feature selector. */
-#define HUB_FEATURE_PORT_INDICATOR        22    /**< HUB class request CLEAR/SET_PORT_FEATURE feature selector. */
-
-#define USB_CLASS_CDC                     2     /**< CDC device/interface class code.                    */
-#define USB_CLASS_CDC_DATA                0x0A  /**< CDC Data interface class code.                      */
-#define USB_CLASS_CDC_ACM                 2     /**< CDC Abstract Control Model interface subclass code. */
-#define USB_CLASS_CDC_HFN                 0     /**< CDC class Header Functional Descriptor subtype.     */
-#define USB_CLASS_CDC_CMNGFN              1     /**< CDC class Call Management Functional Descriptor subtype.*/
-#define USB_CLASS_CDC_ACMFN               2     /**< CDC class Abstract Control Management Functional Descriptor subtype.*/
-#define USB_CLASS_CDC_UNIONFN             6     /**< CDC class Union Functional Descriptor subtype.      */
-
-#define USB_CLASS_HID                     3     /**< HID device/interface class code.                    */
-#define USB_CLASS_HID_KEYBOARD            1     /**< HID keyboard interface protocol code.               */
-#define USB_CLASS_HID_MOUSE               2     /**< HID mouse interface protocol code.                  */
-
-#define USB_CLASS_HUB                     9     /**< HUB device/interface class code.                    */
-
-#define USB_CLASS_MSD                     8     /**< MSD device/interface class code.                    */
-#define USB_CLASS_MSD_BOT_TRANSPORT       0x50  /**< MSD Bulk Only Transport protocol.                   */
-#define USB_CLASS_MSD_SCSI_CMDSET         6     /**< MSD Subclass SCSI transparent command set.          */
-#define USB_CLASS_MSD_CSW_CMDPASSED       0     /**< MSD BOT Command status wrapper command passed code. */
-#define USB_CLASS_MSD_CSW_CMDFAILED       1     /**< MSD BOT Command status wrapper command failed code. */
-#define USB_CLASS_MSD_CSW_PHASEERROR      2     /**< MSD BOT Command status wrapper cmd phase error code.*/
-
-#define USB_CLASS_AUDIO                   1     /**< Audio interface class code.                         */
-#define USB_CLASS_AUDIO_CONTROL           1     /**< Audio subclass code for control interface.          */
-#define USB_CLASS_AUDIO_STREAMING         2     /**< Audio subclass code for streaming interface.        */
-#define USB_CLASS_AUDIO_MIDISTREAMING     3     /**< Audio subclass code for midi streaming interface.   */
-
-/*** Triplet for the device descriptor of a composite device using IAD descriptors. ***/
-#define USB_CLASS_MISCELLANEOUS           0xEF  /**< MISCELLANEOUS device class code.                    */
-#define USB_CLASS_MISC_COMMON_SUBCLASS    2     /**< MISCELLANEOUS Common sub class code.                */
-#define USB_CLASS_MISC_IAD_PROTOCOL       1     /**< MISCELLANEOUS Interface Association Descriptor protocol code. */
-
-#define PORT_FULL_SPEED                   1     /**< Full speed return value for USBH_GetPortSpeed(). */
-#define PORT_LOW_SPEED                    2     /**< Low speed return value for USBH_GetPortSpeed().  */
-
-#if defined( __GNUC__  )                  /* GCC compilers */
-#if defined( __CHAR16_TYPE__ )
-typedef __CHAR16_TYPE__ char16_t;
-#else
-typedef unsigned short char16_t;
-#endif
-
-#elif defined( __ICCARM__ )               /* IAR compiler */
-#include <uchar.h>
-
-#elif defined( __CC_ARM )                 /* MDK-ARM compiler */
-typedef unsigned short char16_t;
-#endif
-
-/** Macro for creating USB compliant UTF-16LE UNICODE string descriptors.
- *  @n Example: STATIC_CONST_STRING_DESC( iManufacturer, 'E','n','e','r','g','y',' ','M','i','c','r','o',' ','A','S' );
- *  @note The size of the resulting struct will be two byte larger than a USB string
- *        descriptor. This is to accommodate a terminating null char for the string.
- *        The value assigned to the 'len' member does not take this into account
- *        and is therefore correct usb wise.
- */
-#define STATIC_CONST_STRING_DESC( _name, ... )                  \
-EFM32_PACK_START( 1 )                                           \
-typedef struct                                                  \
-{                                                               \
-  uint8_t  len;                                                 \
-  uint8_t  type;                                                \
-  char16_t name[ 1 + sizeof( (char16_t[]){__VA_ARGS__} ) / 2];  \
-} __attribute__ ((packed)) _##_name;                            \
-EFM32_PACK_END()                                                \
-EFM32_ALIGN( 4 )                                                \
-EFM32_PACK_START( 1 )                                           \
-static const _##_name _name __attribute__ ((aligned(4)))=       \
-{                                                               \
-  .len  = sizeof( _##_name ) - 2,                               \
-  .type = USB_STRING_DESCRIPTOR,                                \
-  .name = {__VA_ARGS__},                                        \
-  .name[ ( ( sizeof( _##_name ) - 2 ) / 2 ) - 1 ] = '\0'        \
-}                                                               \
-EFM32_PACK_END()
-
-/** Macro for creating USB compliant language string descriptors.
- *  @n Example: STATIC_CONST_STRING_DESC_LANGID( langID, 0x04, 0x09 );
- */
-#define STATIC_CONST_STRING_DESC_LANGID( _name, x, y )      \
-EFM32_PACK_START( 1 )                                       \
-typedef struct                                              \
-{                                                           \
-  uint8_t len;                                              \
-  uint8_t type;                                             \
-  uint8_t name[ 2 ];                                        \
-} __attribute__ ((packed)) _##_name;                        \
-EFM32_PACK_END()                                            \
-EFM32_ALIGN( 4 )                                            \
-EFM32_PACK_START( 1 )                                       \
-static const _##_name _name __attribute__ ((aligned(4)))=   \
-{                                                           \
-  .len = 4,                                                 \
-  .type = USB_STRING_DESCRIPTOR,                            \
-  .name = { y, x }                                          \
-}                                                           \
-EFM32_PACK_END()
-
-/** Macro for creating WORD (4 byte) aligned uint8_t array with size which
- *  is a multiple of WORD size.
- *  @n Example: @n UBUF( rxBuffer, 37 );  =>  uint8_t rxBuffer[ 40 ];
- */
-#if !defined(__GNUC__)
-#define        UBUF( x, y ) EFM32_ALIGN( 4 )        uint8_t x[((y)+3)&~3]
-#define STATIC_UBUF( x, y ) EFM32_ALIGN( 4 ) static uint8_t x[((y)+3)&~3]
-#else
-#define        UBUF( x, y ) uint8_t x[((y)+3)&~3] __attribute__ ((aligned(4)))
-
-/** Macro for creating WORD (4 byte) aligned static uint8_t arrays with size which
- *  is a multiple of WORD size.
- *  @n Example: @n STATIC_UBUF( rxBuffer, 37 );  =>  static uint8_t rxBuffer[ 40 ];
- */
-#define STATIC_UBUF( x, y ) static uint8_t x[((y)+3)&~3] __attribute__ ((aligned(4)))
-#endif
-
-
-/** @brief USB transfer status enumerator. */
-typedef enum
-{
-  /* NOTE: Please keep in sync with table errMsg[] in em_usbhal.c */
-  USB_STATUS_OK              = 0,               /**< No errors detected.                               */
-  USB_STATUS_REQ_ERR         = -1,              /**< Setup request error.                              */
-  USB_STATUS_EP_BUSY         = -2,              /**< Endpoint is busy.                                 */
-  USB_STATUS_REQ_UNHANDLED   = -3,              /**< Setup request not handled.                        */
-  USB_STATUS_ILLEGAL         = -4,              /**< Illegal operation attempted.                      */
-  USB_STATUS_EP_STALLED      = -5,              /**< Endpoint is stalled.                              */
-  USB_STATUS_EP_ABORTED      = -6,              /**< Endpoint transfer was aborted.                    */
-  USB_STATUS_EP_ERROR        = -7,              /**< Endpoint transfer error.                          */
-  USB_STATUS_EP_NAK          = -8,              /**< Endpoint NAK'ed transfer request.                 */
-  USB_STATUS_DEVICE_UNCONFIGURED = -9,          /**< Device is unconfigured.                           */
-  USB_STATUS_DEVICE_SUSPENDED    = -10,         /**< Device is suspended.                              */
-  USB_STATUS_DEVICE_RESET    = -11,             /**< Device is/was reset.                              */
-  USB_STATUS_TIMEOUT         = -12,             /**< Transfer timeout.                                 */
-  USB_STATUS_DEVICE_REMOVED  = -13,             /**< Device was removed.                               */
-  USB_STATUS_HC_BUSY         = -14,             /**< Host channel is busy.                             */
-  USB_STATUS_DEVICE_MALFUNCTION = -15,          /**< Malfunctioning device attached.                   */
-  USB_STATUS_PORT_OVERCURRENT = -16,            /**< VBUS shortcircuit/overcurrent failure.            */
-} USB_Status_TypeDef;
-/** @} (end addtogroup USB_COMMON) */
-
-
-#if defined( USB_DEVICE )
-/***************************************************************************//**
- * @addtogroup USB_DEVICE
- * @brief USB DEVICE protocol stack, see @ref usb_device page for detailed documentation.
- * @{
- ******************************************************************************/
-
-#define USB_PWRSAVE_MODE_OFF       0 /**< No energy saving mode selected.                       */
-#define USB_PWRSAVE_MODE_ONSUSPEND 1 /**< Enter USB power-save mode on suspend.                 */
-#define USB_PWRSAVE_MODE_ONVBUSOFF 2 /**< Enter USB power-save mode when not attached to host.  */
-#define USB_PWRSAVE_MODE_ENTEREM2  4 /**< Enter EM2 while in power-save mode.                   */
-
-#define USB_USBC_32kHz_CLK_LFXO    0 /**< Use 32kHz LFXO clock while in powersave mode.         */
-#define USB_USBC_32kHz_CLK_LFRCO   1 /**< Use 32kHz LFRCO clock while in powersave mode.        */
-
-/** @brief USB device state enumerator. */
-typedef enum
-{
-  USBD_STATE_NONE       = 0,                    /**< Device state is undefined/unknown.                */
-  USBD_STATE_ATTACHED   = 1,                    /**< Device state is ATTACHED.                         */
-  USBD_STATE_POWERED    = 2,                    /**< Device state is POWERED.                          */
-  USBD_STATE_DEFAULT    = 3,                    /**< Device state is DEFAULT.                          */
-  USBD_STATE_ADDRESSED  = 4,                    /**< Device state is ADDRESSED.                        */
-  USBD_STATE_CONFIGURED = 5,                    /**< Device state is CONFIGURED.                       */
-  USBD_STATE_SUSPENDED  = 6,                    /**< Device state is SUSPENDED.                        */
-  USBD_STATE_LASTMARKER = 7,                    /**< Device state enum end marker.                     */
-} USBD_State_TypeDef;
-/** @} (end addtogroup USB_DEVICE) */
-#endif /* defined( USB_DEVICE ) */
-
-/** @addtogroup USB_COMMON
- *  @{*/
-
-/** @brief USB Setup request package. */
-EFM32_PACK_START( 1 )
-typedef struct
-{
-  union
-  {
-    struct
-    {
-      union
-      {
-        struct
-        {
-          uint8_t Recipient : 5;                /**< Request recipient (device, interface, endpoint or other).*/
-          uint8_t Type      : 2;                /**< Request type (standard, class or vendor).         */
-          uint8_t Direction : 1;                /**< Transfer direction of SETUP data phase.           */
-        };
-        uint8_t bmRequestType;                  /**< Request characteristics.                          */
-      };
-      uint8_t   bRequest;                       /**< Request code.                                     */
-      uint16_t  wValue;                         /**< Varies according to request.                      */
-      uint16_t  wIndex;                         /**< Index or offset, varies according to request.     */
-      uint16_t  wLength;                        /**< Number of bytes to transfer if there is a data stage.*/
-    };
-  uint32_t  dw[2];
-  };
-} __attribute__ ((packed)) USB_Setup_TypeDef;
-EFM32_PACK_END()
-
-
-/** @brief USB Device Descriptor. */
-EFM32_PACK_START( 1 )
-typedef struct
-{
-  uint8_t  bLength;                             /**< Size of this descriptor in bytes                  */
-  uint8_t  bDescriptorType;                     /**< Constant DEVICE Descriptor Type                   */
-  uint16_t bcdUSB;                              /**< USB Specification Release Number in Binary-Coded
-                                                     Decimal                                           */
-  uint8_t  bDeviceClass;                        /**< Class code (assigned by the USB-IF)               */
-  uint8_t  bDeviceSubClass;                     /**< Subclass code (assigned by the USB-IF)            */
-  uint8_t  bDeviceProtocol;                     /**< Protocol code (assigned by the USB-IF)            */
-  uint8_t  bMaxPacketSize0;                     /**< Maximum packet size for endpoint zero             */
-  uint16_t idVendor;                            /**< Vendor ID (assigned by the USB-IF)                */
-  uint16_t idProduct;                           /**< Product ID (assigned by the manufacturer)         */
-  uint16_t bcdDevice;                           /**< Device release number in binary-coded decimal     */
-  uint8_t  iManufacturer;                       /**< Index of string descriptor describing manufacturer*/
-  uint8_t  iProduct;                            /**< Index of string descriptor describing product     */
-  uint8_t  iSerialNumber;                       /**< Index of string descriptor describing the device
-                                                     serialnumber                                      */
-  uint8_t  bNumConfigurations;                  /**< Number of possible configurations                 */
-} __attribute__ ((packed)) USB_DeviceDescriptor_TypeDef;
-EFM32_PACK_END()
-
-
-/** @brief USB Configuration Descriptor. */
-EFM32_PACK_START( 1 )
-typedef struct
-{
-  uint8_t  bLength;                             /**< Size of this descriptor in bytes                  */
-  uint8_t  bDescriptorType;                     /**< Constant CONFIGURATION Descriptor Type            */
-  uint16_t wTotalLength;                        /**< Total length of data returned for this
-                                                     configuration. Includes the combined length of all
-                                                     descriptors (configuration, interface, endpoint,
-                                                     and class- or vendor-specific) returned for this
-                                                     configuration.                                    */
-  uint8_t  bNumInterfaces;                      /**< Number of interfaces supported by this
-                                                     configuration                                     */
-  uint8_t  bConfigurationValue;                 /**< Value to use as an argument to the
-                                                     SetConfiguration request to select this
-                                                     configuration.                                    */
-  uint8_t  iConfiguration;                      /**< Index of string descriptor describing this
-                                                     configuration.                                    */
-  uint8_t  bmAttributes;                        /**< Configuration characteristics.
-                                                     @n D7: Reserved (set to one)
-                                                     @n D6: Self-powered
-                                                     @n D5: Remote Wakeup
-                                                     @n D4...0: Reserved (reset to zero)               */
-  uint8_t  bMaxPower;                           /**< Maximum power consumption of the USB device, unit
-                                                     is 2mA per LSB                                    */
-} __attribute__ ((packed)) USB_ConfigurationDescriptor_TypeDef;
-EFM32_PACK_END()
-
-
-/** @brief USB Interface Descriptor. */
-EFM32_PACK_START( 1 )
-typedef struct
-{
-  uint8_t bLength;                              /**< Size of this descriptor in bytes.                 */
-  uint8_t bDescriptorType;                      /**< Constant INTERFACE Descriptor Type.               */
-  uint8_t bInterfaceNumber;                     /**< Number of this interface. Zero-based value
-                                                     identifying the index in the array of concurrent
-                                                     interfaces supported by this configuration.       */
-  uint8_t bAlternateSetting;                    /**< Value used to select this alternate setting for
-                                                     the interface identified in the prior field.      */
-  uint8_t bNumEndpoints;                        /**< Number of endpoints used by this interface
-                                                     (excluding endpoint zero). If this value is zero,
-                                                     this interface only uses the Default Control Pipe.*/
-  uint8_t bInterfaceClass;                      /**< Class code (assigned by the USB-IF). A value
-                                                     of zero is reserved for future standardization. If
-                                                     this field is set to FFH, the interface class is
-                                                     vendor-specific. All other values are reserved for
-                                                     assignment by the USB-IF.                         */
-  uint8_t bInterfaceSubClass;                   /**< Subclass code (assigned by the USB-IF). These codes
-                                                     are qualified by the value of the bInterfaceClass
-                                                     field. If the bInterfaceClass field is reset to
-                                                     zero, this field must also be reset to zero. If
-                                                     the bInterfaceClass field is not set to FFH, all
-                                                     values are reserved forassignment by the USB-IF.  */
-  uint8_t bInterfaceProtocol;                   /**< Protocol code (assigned by the USB). These codes
-                                                     are qualified by the value of the bInterfaceClass
-                                                     and the bInterfaceSubClass fields. If an interface
-                                                     supports class-specific requests, this code
-                                                     identifies the protocols that the device uses as
-                                                     defined by the specification of the device class.
-                                                     If this field is reset to zero, the device does
-                                                     not use a class-specific protocol on this
-                                                     interface. If this field is set to FFH, the device
-                                                     uses a vendor-specific protocol for this interface*/
-  uint8_t iInterface;                           /**< Index of string descriptor describing this
-                                                     interface.                                        */
-} __attribute__ ((packed)) USB_InterfaceDescriptor_TypeDef;
-EFM32_PACK_END()
-
-
-/** @brief USB Endpoint Descriptor. */
-EFM32_PACK_START( 1 )
-typedef struct
-{
-  uint8_t   bLength;                            /**< Size of this descriptor in bytes                  */
-  uint8_t   bDescriptorType;                    /**< Constant ENDPOINT Descriptor Type                 */
-  uint8_t   bEndpointAddress;                   /**< The address of the endpoint                       */
-  uint8_t   bmAttributes;                       /**< This field describes the endpoint attributes      */
-  uint16_t  wMaxPacketSize;                     /**< Maximum packet size for the endpoint              */
-  uint8_t   bInterval;                          /**< Interval for polling EP for data transfers        */
-} __attribute__ ((packed)) USB_EndpointDescriptor_TypeDef;
-EFM32_PACK_END()
-
-
-/** @brief USB String Descriptor. */
-EFM32_PACK_START( 1 )
-typedef struct
-{
-  uint8_t len;                                  /**< Size of this descriptor in bytes.                 */
-  uint8_t type;                                 /**< Constant STRING Descriptor Type.                  */
-  char16_t name[];                              /**< The string encoded with UTF-16LE UNICODE charset. */
-} __attribute__ ((packed)) USB_StringDescriptor_TypeDef;
-EFM32_PACK_END()
-
-/** @} (end addtogroup USB_COMMON) */
-
-/*** -------------------- Serial port debug configuration ---------------- ***/
-
-#if defined( DOXY_DOC_ONLY )
-/** @addtogroup USB_COMMON
- *  @{*/
-
-/***************************************************************************//**
- * @brief
- *   Transmit a single char on the debug serial port.
- *
- * @note
- *   This function is enabled with \#define DEBUG_USB_API when configuring the
- *   protocol stack in "usbconfig.h".
- *   This is convenient when debugging code, no need to remove use of this
- *   function when debugging has completed.
- *
- * @param[in] c
- *   Char to transmit.
- *
- * @return
- *   The char transmitted.
- ******************************************************************************/
-int  USB_PUTCHAR( char c );
-
-/***************************************************************************//**
- * @brief
- *   Transmit a zero terminated string on the debug serial port.
- *
- * @note
- *   This function is enabled with \#define DEBUG_USB_API when configuring the
- *   protocol stack in "usbconfig.h".
- *   This is convenient when debugging code, no need to remove use of this
- *   function when debugging has completed.
- *
- * @param[in] p
- *   Pointer to string to transmit.
- ******************************************************************************/
-void USB_PUTS( const char *p );
-
-/***************************************************************************//**
- * @brief
- *   Transmit "printf" formated data on the debug serial port.
- *
- * @note
- *   This function is enabled with \#define USB_USE_PRINTF when configuring the
- *   protocol stack in "usbconfig.h".
- *   This is convenient when debugging code, no need to remove use of this
- *   function when debugging has completed.
- *
- * @param[in] format
- *   Format string (as in printf). No floating point format support.
- ******************************************************************************/
-int  USB_PRINTF( const char *format, ... );
-
-/** @} (end addtogroup USB_COMMON) */
-#endif /* defined( DOXY_DOC_ONLY ) */
-
-/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
-
-/* Hardware constraint, do not change. */
-#define MAX_NUM_HOSTCHANNELS  14
-
-/* The DMA engine use one FIFO ram word for each host channel. */
-#define MAX_HOST_FIFO_SIZE_INWORDS (512-MAX_NUM_HOSTCHANNELS)/*Unit is 4 bytes*/
-
-#if defined ( USER_PUTCHAR )
-  void USB_Puts( const char *p );
-  #define USB_PUTS( s )            USB_Puts( s )
-  #define USB_PUTCHAR( c )         USER_PUTCHAR( c )
-#else
-  #define USB_PUTS( s )
-  #define USB_PUTCHAR( c )
-#endif
-
-#if defined( USB_USE_PRINTF )
-  /* Use a printf which don't support floating point formatting */
-  #if defined(__ICCARM__) || defined (__CC_ARM) || defined (__CROSSWORKS_ARM)
-    #define USB_PRINTF                  printf
-  #else
-    #define USB_PRINTF                  iprintf
-  #endif
-#else
-  #define USB_PRINTF(...)
-#endif /* defined( USB_USE_PRINTF ) */
-
-#if defined( DEBUG_USB_API )
-  #define DEBUG_USB_API_PUTS( s )       USB_PUTS( s )
-  #define DEBUG_USB_API_PUTCHAR( c )    USB_PUTCHAR( c )
-#else
-  #define DEBUG_USB_API_PUTS( s )
-  #define DEBUG_USB_API_PUTCHAR( c )
-#endif /* defined( DEBUG_USB_API ) */
-
-/** @endcond */
-
-/*** -------------------- Common API definitions ------------------------- ***/
-
-/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
-
-#if defined( USB_HOST )
-  #if defined( NUM_APP_TIMERS )
-    #define NUM_QTIMERS ( NUM_HC_USED + 2 + NUM_APP_TIMERS + 1 )
-  #else
-    #define NUM_QTIMERS ( NUM_HC_USED + 2 + 1 )
-  #endif
-  /* + 2 for default ctrl. host ch. 0 & 1, + 1 for host port timer  */
-#else
-  #if defined( NUM_APP_TIMERS )
-    #define NUM_QTIMERS ( NUM_APP_TIMERS )
-  #else
-    #define NUM_QTIMERS 0
-  #endif
-#endif /* defined( USB_HOST ) */
-/** @endcond */
-
-/** @addtogroup USB_COMMON
- *  @{*/
-
-/***************************************************************************//**
- * @brief
- *  USB transfer callback function.
- *
- * @details
- *  The callback function is called when a transfer has completed. An application
- *  should check the status, xferred and optionally the remaining parameters
- *  before deciding if the transfer is usable. In the case where the transfer
- *  is part of a control request data stage, the callback function should
- *  return an appropriate @ref USB_Status_TypeDef status.
- *
- * @param[in] status
- *   The transfer status. See @ref USB_Status_TypeDef.
- *
- * @param[in] xferred
- *   Number of bytes actually transferred.
- *
- * @param[in] remaining
- *   Number of bytes not transferred.
- *
- * @return
- *   @ref USB_STATUS_OK on success, else an appropriate error code.
- ******************************************************************************/
-typedef int  (*USB_XferCompleteCb_TypeDef)( USB_Status_TypeDef status, uint32_t xferred, uint32_t remaining );
-
-/***************************************************************************//**
- * @brief
- *  USBTIMER callback function.
- *
- * @details
- *  The callback function is called when an USBTIMER has expired. The callback
- *  is done with interrupts disabled.
- ******************************************************************************/
-typedef void (*USBTIMER_Callback_TypeDef)(  void );
-
-char *USB_GetErrorMsgString(            int error );
-
-#if defined( USB_USE_PRINTF )
-  void USB_PrintErrorMsgString(         char *pre, int error );
-#else
-  #define USB_PrintErrorMsgString(      pre, error )
-#endif
-
-void  USBTIMER_DelayMs(                 uint32_t msec );
-void  USBTIMER_DelayUs(                 uint32_t usec );
-void  USBTIMER_Init(                    void );
-
-#if ( NUM_QTIMERS > 0 )
-  void  USBTIMER_Start(                 uint32_t id, uint32_t timeout, USBTIMER_Callback_TypeDef callback );
-  void  USBTIMER_Stop(                  uint32_t id );
-#endif /* ( NUM_QTIMERS > 0 ) */
-/** @} (end addtogroup USB_COMMON) */
-
-#if defined( USB_DEVICE )
-/** @addtogroup USB_DEVICE
- *  @{*/
-/*** -------------------- DEVICE mode API definitions -------------------- ***/
-
-/***************************************************************************//**
- * @brief
- *  USB Reset callback function.
- * @details
- *  Called whenever USB reset signalling is detected on the USB port.
- ******************************************************************************/
-typedef void (*USBD_UsbResetCb_TypeDef)( void );
-
-/***************************************************************************//**
- * @brief
- *  USB Start Of Frame (SOF) interrupt callback function.
- *
- * @details
- *  Called at each SOF interrupt (if enabled),
- *
- * @param[in] sofNr
- *   Current frame number. The value rolls over to 0 after 16383 (0x3FFF).
- ******************************************************************************/
-typedef void (*USBD_SofIntCb_TypeDef)( uint16_t sofNr );
-
-/***************************************************************************//**
- * @brief
- *  USB State change callback function.
- *
- * @details
- *  Called whenever the device change state.
- *
- * @param[in] oldState
- *   The device USB state just leaved. See @ref USBD_State_TypeDef.
- *
- * @param[in] newState
- *   New (the current) USB device state. See @ref USBD_State_TypeDef.
- ******************************************************************************/
-typedef void (*USBD_DeviceStateChangeCb_TypeDef)( USBD_State_TypeDef oldState, USBD_State_TypeDef newState );
-
-/***************************************************************************//**
- * @brief
- *  USB power mode callback function.
- *
- * @details
- *  Called whenever the device stack needs to query if the device is currently
- *  self- or bus-powered. Typically when host has issued an @ref GET_STATUS
- *  setup command.
- *
- * @return
- *  True if self-powered, false otherwise.
- ******************************************************************************/
-typedef bool (*USBD_IsSelfPoweredCb_TypeDef)( void );
-
-/***************************************************************************//**
- * @brief
- *  USB setup request callback function.
- *
- * @details
- *  Called on each setup request received from host. This gives the application a
- *  possibility to extend or override standard requests, and to implement class
- *  or vendor specific requests. Return @ref USB_STATUS_OK if the request is
- *  handled, return @ref USB_STATUS_REQ_ERR if it is an illegal request or
- *  return @ref USB_STATUS_REQ_UNHANDLED to pass the request on to the default
- *  request handler.
- *
- * @param[in] setup
- *  Pointer to an USB setup packet. See @ref USB_Setup_TypeDef.
- *
- * @return
- *  An appropriate status/error code. See @ref USB_Status_TypeDef.
- ******************************************************************************/
-typedef int  (*USBD_SetupCmdCb_TypeDef)( const USB_Setup_TypeDef *setup );
-
-/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
-struct USBD_Callbacks_TypeDef;
-typedef struct USBD_Callbacks_TypeDef const *USBD_Callbacks_TypeDef_Pointer;
-/** @endcond */
-
-
-/** @brief USB Device stack initialization structure.
- *  @details This structure is passed to @ref USBD_Init() when starting up
- *  the device.                                                             */
-typedef struct
-{
-  const USB_DeviceDescriptor_TypeDef      *deviceDescriptor;      /**< Pointer to a device descriptor.                */
-  const uint8_t                           *configDescriptor;      /**< Pointer to a configuration descriptor.         */
-  const void * const                      *stringDescriptors;     /**< Pointer to an array of string descriptor pointers.*/
-  const uint8_t                           numberOfStrings;        /**< Number of strings in string descriptor array.  */
-  const uint8_t                           *bufferingMultiplier;   /**< Pointer to an array defining the size of the
-                                                                       endpoint buffers. The size is given in
-                                                                       multiples of endpoint size. Generally a value
-                                                                       of 1 (single) or 2 (double) buffering should be
-                                                                       used.                                          */
-  USBD_Callbacks_TypeDef_Pointer          callbacks;              /**< Pointer to struct with callbacks
-                                                                       (@ref USBD_Callbacks_TypeDef). These callbacks
-                                                                       are used by the device stack to signal events
-                                                                       to or query the application.                   */
-  const uint32_t                          reserved;               /**< Reserved for future use.                       */
-} USBD_Init_TypeDef;
-
-
-/** @brief USB Device stack callback structure.
- *  @details Callback functions used by the device stack to signal events or
- *  query status to/from the application. See @ref USBD_Init_TypeDef. Assign
- *  members to NULL if your application don't need a specific callback. */
-typedef struct USBD_Callbacks_TypeDef
-{
-  const USBD_UsbResetCb_TypeDef           usbReset;               /**< Called whenever USB reset signalling is detected
-                                                                       on the USB port.                                */
-  const USBD_DeviceStateChangeCb_TypeDef  usbStateChange;         /**< Called whenever the device change state.        */
-  const USBD_SetupCmdCb_TypeDef           setupCmd;               /**< Called on each setup request received from host.*/
-  const USBD_IsSelfPoweredCb_TypeDef      isSelfPowered;          /**< Called whenever the device stack needs to query
-                                                                       if the device is currently self- or bus-powered.
-                                                                       Applies to devices which can operate in both modes.*/
-  const USBD_SofIntCb_TypeDef             sofInt;                 /**< Called at each SOF interrupt. If NULL, the device
-                                                                       stack will not enable the SOF interrupt.        */
-} USBD_Callbacks_TypeDef;
-
-
-/*** -------------------- DEVICE mode API -------------------------------- ***/
-
-void                USBD_AbortAllTransfers( void );
-int                 USBD_AbortTransfer(     int epAddr );
-void                USBD_Connect(           void );
-void                USBD_Disconnect(        void );
-bool                USBD_EpIsBusy(          int epAddr );
-USBD_State_TypeDef  USBD_GetUsbState(       void );
-const char *        USBD_GetUsbStateName(   USBD_State_TypeDef state );
-int                 USBD_Init(              const USBD_Init_TypeDef *p );
-int                 USBD_Read(              int epAddr, void *data, int byteCount, USB_XferCompleteCb_TypeDef callback );
-int                 USBD_RemoteWakeup(      void );
-bool                USBD_SafeToEnterEM2(    void );
-int                 USBD_StallEp(           int epAddr );
-void                USBD_Stop(              void );
-int                 USBD_UnStallEp(         int epAddr );
-int                 USBD_Write(             int epAddr, void *data, int byteCount, USB_XferCompleteCb_TypeDef callback );
-
-#ifdef __MBED__
-int                 USBD_SetAddress(        uint8_t addr );
-int                 USBD_AddEndpoint(       int epAddr, int transferType, int maxPacketSize, int bufferMult );
-int                 USBD_EpIsStalled(       int epAddr );
-void                USBD_StallEp0(          void );
-#endif
-
-/** @} (end addtogroup USB_DEVICE) */
-#endif /* defined( USB_DEVICE ) */
-
-
-#if defined( USB_HOST )
-/***************************************************************************//**
- * @addtogroup USB_HOST
- * @brief USB HOST protocol stack, see @ref usb_host page for detailed documentation.
- * @{
- ******************************************************************************/
-/*** -------------------- HOST mode API definitions ---------------------- ***/
-
-#define USB_VBUSOVRCUR_PORT_NONE     -1       /**< No overcurrent flag functionality.                   */
-#define USB_VBUSOVRCUR_POLARITY_LOW  0        /**< Overcurrent flag pin polarity is low.                */
-#define USB_VBUSOVRCUR_POLARITY_HIGH 1        /**< Overcurrent flag pin polarity is high.               */
-
-/** USB HOST endpoint status enumerator. */
-typedef enum
-{
-  H_EP_IDLE             = 0,                      /**< The endpoint is idle.                            */
-  H_EP_SETUP            = 1,                      /**< The endpoint is in SETUP stage.                  */
-  H_EP_DATA_IN          = 2,                      /**< The endpoint is in DATA IN stage.                */
-  H_EP_DATA_OUT         = 3,                      /**< The endpoint is in DATA OUT stage.               */
-  H_EP_STATUS_IN        = 4,                      /**< The endpoint is in STATUS IN stage.              */
-  H_EP_STATUS_OUT       = 5,                      /**< The endpoint is in STATUS OUT stage.             */
-} USBH_EpState_TypeDef;
-
-
-/** @brief USB HOST endpoint status data.
- *  @details A host application should not manipulate the contents of
- * this struct.                                                             */
-typedef struct
-{
-  USB_Setup_TypeDef               setup;          /**< A SETUP package.                                 */
-  uint8_t                         setupErrCnt;    /**< Error counter for SETUP transfers.               */
-  USB_EndpointDescriptor_TypeDef  epDesc;         /**< Endpoint descriptor.                             */
-  struct USBH_Device_TypeDef      *parentDevice;  /**< The device the endpoint belongs to.              */
-  uint8_t                         type;           /**< Endpoint type.                                   */
-  uint16_t                        packetSize;     /**< Packet size, current transfer.                   */
-  uint8_t                         hcOut;          /**< Host channel number assigned for OUT transfers.  */
-  uint8_t                         hcIn;           /**< Host channel number assigned for IN transfers.   */
-  bool                            in;             /**< Endpoint direction.                              */
-  uint8_t                         toggle;         /**< Endpoint data toggle.                            */
-  USBH_EpState_TypeDef            state;          /**< Endpoint state.                                  */
-  uint8_t                         addr;           /**< Endpoint address.                                */
-  uint8_t                         *buf;           /**< Transfer buffer.                                 */
-  volatile bool                   xferCompleted;  /**< Transfer completion flag.                        */
-  USB_Status_TypeDef              xferStatus;     /**< Transfer status.                                 */
-  USB_XferCompleteCb_TypeDef      xferCompleteCb; /**< Transfer completion callback function.           */
-  uint32_t                        xferred;        /**< Number of bytes transferred.                     */
-  uint32_t                        remaining;      /**< Number of bytes remaining.                       */
-  uint32_t                        timeout;        /**< Transfer timeout.                                */
-} USBH_Ep_TypeDef;
-
-
-/** @brief USB HOST device definition.
- *  @details A host application should not manipulate the contents of
- *  this struct.                                                            */
-typedef struct USBH_Device_TypeDef
-{
-  USB_DeviceDescriptor_TypeDef          devDesc;  /**< The device device descriptor.                    */
-  USB_ConfigurationDescriptor_TypeDef   confDesc; /**< The device configuration descriptor.             */
-  USB_InterfaceDescriptor_TypeDef       itfDesc;  /**< The device interface descriptor.                 */
-  USBH_Ep_TypeDef                       ep0;      /**< Endpoint 0 status data.                          */
-  USBH_Ep_TypeDef                       *ep;      /**< Array of endpoint status data.                   */
-  int                                   numEp;    /**< Number of endpoints.                             */
-  uint8_t                               addr;     /**< The device address.                              */
-  uint8_t                               speed;    /**< The device speed (low or full speed).            */
-} USBH_Device_TypeDef;
-
-
-/** @brief USB Host stack initialization structure.
- *  @details This structure is passed to @ref USBH_Init() when starting up the
- *  device. Max accumulated FIFO size is 2K bytes.                          */
-typedef struct
-{
-  uint32_t                  rxFifoSize;     /**< Number of FIFO bytes set aside for IN endpoints.            */
-  uint32_t                  nptxFifoSize;   /**< Number of FIFO bytes set aside for OUT CTRL/BULK endoints.  */
-  uint32_t                  ptxFifoSize;    /**< Number of FIFO bytes set aside for OUT INTR/ISO endoints.   */
-  uint32_t                  reserved;       /**< Reserved for future use.                                    */
-} USBH_Init_TypeDef;
-
-
-/** Default @ref USBH_Init_TypeDef values, provides reasonable Tx/Rx FIFO
- *  partitioning.                                                         */
-/* In DMA mode the total available FIFO space is smaller.       */
-/* The DMA controller use one FIFO word pr. channel for status. */
-/* The unit in the table is byte.                               */
-#define USBH_INIT_DEFAULT                                                    \
-{                                                                            \
-  MAX_HOST_FIFO_SIZE_INWORDS * 2,/* 1024 bytes Rx FIFO size.             */  \
-  MAX_HOST_FIFO_SIZE_INWORDS,    /* 512 bytes non-periodic Tx FIFO size. */  \
-  MAX_HOST_FIFO_SIZE_INWORDS,    /* 512 bytes periodic Tx FIFO size.     */  \
-  0                              /* Reserved.                            */  \
-}
-
-/*** -------------------- HOST mode API ---------------------------------- ***/
-
-int     USBH_AssignHostChannel(            USBH_Ep_TypeDef *ep, uint8_t hcnum );
-int     USBH_ControlMsg(                   USBH_Ep_TypeDef *ep, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, uint16_t wLength, void *data, int timeout, USB_XferCompleteCb_TypeDef callback );
-int     USBH_ControlMsgB(                  USBH_Ep_TypeDef *ep, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, uint16_t wLength, void *data, int timeout );
-bool    USBH_DeviceConnected(              void );
-int     USBH_GetConfigurationDescriptorB(  USBH_Device_TypeDef *device, void *buf, int len, uint8_t configIndex );
-int     USBH_GetDeviceDescriptorB(         USBH_Device_TypeDef *device, void *buf, int len );
-uint8_t USBH_GetPortSpeed(                 void );
-int     USBH_GetStringB(                   USBH_Device_TypeDef *device, uint8_t *buf, int bufLen, uint8_t stringIndex, uint16_t langID );
-int     USBH_Init(                         const USBH_Init_TypeDef *p );
-int     USBH_InitDeviceData(               USBH_Device_TypeDef *device, const uint8_t *buf, USBH_Ep_TypeDef *ep, int numEp, uint8_t deviceSpeed );
-int     USBH_PortReset(                    void );
-int     USBH_PortResume(                   void );
-void    USBH_PortSuspend(                  void );
-void    USBH_PrintString(                  const char *pre, const USB_StringDescriptor_TypeDef *s, const char *post );
-
-#if defined( USB_USE_PRINTF )
-int     USBH_PrintConfigurationDescriptor( const USB_ConfigurationDescriptor_TypeDef *config, int maxLen );
-int     USBH_PrintDeviceDescriptor(        const USB_DeviceDescriptor_TypeDef *device );
-int     USBH_PrintEndpointDescriptor(      const USB_EndpointDescriptor_TypeDef *endpoint );
-int     USBH_PrintInterfaceDescriptor(     const USB_InterfaceDescriptor_TypeDef *interface );
-#else
-#define USBH_PrintConfigurationDescriptor( config, maxLen )
-#define USBH_PrintDeviceDescriptor(        device )
-#define USBH_PrintEndpointDescriptor(      endpoint )
-#define USBH_PrintInterfaceDescriptor(     interface )
-#endif /* defined( USB_USE_PRINTF ) */
-
-int                                  USBH_QueryDeviceB(                uint8_t *buf, size_t bufsize, uint8_t deviceSpeed );
-USB_ConfigurationDescriptor_TypeDef* USBH_QGetConfigurationDescriptor( const uint8_t *buf, int configIndex );
-USB_DeviceDescriptor_TypeDef*        USBH_QGetDeviceDescriptor(        const uint8_t *buf );
-USB_EndpointDescriptor_TypeDef*      USBH_QGetEndpointDescriptor(      const uint8_t *buf, int configIndex, int interfaceIndex, int endpointIndex );
-USB_InterfaceDescriptor_TypeDef*     USBH_QGetInterfaceDescriptor(     const uint8_t *buf, int configIndex, int interfaceIndex );
-
-int     USBH_Read(                         USBH_Ep_TypeDef *ep, void *data, int byteCount, int timeout, USB_XferCompleteCb_TypeDef callback );
-int     USBH_ReadB(                        USBH_Ep_TypeDef *ep, void *data, int byteCount, int timeout );
-int     USBH_SetAddressB(                  USBH_Device_TypeDef *device, uint8_t deviceAddress );
-int     USBH_SetAltInterfaceB(             USBH_Device_TypeDef *device, uint8_t interfaceIndex, uint8_t alternateSetting );
-int     USBH_SetConfigurationB(            USBH_Device_TypeDef *device, uint8_t configValue );
-int     USBH_StallEpB(                     USBH_Ep_TypeDef *ep );
-void    USBH_Stop(                         void );
-int     USBH_UnStallEpB(                   USBH_Ep_TypeDef *ep );
-int     USBH_WaitForDeviceConnectionB(     uint8_t *buf, int timeoutInSeconds );
-int     USBH_Write(                        USBH_Ep_TypeDef *ep, void *data, int byteCount, int timeout, USB_XferCompleteCb_TypeDef callback );
-int     USBH_WriteB(                       USBH_Ep_TypeDef *ep, void *data, int byteCount, int timeout );
-
-/** @} (end addtogroup USB_HOST) */
-#endif /* defined( USB_HOST ) */
-/** @} (end addtogroup USB) */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* defined( USB_DEVICE ) || defined( USB_HOST ) */
-#endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */
-#endif /* __EM_USB_H */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_Silicon_Labs/inc/em_usbd.h
--- a/USBDevice/TARGET_Silicon_Labs/inc/em_usbd.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,206 +0,0 @@
-/***************************************************************************//**
- * @file em_usbd.h
- * @brief USB protocol stack library API for EFM32.
- * @version 3.20.14
- *******************************************************************************
- * @section License
- * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
- *******************************************************************************
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************/
-
-#ifndef __EM_USBD_H
-#define __EM_USBD_H
-
-#include "em_device.h"
-#if defined( USB_PRESENT ) && ( USB_COUNT == 1 )
-#include "em_usb.h"
-#if defined( USB_DEVICE )
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
-
-#if defined( DEBUG_USB_API )
-#define DEBUG_TRACE_ABORT( x )                                  \
-{                                                               \
-  if ( x == USB_STATUS_EP_STALLED )                             \
-  {  DEBUG_USB_API_PUTS( "\nEP cb(), EP stalled" );           } \
-  else if ( x == USB_STATUS_EP_ABORTED )                        \
-  {  DEBUG_USB_API_PUTS( "\nEP cb(), EP aborted" );           } \
-  else if ( x == USB_STATUS_DEVICE_UNCONFIGURED )               \
-  {  DEBUG_USB_API_PUTS( "\nEP cb(), device unconfigured" );  } \
-  else if ( x == USB_STATUS_DEVICE_SUSPENDED )                  \
-  {  DEBUG_USB_API_PUTS( "\nEP cb(), device suspended" );     } \
-  else /* ( x == USB_STATUS_DEVICE_RESET ) */                   \
-  {  DEBUG_USB_API_PUTS( "\nEP cb(), device reset" );         } \
-}
-#else
-#define DEBUG_TRACE_ABORT( x )
-#endif
-
-extern USBD_Device_TypeDef *dev;
-extern volatile bool USBD_poweredDown;
-
-__STATIC_INLINE void USBD_ArmEp0( USBD_Ep_TypeDef *ep );
-__STATIC_INLINE void USBD_ArmEpN( USBD_Ep_TypeDef *ep );
-__STATIC_INLINE void USBD_AbortEp( USBD_Ep_TypeDef *ep );
-
-void USBD_SetUsbState( USBD_State_TypeDef newState );
-
-int  USBDCH9_SetupCmd( USBD_Device_TypeDef *device );
-
-void USBDEP_Ep0Handler( USBD_Device_TypeDef *device );
-void USBDEP_EpHandler( uint8_t epAddr );
-
-__STATIC_INLINE void USBD_ActivateAllEps( bool forceIdle )
-{
-  int i;
-
-  for ( i = 1; i <= NUM_EP_USED; i++ )
-  {
-    USBDHAL_ActivateEp( &dev->ep[ i ], forceIdle );
-  }
-}
-
-__STATIC_INLINE void USBD_ArmEp( USBD_Ep_TypeDef *ep )
-{
-  if ( ep->num == 0 )
-  {
-    USBD_ArmEp0( ep );
-  }
-  else
-  {
-    USBD_ArmEpN( ep );
-  }
-}
-
-__STATIC_INLINE void USBD_ArmEp0( USBD_Ep_TypeDef *ep )
-{
-  if ( ep->in )
-  {
-    if ( ep->remaining == 0 )       /* Zero Length Packet? */
-    {
-      ep->zlp = 1;
-    }
-
-    USBDHAL_SetEp0InDmaPtr( ep->buf );
-    USBDHAL_StartEp0In( EFM32_MIN( ep->remaining, ep->packetSize ),
-                        dev->ep0MpsCode );
-  }
-  else
-  {
-    USBDHAL_SetEp0OutDmaPtr( ep->buf );
-    USBDHAL_StartEp0Out( ep->packetSize, dev->ep0MpsCode );
-  }
-}
-
-__STATIC_INLINE void USBD_ArmEpN( USBD_Ep_TypeDef *ep )
-{
-  if ( ep->in )
-  {
-    USBDHAL_StartEpIn( ep );
-  }
-  else
-  {
-    USBDHAL_StartEpOut( ep );
-  }
-}
-
-__STATIC_INLINE void USBD_DeactivateAllEps( USB_Status_TypeDef reason )
-{
-  int i;
-  USBD_Ep_TypeDef *ep;
-
-  for ( i = 1; i <= NUM_EP_USED; i++ )
-  {
-    ep = &dev->ep[ i ];
-
-    if ( ep->state == D_EP_IDLE )
-    {
-      USBDHAL_DeactivateEp( ep );
-    }
-  }
-
-  USBDHAL_AbortAllTransfers( reason );
-}
-
-__STATIC_INLINE USBD_Ep_TypeDef *USBD_GetEpFromAddr( uint8_t epAddr )
-{
-  int epIndex;
-  USBD_Ep_TypeDef *ep = NULL;
-
-  if ( epAddr & USB_SETUP_DIR_MASK )
-  {
-    epIndex = dev->inEpAddr2EpIndex[ epAddr & USB_EPNUM_MASK ];
-  }
-  else
-  {
-    epIndex = dev->outEpAddr2EpIndex[ epAddr & USB_EPNUM_MASK ];
-  }
-
-  if ( epIndex )
-  {
-    ep = &dev->ep[ epIndex ];
-  }
-  else if ( ( epAddr & USB_EPNUM_MASK ) == 0 )
-  {
-    ep = &dev->ep[ 0 ];
-  }
-
-  return ep;
-}
-
-__STATIC_INLINE void USBD_ReArmEp0( USBD_Ep_TypeDef *ep )
-{
-  if ( ep->in )
-  {
-    USBDHAL_StartEp0In( EFM32_MIN( ep->remaining, ep->packetSize ),
-                        dev->ep0MpsCode );
-  }
-  else
-  {
-    USBDHAL_StartEp0Out( ep->packetSize, dev->ep0MpsCode );
-  }
-}
-
-__STATIC_INLINE void USBD_AbortEp( USBD_Ep_TypeDef *ep )
-{
-  if ( ep->state == D_EP_IDLE )
-  {
-    return;
-  }
-
-  if ( ep->in )
-  {
-    USBDHAL_AbortEpIn( ep );
-  }
-  else
-  {
-    USBDHAL_AbortEpOut( ep );
-  }
-}
-
-/** @endcond */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* defined( USB_DEVICE ) */
-#endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */
-#endif /* __EM_USBD_H */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_Silicon_Labs/inc/em_usbh.h
--- a/USBDevice/TARGET_Silicon_Labs/inc/em_usbh.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-/***************************************************************************//**
- * @file em_usbh.h
- * @brief USB protocol stack library API for EFM32.
- * @version 3.20.14
- *******************************************************************************
- * @section License
- * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
- *******************************************************************************
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************/
-
-#ifndef __EM_USBH_H
-#define __EM_USBH_H
-
-#include "em_device.h"
-#if defined( USB_PRESENT ) && ( USB_COUNT == 1 )
-#include "em_usb.h"
-#if defined( USB_HOST )
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
-
-extern USBH_Hc_TypeDef                  hcs[];
-extern int                              USBH_attachRetryCount;
-extern const USBH_AttachTiming_TypeDef  USBH_attachTiming[];
-extern USBH_Init_TypeDef                USBH_initData;
-extern volatile USBH_PortState_TypeDef  USBH_portStatus;
-
-USB_Status_TypeDef USBH_CtlSendSetup(   USBH_Ep_TypeDef *ep );
-USB_Status_TypeDef USBH_CtlSendData(    USBH_Ep_TypeDef *ep, uint16_t length );
-USB_Status_TypeDef USBH_CtlReceiveData( USBH_Ep_TypeDef *ep, uint16_t length );
-
-#if defined( USB_RAW_API )
-int USBH_CtlRxRaw( uint8_t pid, USBH_Ep_TypeDef *ep, void *data, int byteCount );
-int USBH_CtlTxRaw( uint8_t pid, USBH_Ep_TypeDef *ep, void *data, int byteCount );
-#endif
-
-void USBHEP_EpHandler(     USBH_Ep_TypeDef *ep, USB_Status_TypeDef result );
-void USBHEP_CtrlEpHandler( USBH_Ep_TypeDef *ep, USB_Status_TypeDef result );
-void USBHEP_TransferDone(  USBH_Ep_TypeDef *ep, USB_Status_TypeDef result );
-
-__STATIC_INLINE uint16_t USBH_GetFrameNum( void )
-{
-  return USBHHAL_GetFrameNum();
-}
-
-__STATIC_INLINE bool USBH_FrameNumIsEven( void )
-{
-  return ( USBHHAL_GetFrameNum() & 1 ) == 0;
-}
-
-/** @endcond */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* defined( USB_HOST ) */
-#endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */
-#endif /* __EM_USBH_H      */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_Silicon_Labs/inc/em_usbhal.h
--- a/USBDevice/TARGET_Silicon_Labs/inc/em_usbhal.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,757 +0,0 @@
-/***************************************************************************//**
- * @file em_usbhal.h
- * @brief USB protocol stack library, low level USB peripheral access.
- * @version 3.20.14
- *******************************************************************************
- * @section License
- * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
- *******************************************************************************
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************/
-
-#ifndef __EM_USBHAL_H
-#define __EM_USBHAL_H
-
-#include "em_device.h"
-#if defined( USB_PRESENT ) && ( USB_COUNT == 1 )
-#include "em_usb.h"
-#if defined( USB_DEVICE ) || defined( USB_HOST )
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
-
-#define USB_PID_DATA0         0
-#define USB_PID_DATA2         1
-#define USB_PID_DATA1         2
-#define USB_PID_SETUP         3
-
-#define HPRT_F_SPEED          ( 1 << _USB_HPRT_PRTSPD_SHIFT )
-#define HPRT_L_SPEED          ( 2 << _USB_HPRT_PRTSPD_SHIFT )
-#define HCFG_PHYCLK_48MHZ     1
-#define HCFG_PHYCLK_6MHZ      2
-
-#define DOEP0_XFERSIZE_PKTCNT_MASK ( _USB_DOEP0TSIZ_XFERSIZE_MASK | \
-                                     _USB_DOEP0TSIZ_PKTCNT_MASK   )
-#define DOEP_XFERSIZE_PKTCNT_MASK  ( _USB_DOEP_TSIZ_XFERSIZE_MASK | \
-                                     _USB_DOEP_TSIZ_PKTCNT_MASK   )
-
-#define DIEP0_XFERSIZE_PKTCNT_MASK ( _USB_DIEP0TSIZ_XFERSIZE_MASK | \
-                                     _USB_DIEP0TSIZ_PKTCNT_MASK   )
-#define DIEP_XFERSIZE_PKTCNT_MASK  ( _USB_DIEP_TSIZ_XFERSIZE_MASK | \
-                                     _USB_DIEP_TSIZ_PKTCNT_MASK   | \
-                                     _USB_DIEP_TSIZ_MC_MASK       )
-
-#define DIEPCTL_EPTYPE_CONTROL (0 << _USB_DIEP_CTL_EPTYPE_SHIFT )
-#define DIEPCTL_EPTYPE_ISOC    (1 << _USB_DIEP_CTL_EPTYPE_SHIFT )
-#define DIEPCTL_EPTYPE_BULK    (2 << _USB_DIEP_CTL_EPTYPE_SHIFT )
-#define DIEPCTL_EPTYPE_INTR    (3 << _USB_DIEP_CTL_EPTYPE_SHIFT )
-
-#define DOEPCTL_EPTYPE_CONTROL (0 << _USB_DOEP_CTL_EPTYPE_SHIFT )
-#define DOEPCTL_EPTYPE_ISOC    (1 << _USB_DOEP_CTL_EPTYPE_SHIFT )
-#define DOEPCTL_EPTYPE_BULK    (2 << _USB_DOEP_CTL_EPTYPE_SHIFT )
-#define DOEPCTL_EPTYPE_INTR    (3 << _USB_DOEP_CTL_EPTYPE_SHIFT )
-
-#define HCCHAR_EPTYPE_CTRL     (0 << _USB_HC_CHAR_EPTYPE_SHIFT )
-#define HCCHAR_EPTYPE_ISOC     (1 << _USB_HC_CHAR_EPTYPE_SHIFT )
-#define HCCHAR_EPTYPE_BULK     (2 << _USB_HC_CHAR_EPTYPE_SHIFT )
-#define HCCHAR_EPTYPE_INTR     (3 << _USB_HC_CHAR_EPTYPE_SHIFT )
-
-#define GRXSTSP_PKTSTS_DEVICE_GOTNAK          ( 1 << _USB_GRXSTSP_PKTSTS_SHIFT )
-#define GRXSTSP_PKTSTS_DEVICE_DATAOUTRECEIVED ( 2 << _USB_GRXSTSP_PKTSTS_SHIFT )
-#define GRXSTSP_PKTSTS_DEVICE_DATAOUTCOMPLETE ( 3 << _USB_GRXSTSP_PKTSTS_SHIFT )
-#define GRXSTSP_PKTSTS_DEVICE_SETUPCOMPLETE   ( 4 << _USB_GRXSTSP_PKTSTS_SHIFT )
-#define GRXSTSP_PKTSTS_DEVICE_SETUPRECEIVED   ( 6 << _USB_GRXSTSP_PKTSTS_SHIFT )
-
-#define GRXSTSP_PKTSTS_HOST_DATAINRECEIVED  ( 2 << _USB_GRXSTSP_PKTSTS_SHIFT )
-#define GRXSTSP_PKTSTS_HOST_DATAINCOMPLETE  ( 3 << _USB_GRXSTSP_PKTSTS_SHIFT )
-#define GRXSTSP_PKTSTS_HOST_DATATOGGLEERROR ( 5 << _USB_GRXSTSP_PKTSTS_SHIFT )
-#define GRXSTSP_PKTSTS_HOST_CHANNELHALTED   ( 7 << _USB_GRXSTSP_PKTSTS_SHIFT )
-
-#define DCTL_WO_BITMASK \
-          ( _USB_DCTL_CGOUTNAK_MASK  | _USB_DCTL_SGOUTNAK_MASK   | \
-            _USB_DCTL_CGNPINNAK_MASK | _USB_DCTL_SGNPINNAK_MASK  )
-#define GUSBCFG_WO_BITMASK ( USB_GUSBCFG_CORRUPTTXPKT )
-#define DEPCTL_WO_BITMASK \
-          ( USB_DIEP_CTL_CNAK       | USB_DIEP_CTL_SNAK        | \
-            USB_DIEP_CTL_SETD0PIDEF | USB_DIEP_CTL_SETD1PIDOF  )
-
-#define HPRT_WC_MASK ( USB_HPRT_PRTCONNDET | USB_HPRT_PRTENA | \
-                       USB_HPRT_PRTENCHNG  | USB_HPRT_PRTOVRCURRCHNG )
-
-typedef __IO uint32_t USB_FIFO_TypeDef[ 0x1000 / sizeof( uint32_t ) ];
-typedef __IO uint32_t USB_DIEPTXF_TypeDef;
-
-#define USB_DINEPS       ((USB_DIEP_TypeDef    *) &USB->DIEP0CTL )
-#define USB_DOUTEPS      ((USB_DOEP_TypeDef    *) &USB->DOEP0CTL )
-#define USB_FIFOS        ((USB_FIFO_TypeDef    *) &USB->FIFO0D   )
-#define USB_DIEPTXFS     ((USB_DIEPTXF_TypeDef *) &USB->DIEPTXF1 )
-
-void USBHAL_CoreReset( void );
-
-#if defined( USB_DEVICE )
-void USBDHAL_AbortAllTransfers( USB_Status_TypeDef reason );
-USB_Status_TypeDef USBDHAL_CoreInit( const uint32_t totalRxFifoSize,
-                                     const uint32_t totalTxFifoSize );
-void USBDHAL_Connect( void );
-void USBDHAL_Disconnect( void );
-void USBDHAL_AbortAllEps( void );
-void USBDHAL_AbortEpIn( USBD_Ep_TypeDef *ep );
-void USBDHAL_AbortEpOut( USBD_Ep_TypeDef *ep );
-
-__STATIC_INLINE USB_Status_TypeDef USBDHAL_GetStallStatusEp(
-                                   USBD_Ep_TypeDef *ep, uint16_t *halt );
-__STATIC_INLINE uint32_t USBDHAL_GetInEpInts( USBD_Ep_TypeDef *ep );
-__STATIC_INLINE uint32_t USBDHAL_GetOutEpInts( USBD_Ep_TypeDef *ep );
-__STATIC_INLINE void USBDHAL_SetEPDISNAK( USBD_Ep_TypeDef *ep );
-#endif /* defined( USB_DEVICE ) */
-
-#if defined( USB_HOST )
-USB_Status_TypeDef USBHHAL_CoreInit( const uint32_t rxFifoSize,
-                                     const uint32_t nptxFifoSize,
-                                     const uint32_t ptxFifoSize );
-void USBHHAL_HCHalt(  int hcnum, uint32_t hcchar );
-void USBHHAL_HCInit(  int hcnum );
-void USBHHAL_HCStart( int hcnum );
-#endif /* defined( USB_HOST ) */
-
-__STATIC_INLINE void USBHAL_DisableGlobalInt( void )
-{
-  USB->GAHBCFG &= ~USB_GAHBCFG_GLBLINTRMSK;
-}
-
-__STATIC_INLINE void USBHAL_DisablePhyPins( void )
-{
-  USB->ROUTE = _USB_ROUTE_RESETVALUE;
-}
-
-__STATIC_INLINE void USBHAL_DisableUsbInt( void )
-{
-  USB->IEN = _USB_IEN_RESETVALUE;
-}
-
-__STATIC_INLINE void USBHAL_EnableGlobalInt( void )
-{
-  USB->GAHBCFG |= USB_GAHBCFG_GLBLINTRMSK;
-}
-
-__STATIC_INLINE void USBHAL_FlushRxFifo( void )
-{
-  USB->GRSTCTL = USB_GRSTCTL_RXFFLSH;
-  while ( USB->GRSTCTL & USB_GRSTCTL_RXFFLSH ) {}
-}
-
-__STATIC_INLINE void USBHAL_FlushTxFifo( uint8_t fifoNum )
-{
-  USB->GRSTCTL = USB_GRSTCTL_TXFFLSH | ( fifoNum << _USB_GRSTCTL_TXFNUM_SHIFT );
-  while ( USB->GRSTCTL & USB_GRSTCTL_TXFFLSH ) {}
-}
-
-__STATIC_INLINE uint32_t USBHAL_GetCoreInts( void )
-{
-  uint32_t retVal;
-
-  retVal  = USB->GINTSTS;
-  retVal &= USB->GINTMSK;
-
-  return retVal;
-}
-
-__STATIC_INLINE bool USBHAL_VbusIsOn( void )
-{
-  return ( USB->STATUS & USB_STATUS_VREGOS ) != 0;
-}
-
-#if defined( USB_DEVICE )
-__STATIC_INLINE void USBDHAL_ActivateEp( USBD_Ep_TypeDef *ep, bool forceIdle )
-{
-#define DIEP_MPS_EPTYPE_TXFNUM_MASK ( _USB_DIEP_CTL_MPS_MASK    | \
-                                      _USB_DIEP_CTL_EPTYPE_MASK | \
-                                      _USB_DIEP_CTL_TXFNUM_MASK )
-#define DOEP_MPS_EPTYPE_MASK        ( _USB_DOEP_CTL_MPS_MASK    | \
-                                      _USB_DOEP_CTL_EPTYPE_MASK )
-  uint32_t daintmask, depctl;
-
-  if ( forceIdle )
-    ep->state = D_EP_IDLE;
-
-  if ( ep->in )
-  {
-    daintmask = ep->mask;
-    depctl = USB_DINEPS[ ep->num ].CTL & ~DEPCTL_WO_BITMASK;
-
-    if ( !( depctl & USB_DIEP_CTL_USBACTEP ) )
-    {
-      depctl = ( depctl                                     &
-                 ~( DIEP_MPS_EPTYPE_TXFNUM_MASK          |
-                    USB_DIEP_CTL_STALL                     )  ) |
-               ( ep->packetSize << _USB_DIEP_CTL_MPS_SHIFT    ) |
-               ( ep->type       << _USB_DIEP_CTL_EPTYPE_SHIFT ) |
-               ( ep->txFifoNum  << _USB_DIEP_CTL_TXFNUM_SHIFT ) |
-               USB_DIEP_CTL_SETD0PIDEF                          |
-               USB_DIEP_CTL_USBACTEP                            |
-               USB_DIEP_CTL_SNAK;
-    }
-    else
-    {
-      depctl |= USB_DIEP_CTL_SETD0PIDEF;
-    }
-    USB_DINEPS[ ep->num ].CTL = depctl;
-  }
-  else
-  {
-    daintmask = ep->mask << _USB_DAINTMSK_OUTEPMSK0_SHIFT;
-    depctl = USB_DOUTEPS[ ep->num ].CTL & ~DEPCTL_WO_BITMASK;
-
-    if ( !( depctl & USB_DOEP_CTL_USBACTEP ) )
-    {
-      depctl = ( depctl                                     &
-                 ~( DOEP_MPS_EPTYPE_MASK                 |
-                    USB_DOEP_CTL_STALL                     )  ) |
-               ( ep->packetSize << _USB_DOEP_CTL_MPS_SHIFT    ) |
-               ( ep->type       << _USB_DOEP_CTL_EPTYPE_SHIFT ) |
-               USB_DOEP_CTL_SETD0PIDEF                          |
-               USB_DOEP_CTL_USBACTEP                            |
-               USB_DOEP_CTL_SNAK;
-    }
-    else
-    {
-      depctl |= USB_DOEP_CTL_SETD0PIDEF;
-    }
-    USB_DOUTEPS[ ep->num ].CTL = depctl;
-  }
-
-  /* Enable interrupt for this EP */
-  USB->DAINTMSK |= daintmask;
-
-#undef DIEP_MPS_EPTYPE_TXFNUM_MASK
-#undef DOEP_MPS_EPTYPE_MASK
-}
-
-__STATIC_INLINE void USBDHAL_ClearRemoteWakeup( void )
-{
-  USB->DCTL &= ~( DCTL_WO_BITMASK | USB_DCTL_RMTWKUPSIG );
-}
-
-__STATIC_INLINE void USBDHAL_DeactivateEp( USBD_Ep_TypeDef *ep )
-{
-  uint32_t daintmask;
-
-  if ( ep->in )
-  {
-    USB_DINEPS[ ep->num ].CTL = 0;
-    daintmask = ep->mask;
-  }
-  else
-  {
-    USB_DOUTEPS[ ep->num ].CTL = 0;
-    daintmask = ep->mask << _USB_DAINTMSK_OUTEPMSK0_SHIFT;
-  }
-
-  /* Disable interrupt for this EP */
-  USB->DAINTMSK &= ~daintmask;
-}
-
-__STATIC_INLINE void USBDHAL_EnableInts( USBD_Device_TypeDef *dev )
-{
-  uint32_t mask;
-
-  /* Disable all interrupts. */
-  USB->GINTMSK = 0;
-
-  /* Clear pending interrupts */
-  USB->GINTSTS = 0xFFFFFFFF;
-
-  mask = USB_GINTMSK_USBSUSPMSK     |
-         USB_GINTMSK_USBRSTMSK      |
-         USB_GINTMSK_ENUMDONEMSK    |
-         USB_GINTMSK_IEPINTMSK      |
-         USB_GINTMSK_OEPINTMSK      |
-         USB_GINTMSK_WKUPINTMSK;
-
-  if ( dev->callbacks->sofInt )
-  {
-    mask |= USB_GINTMSK_SOFMSK;
-  }
-
-  USB->GINTMSK = mask;
-}
-
-__STATIC_INLINE void USBDHAL_EnableUsbResetAndSuspendInt( void )
-{
-  /* Disable all interrupts. */
-  USB->GINTMSK = 0;
-
-  USB->GINTMSK = USB_GINTMSK_USBRSTMSK | USB_GINTMSK_USBSUSPMSK;
-}
-
-__STATIC_INLINE void USBDHAL_Ep0Activate( uint32_t ep0mps )
-{
-  USB->DCTL = ( USB->DCTL & ~DCTL_WO_BITMASK ) | USB_DCTL_CGNPINNAK;
-
-  USB->DOEP0CTL = ( USB->DOEP0CTL & ~DEPCTL_WO_BITMASK )
-                  | USB_DOEP0CTL_CNAK | USB_DOEP0CTL_EPENA
-                  | ep0mps;
-}
-
-__STATIC_INLINE bool USBDHAL_EpIsStalled( USBD_Ep_TypeDef *ep )
-{
-  bool retVal = false;
-  uint16_t stallStatus;
-
-  if ( USBDHAL_GetStallStatusEp( ep, &stallStatus ) == USB_STATUS_OK )
-  {
-    retVal = stallStatus & 1 ? true : false;
-  }
-  return retVal;
-}
-
-__STATIC_INLINE uint32_t USBDHAL_GetAllInEpInts( void )
-{
-  uint32_t retVal;
-
-  retVal  = USB->DAINT;
-  retVal &= USB->DAINTMSK;
-  return retVal & 0xFFFF;
-}
-
-__STATIC_INLINE uint32_t USBDHAL_GetAllOutEpInts( void )
-{
-  uint32_t retVal;
-
-  retVal  = USB->DAINT;
-  retVal &= USB->DAINTMSK;
-  return retVal >> 16;
-}
-
-__STATIC_INLINE uint32_t USBDHAL_GetInEpInts( USBD_Ep_TypeDef *ep )
-{
-  uint32_t retVal, msk;
-
-  msk    = USB->DIEPMSK;
-  retVal = USB_DINEPS[ ep->num ].INT;
-
-  return retVal & msk;
-}
-
-__STATIC_INLINE uint32_t USBDHAL_GetOutEpInts( USBD_Ep_TypeDef *ep )
-{
-  uint32_t retVal;
-
-  retVal  = USB_DOUTEPS[ ep->num ].INT;
-#if defined( USB_DOEP0INT_STUPPKTRCVD )
-  retVal &= USB->DOEPMSK | USB_DOEP0INT_STUPPKTRCVD;
-#else
-  retVal &= USB->DOEPMSK;
-#endif
-
-  return retVal;
-}
-
-__STATIC_INLINE USB_Status_TypeDef USBDHAL_GetStallStatusEp(
-                                   USBD_Ep_TypeDef *ep, uint16_t *halt )
-{
-  uint32_t depctl, eptype;
-  USB_Status_TypeDef retVal = USB_STATUS_REQ_ERR;
-
-  if ( ep->in == true )
-  {
-    depctl = USB_DINEPS[ ep->num ].CTL;
-    eptype = depctl & _USB_DIEP_CTL_EPTYPE_MASK;
-
-    if (( eptype == DIEPCTL_EPTYPE_INTR ) || ( eptype == DIEPCTL_EPTYPE_BULK ))
-    {
-      *halt = depctl & USB_DIEP_CTL_STALL ? 1 : 0;
-      retVal = USB_STATUS_OK;
-    }
-  }
-  else
-  {
-    depctl = USB_DOUTEPS[ ep->num ].CTL;
-    eptype = depctl & _USB_DOEP_CTL_EPTYPE_MASK;
-
-    if (( eptype == DOEPCTL_EPTYPE_INTR ) || ( eptype == DOEPCTL_EPTYPE_BULK ))
-    {
-      *halt = depctl & USB_DOEP_CTL_STALL ? 1 : 0;
-      retVal = USB_STATUS_OK;
-    }
-  }
-
-  return retVal;
-}
-
-__STATIC_INLINE void USBDHAL_ReenableEp0Setup( USBD_Device_TypeDef *dev )
-
-{
-  USB->DOEP0DMAADDR = (uint32_t)dev->setupPkt;
-  USB->DOEP0CTL = ( USB->DOEP0CTL & ~DEPCTL_WO_BITMASK )
-                  | USB_DOEP0CTL_EPENA
-                  | dev->ep0MpsCode;
-}
-
-__STATIC_INLINE void USBDHAL_SetAddr( uint8_t addr )
-{
-  USB->DCFG = ( USB->DCFG                    &
-                ~_USB_DCFG_DEVADDR_MASK        ) |
-              (addr << _USB_DCFG_DEVADDR_SHIFT );
-}
-
-__STATIC_INLINE void USBDHAL_SetEp0InDmaPtr( uint8_t* addr )
-{
-  USB->DIEP0DMAADDR = (uint32_t)addr;
-}
-
-__STATIC_INLINE void USBDHAL_SetEp0OutDmaPtr( uint8_t* addr )
-{
-  USB->DOEP0DMAADDR = (uint32_t)addr;
-}
-
-__STATIC_INLINE void USBDHAL_SetEPDISNAK( USBD_Ep_TypeDef *ep )
-{
-  if ( ep->in )
-  {
-    USB_DINEPS[ ep->num ].CTL = ( USB_DINEPS[ ep->num ].CTL   &
-                                  ~DEPCTL_WO_BITMASK            ) |
-                                USB_DIEP_CTL_SNAK                 |
-                                USB_DIEP_CTL_EPDIS;
-  }
-  else
-  {
-    USB_DOUTEPS[ ep->num ].CTL = ( USB_DOUTEPS[ ep->num ].CTL   &
-                                   ~DEPCTL_WO_BITMASK             ) |
-                                 USB_DOEP_CTL_EPENA;
-
-    USB_DOUTEPS[ ep->num ].CTL = ( USB_DOUTEPS[ ep->num ].CTL   &
-                                   ~DEPCTL_WO_BITMASK             ) |
-                                 USB_DOEP_CTL_SNAK                  |
-                                 USB_DOEP_CTL_EPDIS;
-  }
-}
-
-__STATIC_INLINE void USBDHAL_SetRemoteWakeup( void )
-{
-  USB->DCTL = ( USB->DCTL & ~DCTL_WO_BITMASK ) | USB_DCTL_RMTWKUPSIG;
-}
-
-__STATIC_INLINE USB_Status_TypeDef USBDHAL_StallEp( USBD_Ep_TypeDef *ep )
-{
-  uint32_t depctl, eptype;
-  USB_Status_TypeDef retVal = USB_STATUS_REQ_ERR;
-
-  if ( ep->in == true )
-  {
-    depctl = USB_DINEPS[ ep->num ].CTL & ~DEPCTL_WO_BITMASK;
-    eptype = depctl & _USB_DIEP_CTL_EPTYPE_MASK;
-
-    if ( eptype != DIEPCTL_EPTYPE_ISOC )
-    {
-      if ( depctl & USB_DIEP_CTL_EPENA )
-      {
-        depctl |= USB_DIEP_CTL_EPDIS;
-      }
-      USB_DINEPS[ ep->num ].CTL = depctl | USB_DIEP_CTL_STALL;
-      retVal = USB_STATUS_OK;
-    }
-  }
-  else
-  {
-    depctl = USB_DOUTEPS[ ep->num ].CTL & ~DEPCTL_WO_BITMASK;
-    eptype = depctl & _USB_DOEP_CTL_EPTYPE_MASK;
-
-    if ( eptype != DIEPCTL_EPTYPE_ISOC )
-    {
-      USB_DOUTEPS[ ep->num ].CTL = depctl | USB_DOEP_CTL_STALL;
-      retVal = USB_STATUS_OK;
-    }
-  }
-
-  return retVal;
-}
-
-__STATIC_INLINE void USBDHAL_StartEp0In( uint32_t len, uint32_t ep0mps )
-{
-  USB->DIEP0TSIZ = ( len << _USB_DIEP0TSIZ_XFERSIZE_SHIFT   ) |
-                   ( 1   << _USB_DIEP0TSIZ_PKTCNT_SHIFT     );
-
-  USB->DIEP0CTL = ( USB->DIEP0CTL & ~DEPCTL_WO_BITMASK )
-                  | USB_DIEP0CTL_CNAK | USB_DIEP0CTL_EPENA
-                  | ep0mps;
-}
-
-__STATIC_INLINE void USBDHAL_StartEp0Out( uint32_t len, uint32_t ep0mps )
-{
-  USB->DOEP0TSIZ = ( len << _USB_DOEP0TSIZ_XFERSIZE_SHIFT ) |
-                   ( 1   << _USB_DOEP0TSIZ_PKTCNT_SHIFT   );
-
-  USB->DOEP0CTL = ( USB->DOEP0CTL & ~DEPCTL_WO_BITMASK )
-                  | USB_DOEP0CTL_CNAK | USB_DOEP0CTL_EPENA
-                  | ep0mps;
-}
-
-__STATIC_INLINE void USBDHAL_StartEp0Setup( USBD_Device_TypeDef *dev )
-{
-  dev->ep[ 0 ].in = false;
-
-#if defined( USB_DOEP0INT_STUPPKTRCVD )
-  USB->DOEP0TSIZ = ( 8*3 << _USB_DOEP0TSIZ_XFERSIZE_SHIFT ) |
-                   ( 1   << _USB_DOEP0TSIZ_PKTCNT_SHIFT   ) |
-                   ( 3   << _USB_DOEP0TSIZ_SUPCNT_SHIFT   );
-#else
-  USB->DOEP0TSIZ = 3 << _USB_DOEP0TSIZ_SUPCNT_SHIFT;
-#endif
-
-  dev->setup = dev->setupPkt;
-  USB->DOEP0DMAADDR = (uint32_t)dev->setup;
-
-#if defined( USB_DOEP0INT_STUPPKTRCVD )
-  USB->DOEP0CTL = ( USB->DOEP0CTL & ~DEPCTL_WO_BITMASK )
-                  | USB_DOEP0CTL_EPENA
-                  | dev->ep0MpsCode;
-#else
-  USB->DOEP0CTL = ( USB->DOEP0CTL & ~DEPCTL_WO_BITMASK )
-                  | USB_DOEP0CTL_CNAK | USB_DOEP0CTL_EPENA
-                  | dev->ep0MpsCode;
-#endif
-}
-
-__STATIC_INLINE void USBDHAL_StartEpIn( USBD_Ep_TypeDef *ep )
-{
-  uint32_t pktcnt, xfersize;
-
-  if ( ep->remaining == 0 )     /* ZLP ? */
-  {
-    pktcnt = 1;
-    xfersize = 0;
-  }
-  else
-  {
-    pktcnt = ( ep->remaining - 1 + ep->packetSize ) / ep->packetSize;
-    xfersize = ep->remaining;
-  }
-
-  USB_DINEPS[ ep->num ].TSIZ =
-                ( USB_DINEPS[ ep->num ].TSIZ                &
-                  ~DIEP_XFERSIZE_PKTCNT_MASK                  ) |
-                ( xfersize << _USB_DIEP_TSIZ_XFERSIZE_SHIFT   ) |
-                ( pktcnt   << _USB_DIEP_TSIZ_PKTCNT_SHIFT     );
-
-  USB_DINEPS[ ep->num ].DMAADDR = (uint32_t)ep->buf;
-  USB_DINEPS[ ep->num ].CTL =
-                  ( USB_DINEPS[ ep->num ].CTL & ~DEPCTL_WO_BITMASK ) |
-                  USB_DIEP_CTL_CNAK                                  |
-                  USB_DIEP_CTL_EPENA;
-}
-
-__STATIC_INLINE void USBDHAL_StartEpOut( USBD_Ep_TypeDef *ep )
-{
-  uint32_t pktcnt, xfersize;
-
-  if ( ep->remaining == 0 )     /* ZLP ? */
-  {
-    pktcnt = 1;
-    xfersize = ep->packetSize;
-  }
-  else
-  {
-    pktcnt = ( ep->remaining - 1 + ep->packetSize ) / ep->packetSize;
-    xfersize = pktcnt * ep->packetSize;
-  }
-
-  USB_DOUTEPS[ ep->num ].TSIZ =
-                  ( USB_DOUTEPS[ ep->num ].TSIZ               &
-                    ~DOEP_XFERSIZE_PKTCNT_MASK                  ) |
-                  ( xfersize << _USB_DOEP_TSIZ_XFERSIZE_SHIFT   ) |
-                  ( pktcnt   << _USB_DOEP_TSIZ_PKTCNT_SHIFT     );
-
-  ep->hwXferSize = xfersize;
-  USB_DOUTEPS[ ep->num ].DMAADDR = (uint32_t)ep->buf;
-  USB_DOUTEPS[ ep->num ].CTL =
-                          ( USB_DOUTEPS[ ep->num ].CTL  &
-                            ~DEPCTL_WO_BITMASK             ) |
-                          USB_DOEP_CTL_CNAK                  |
-                          USB_DOEP_CTL_EPENA;
-}
-
-__STATIC_INLINE USB_Status_TypeDef USBDHAL_UnStallEp( USBD_Ep_TypeDef *ep )
-{
-  uint32_t depctl, eptype;
-  USB_Status_TypeDef retVal = USB_STATUS_REQ_ERR;
-
-  if ( ep->in == true )
-  {
-    depctl = USB_DINEPS[ ep->num ].CTL & ~DEPCTL_WO_BITMASK;
-    eptype = depctl & _USB_DIEP_CTL_EPTYPE_MASK;
-
-    if (( eptype == DIEPCTL_EPTYPE_INTR ) || ( eptype == DIEPCTL_EPTYPE_BULK ))
-    {
-      depctl |=  USB_DIEP_CTL_SETD0PIDEF;
-      depctl &= ~USB_DIEP_CTL_STALL;
-      USB_DINEPS[ ep->num ].CTL = depctl;
-      retVal = USB_STATUS_OK;
-    }
-  }
-  else
-  {
-    depctl = USB_DOUTEPS[ ep->num ].CTL & ~DEPCTL_WO_BITMASK;
-    eptype = depctl & _USB_DOEP_CTL_EPTYPE_MASK;
-
-    if (( eptype == DIEPCTL_EPTYPE_INTR ) || ( eptype == DIEPCTL_EPTYPE_BULK ))
-    {
-      depctl |=  USB_DOEP_CTL_SETD0PIDEF;
-      depctl &= ~USB_DOEP_CTL_STALL;
-      USB_DOUTEPS[ ep->num ].CTL = depctl;
-      retVal = USB_STATUS_OK;
-    }
-  }
-
-  return retVal;
-}
-#endif /* defined( USB_DEVICE ) */
-
-#if defined( USB_HOST )
-__STATIC_INLINE void USBHHAL_HCActivate( int hcnum, uint32_t hcchar, bool intep )
-{
-  uint32_t oddframe;
-
-  if ( intep )
-  {
-    oddframe = USB->HFNUM & 1;
-
-    USB->HC[ hcnum ].CHAR =
-                    ( hcchar &
-                      ~( USB_HC_CHAR_CHDIS | _USB_HC_CHAR_ODDFRM_MASK ) ) |
-
-                    /* Schedule INT transfers to start in next frame. */
-                    ( oddframe & 1 ? 0 : USB_HC_CHAR_ODDFRM             ) |
-
-                    USB_HC_CHAR_CHENA;
-  }
-  else
-  {
-    USB->HC[ hcnum ].CHAR = ( hcchar & ~USB_HC_CHAR_CHDIS ) |
-                              USB_HC_CHAR_CHENA;
-  }
-}
-
-__STATIC_INLINE bool USBHHAL_InitializedAndPowered( void )
-{
-  if ( ( USB->ROUTE & USB_ROUTE_PHYPEN ) &&
-       ( USB->HPRT  & USB_HPRT_PRTPWR  )    )
-    return true;
-  return false;
-}
-
-__STATIC_INLINE void USBHHAL_EnableInts( void )
-{
-  /* Disable all interrupts. */
-  USB->GINTMSK = 0;
-
-  /* Clear pending OTG interrupts */
-  USB->GOTGINT = 0xFFFFFFFF;
-
-  /* Clear pending interrupts */
-  USB->GINTSTS = 0xFFFFFFFF;
-
-  USB->GINTMSK = USB_GINTMSK_PRTINTMSK     |
-                 USB_GINTMSK_HCHINTMSK     |
-                 USB_GINTMSK_DISCONNINTMSK;
-}
-
-__STATIC_INLINE uint16_t USBHHAL_GetFrameNum( void )
-{
-  return USB->HFNUM;
-}
-
-__STATIC_INLINE uint32_t USBHHAL_GetHcChar( uint8_t hcnum )
-{
-  return USB->HC[ hcnum ].CHAR;
-}
-
-__STATIC_INLINE uint32_t USBHHAL_GetHcInts( uint8_t hcnum )
-{
-  uint32_t retVal;
-
-  retVal  = USB->HC[ hcnum ].INT;
-  return retVal;
-}
-
-__STATIC_INLINE uint32_t USBHHAL_GetHostChannelInts( void )
-{
-  return USB->HAINT;
-}
-
-__STATIC_INLINE uint8_t USBHHAL_GetPortSpeed( void )
-{
-  return ( USB->HPRT & _USB_HPRT_PRTSPD_MASK ) >> _USB_HPRT_PRTSPD_SHIFT;
-}
-
-__STATIC_INLINE void USBHHAL_PortReset( bool on )
-{
-  if ( on )
-  {
-    DEBUG_USB_INT_LO_PUTCHAR( '+' );
-    USB->HPRT = ( USB->HPRT & ~HPRT_WC_MASK ) | USB_HPRT_PRTRST;
-  }
-  else
-  {
-    DEBUG_USB_INT_LO_PUTCHAR( '-' );
-    USB->HPRT &= ~( HPRT_WC_MASK | USB_HPRT_PRTRST );
-  }
-}
-
-__STATIC_INLINE void USBHHAL_PortResume( bool on )
-{
-  if ( on )
-  {
-    USB->HPRT = ( USB->HPRT & ~( HPRT_WC_MASK | USB_HPRT_PRTSUSP ) ) |
-                USB_HPRT_PRTRES;
-  }
-  else
-  {
-    USB->HPRT &= ~( HPRT_WC_MASK | USB_HPRT_PRTSUSP | USB_HPRT_PRTRES );
-  }
-}
-
-__STATIC_INLINE void USBHHAL_PortSuspend( void )
-{
-  USB->HPRT = ( USB->HPRT & ~HPRT_WC_MASK ) | USB_HPRT_PRTSUSP;
-}
-
-__STATIC_INLINE void USBHHAL_VbusOn( bool on )
-{
-  if ( on )
-  {
-    USB->HPRT = ( USB->HPRT & ~HPRT_WC_MASK ) | USB_HPRT_PRTPWR;
-    DEBUG_USB_INT_LO_PUTCHAR( '/' );
-  }
-  else
-  {
-    USB->HPRT &= ~( HPRT_WC_MASK | USB_HPRT_PRTPWR );
-    DEBUG_USB_INT_LO_PUTCHAR( '\\' );
-  }
-}
-#endif /* defined( USB_HOST ) */
-
-/** @endcond */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* defined( USB_DEVICE ) || defined( USB_HOST ) */
-#endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */
-#endif /* __EM_USBHAL_H */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_Silicon_Labs/inc/em_usbtypes.h
--- a/USBDevice/TARGET_Silicon_Labs/inc/em_usbtypes.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,230 +0,0 @@
-/***************************************************************************//**
- * @file em_usbtypes.h
- * @brief USB protocol stack library, internal type definitions.
- * @version 3.20.14
- *******************************************************************************
- * @section License
- * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
- *******************************************************************************
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************/
-
-#ifndef __EM_USBTYPES_H
-#define __EM_USBTYPES_H
-
-#include "em_device.h"
-#if defined( USB_PRESENT ) && ( USB_COUNT == 1 )
-#include "em_usb.h"
-#if defined( USB_DEVICE ) || defined( USB_HOST )
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
-
-/* Limits imposed by the USB peripheral */
-#define NP_RX_QUE_DEPTH       8
-#define HP_RX_QUE_DEPTH       8
-#define MAX_XFER_LEN          524287L         /* 2^19 - 1 bytes             */
-#define MAX_PACKETS_PR_XFER   1023            /* 2^10 - 1 packets           */
-#if defined( _USB_DIEPTXF6_MASK )
-  #define MAX_NUM_TX_FIFOS      6             /* In addition to EP0 Tx FIFO */
-  #define MAX_NUM_IN_EPS        6             /* In addition to EP0         */
-  #define MAX_NUM_OUT_EPS       6             /* In addition to EP0         */
-  #define MAX_DEVICE_FIFO_SIZE_INWORDS 512U
-#else
-  #define MAX_NUM_TX_FIFOS      3             /* In addition to EP0 Tx FIFO */
-  #define MAX_NUM_IN_EPS        3             /* In addition to EP0         */
-  #define MAX_NUM_OUT_EPS       3             /* In addition to EP0         */
-  #define MAX_DEVICE_FIFO_SIZE_INWORDS 384U
-#endif
-#define MIN_EP_FIFO_SIZE_INWORDS  16U         /* Unit is words (32bit)      */
-#define MIN_EP_FIFO_SIZE_INBYTES  64U         /* Unit is bytes (8bit)       */
-
-/* For MCU's without USB host capability. */
-#if !defined( USB_ROUTE_VBUSENPEN )
-#define USB_VBUS_SWITCH_NOT_PRESENT
-#endif
-
-/* Limit imposed by the USB standard */
-#define MAX_USB_EP_NUM      15
-
-#if defined( USB_DEVICE )
-  /* Check power saving modes. */
-  #ifndef USB_PWRSAVE_MODE
-    /* Default powersave-mode is OFF. */
-    #define USB_PWRSAVE_MODE  USB_PWRSAVE_MODE_OFF
-  #else
-    #if ( USB_PWRSAVE_MODE                                               &  \
-          ~( USB_PWRSAVE_MODE_ONSUSPEND | USB_PWRSAVE_MODE_ONVBUSOFF |      \
-             USB_PWRSAVE_MODE_ENTEREM2                                 )    )
-      #error "Illegal USB powersave mode."
-    #endif
-  #endif /* ifndef USB_PWRSAVE_MODE */
-
-  /* Check power saving low frequency clock selection. */
-  #ifndef USB_USBC_32kHz_CLK
-    /* Default clock source is LFXO. */
-    #define USB_USBC_32kHz_CLK USB_USBC_32kHz_CLK_LFXO
-  #else
-    #if ( ( USB_USBC_32kHz_CLK != USB_USBC_32kHz_CLK_LFXO  ) &&  \
-          ( USB_USBC_32kHz_CLK != USB_USBC_32kHz_CLK_LFRCO )     )
-      #error "Illegal USB 32kHz powersave clock selection."
-    #endif
-  #endif /* ifndef USB_USBC_32kHz_CLK */
-#endif /* defined( USB_DEVICE ) */
-
-#if defined( USB_HOST )
-  /* Check VBUS overcurrent definitions. */
-  #ifndef USB_VBUSOVRCUR_PORT
-    #define USB_VBUSOVRCUR_PORT       gpioPortE
-    #define USB_VBUSOVRCUR_PIN        2
-    #define USB_VBUSOVRCUR_POLARITY   USB_VBUSOVRCUR_POLARITY_LOW
-  #endif
-#endif
-
-/* Developer mode debugging macro's */
-#if defined( DEBUG_USB_INT_LO )
-  #define DEBUG_USB_INT_LO_PUTS( s )    USB_PUTS( s )
-  #define DEBUG_USB_INT_LO_PUTCHAR( c ) USB_PUTCHAR( c )
-#else
-  #define DEBUG_USB_INT_LO_PUTS( s )
-  #define DEBUG_USB_INT_LO_PUTCHAR( c )
-#endif /* defined( DEBUG_USB_INT_LO ) */
-
-#if defined( DEBUG_USB_INT_HI )
-  #define DEBUG_USB_INT_HI_PUTS( s )    USB_PUTS( s )
-  #define DEBUG_USB_INT_HI_PUTCHAR( c ) USB_PUTCHAR( c )
-#else
-  #define DEBUG_USB_INT_HI_PUTS( s )
-  #define DEBUG_USB_INT_HI_PUTCHAR( c )
-#endif /* defined( DEBUG_USB_INT_HI ) */
-
-#if defined( USB_HOST )
-  #if defined( NUM_APP_TIMERS )
-    #define HOSTPORT_TIMER_INDEX  (NUM_APP_TIMERS)
-  #else
-    #define HOSTPORT_TIMER_INDEX  (0)
-  #endif
-  #define HOSTCH_TIMER_INDEX      (HOSTPORT_TIMER_INDEX + 1 )
-#endif
-
-/* Macros for selecting a hardware timer. */
-#define USB_TIMER0 0
-#define USB_TIMER1 1
-#define USB_TIMER2 2
-#define USB_TIMER3 3
-
-#if defined( USB_HOST )
-#define HCS_NAK       0x01
-#define HCS_STALL     0x02
-#define HCS_XACT      0x04
-#define HCS_TGLERR    0x08
-#define HCS_BABBLE    0x10
-#define HCS_TIMEOUT   0x20
-#define HCS_COMPLETED 0x40
-#define HCS_RETRY     0x80
-#endif
-
-#if defined( USB_DEVICE )
-typedef enum
-{
-  D_EP_IDLE          = 0,
-  D_EP_TRANSMITTING  = 1,
-  D_EP_RECEIVING     = 2,
-  D_EP0_IN_STATUS    = 3,
-  D_EP0_OUT_STATUS   = 4
-} USBD_EpState_TypeDef;
-
-typedef struct
-{
-  bool                        in;
-  uint8_t                     zlp;
-  uint8_t                     num;
-  uint8_t                     addr;
-  uint8_t                     type;
-  uint8_t                     txFifoNum;
-  uint8_t                     *buf;
-  uint16_t                    packetSize;
-  uint16_t                    mask;
-  uint32_t                    remaining;
-  uint32_t                    xferred;
-  uint32_t                    hwXferSize;
-  uint32_t                    fifoSize;
-  USBD_EpState_TypeDef        state;
-  USB_XferCompleteCb_TypeDef  xferCompleteCb;
-} USBD_Ep_TypeDef;
-
-typedef struct
-{
-  USB_Setup_TypeDef                     *setup;
-  USB_Setup_TypeDef                     setupPkt[3];
-  uint8_t                               configurationValue; /* Must be DWORD aligned */
-  bool                                  remoteWakeupEnabled;
-  uint8_t                               numberOfStrings;
-  uint8_t                               numberOfInterfaces;
-  USBD_State_TypeDef                    state;
-  USBD_State_TypeDef                    savedState;
-  USBD_State_TypeDef                    lastState;
-  const USB_DeviceDescriptor_TypeDef    *deviceDescriptor;
-  const USB_ConfigurationDescriptor_TypeDef *configDescriptor;
-  const void * const                    *stringDescriptors;
-  const USBD_Callbacks_TypeDef          *callbacks;
-  USBD_Ep_TypeDef                       ep[ NUM_EP_USED + 1 ];
-  uint8_t                               inEpAddr2EpIndex[  MAX_USB_EP_NUM + 1 ];
-  uint8_t                               outEpAddr2EpIndex[ MAX_USB_EP_NUM + 1 ];
-  uint32_t                              ep0MpsCode;
-} USBD_Device_TypeDef;
-#endif /* defined( USB_DEVICE ) */
-
-#if defined( USB_HOST )
-typedef enum
-{
-  H_PORT_DISCONNECTED         = 0,
-  H_PORT_CONNECTED_DEBOUNCING = 1,
-  H_PORT_CONNECTED_RESETTING  = 2,
-  H_PORT_CONNECTED            = 3,
-  H_PORT_OVERCURRENT          = 4
-} USBH_PortState_TypeDef;
-
-typedef struct
-{
-  int   debounceTime;
-  int   resetTime;
-} USBH_AttachTiming_TypeDef;
-
-typedef struct
-{
-  uint8_t                 *buf;
-  int                     errorCnt;
-  uint32_t                remaining;
-  uint32_t                xferred;
-  uint32_t                hwXferSize;
-  uint8_t                 status;
-  bool                    idle;
-  USBH_Ep_TypeDef         *ep;
-} USBH_Hc_TypeDef;
-#endif /* defined( USB_HOST ) */
-
-/** @endcond */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* defined( USB_DEVICE ) || defined( USB_HOST ) */
-#endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */
-#endif /* __EM_USBTYPES_H */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_Silicon_Labs/inc/usbconfig.h
--- a/USBDevice/TARGET_Silicon_Labs/inc/usbconfig.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-/***************************************************************************//**
- * @file usbconfig.h
- * @brief USB protocol stack library, application supplied configuration options.
- * @version 3.20.12
- *******************************************************************************
- * @section License
- * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
- *******************************************************************************
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************/
-
-#ifndef __USBCONFIG_H
-#define __USBCONFIG_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Compile stack for device mode. */
-#define USB_DEVICE
-
-/* Maximum number of endpoint used, EP0 excluded. If you change this, you must
-   also change USBEndpoints_EFM32.h to match. */
-#define NUM_EP_USED 6
-
-/* Power management modes. The following can be or'd toghether. See comments in
-   em_usbd.c under "Energy-saving modes" for more details.
-
-   USB_PWRSAVE_MODE_ONSUSPEND  Set USB peripheral in low power mode on suspend
-
-   USB_PWRSAVE_MODE_ONVBUSOFF  Set USB peripheral in low power mode when not
-   attached to a host. While this mode assumes that the internal voltage regulator
-   is used and that the VREGI pin of the chip is connected to VBUS it should
-   be safe to use given that VREGOSEN is always enabled. If you disable VREGOSEN
-   you must turn this off.
-
-   USB_PWRSAVE_MODE_ENTEREM2  Enter EM2 when USB peripheral is in low power mode.
-   On Mbed this allows the sleep() and deepsleep() calls to enter EM2, but
-   does not automatically enter any sleep states. Entering EM1 is always allowed.
-
-   Note for Happy Gecko, errata USB_E111: Entering EM2 when both the system clock
-   (HFCLK) and the USB core clock (USBCCLK) is running on USHFRCO will result in
-   a lock-up.
-*/
-#define USB_PWRSAVE_MODE  (USB_PWRSAVE_MODE_ONSUSPEND|USB_PWRSAVE_MODE_ONVBUSOFF|USB_PWRSAVE_MODE_ENTEREM2)
-
-/* Use dynamic memory to allocate rx/tx buffers in the HAL. Saves memory
-   as buffers are only allocated for used endpoints. The system malloc
-   must return memory that is aligned by 4.
-
-   Note: if you disable this, using isochronous endpoints with packet
-   sizes that are larger than the maximum for other EP types (64) will
-   not work. */
-#define USB_USE_DYNAMIC_MEMORY
-
-/* When the USB peripheral is set in low power mode, it must be clocked by a 32kHz
-   clock. Both LFXO and LFRCO can be used, but only LFXO guarantee USB specification
-   compliance. */
-#define USB_USBC_32kHz_CLK   USB_USBC_32kHz_CLK_LFXO
-
-/* Uncomment to get some debugging information. Default value for USER_PUTCHAR
-   should work for SiLabs Gecko boards. Printf requires a working retarget
-   implementation for write(). */
-//#define DEBUG_USB_API
-//#define USB_USE_PRINTF
-//#define USER_PUTCHAR   ITM_SendChar
-//#define DEBUG_USB_INT_HI
-//#define DEBUG_USB_INT_LO
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USBCONFIG_H */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_Silicon_Labs/src/em_usbd.c
--- a/USBDevice/TARGET_Silicon_Labs/src/em_usbd.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1438 +0,0 @@
-/**************************************************************************//**
- * @file em_usbd.c
- * @brief USB protocol stack library, device API.
- * @version 3.20.14
- ******************************************************************************
- * @section License
- * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
- *******************************************************************************
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************/
-
-#include "em_device.h"
-#if defined( USB_PRESENT ) && ( USB_COUNT == 1 )
-#include "em_usb.h"
-#if defined( USB_DEVICE )
-
-#include "em_cmu.h"
-#include "em_usbtypes.h"
-#include "em_usbhal.h"
-#include "em_usbd.h"
-
-/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
-
-static USBD_Device_TypeDef device;
-USBD_Device_TypeDef *dev = &device;
-
-static uint32_t totalRxFifoSize = 0, totalTxFifoSize = 0;
-static int numEps = 0;
-static int txFifoNum = 1;
-
-static void USBD_ResetEndpoints(void);
-extern USB_Status_TypeDef USBDHAL_ReconfigureFifos( uint32_t totalRxFifoSize,
-                                                    uint32_t totalTxFifoSize );
-#ifndef __MBED__
-static const char *stateNames[] =
-{
-  [ USBD_STATE_NONE       ] = "NONE      ",
-  [ USBD_STATE_ATTACHED   ] = "ATTACHED  ",
-  [ USBD_STATE_POWERED    ] = "POWERED   ",
-  [ USBD_STATE_DEFAULT    ] = "DEFAULT   ",
-  [ USBD_STATE_ADDRESSED  ] = "ADDRESSED ",
-  [ USBD_STATE_CONFIGURED ] = "CONFIGURED",
-  [ USBD_STATE_SUSPENDED  ] = "SUSPENDED ",
-  [ USBD_STATE_LASTMARKER ] = "UNDEFINED "
-};
-#endif
-
-/** @endcond */
-
-/***************************************************************************//**
- * @brief
- *   Abort all pending transfers.
- *
- * @details
- *   Aborts transfers for all endpoints currently in use. Pending
- *   transfers on the default endpoint (EP0) are not aborted.
- ******************************************************************************/
-void USBD_AbortAllTransfers( void )
-{
-  INT_Disable();
-  USBDHAL_AbortAllTransfers( USB_STATUS_EP_ABORTED );
-  INT_Enable();
-}
-
-/***************************************************************************//**
- * @brief
- *   Abort a pending transfer on a specific endpoint.
- *
- * @param[in] epAddr
- *   The address of the endpoint to abort.
- ******************************************************************************/
-int USBD_AbortTransfer( int epAddr )
-{
-  USB_XferCompleteCb_TypeDef callback;
-  USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
-
-  if ( ep == NULL )
-  {
-    DEBUG_USB_API_PUTS( "\nUSBD_AbortTransfer(), Illegal endpoint" );
-    EFM_ASSERT( false );
-    return USB_STATUS_ILLEGAL;
-  }
-
-  if ( ep->num == 0 )
-  {
-    DEBUG_USB_API_PUTS( "\nUSBD_AbortTransfer(), Illegal endpoint" );
-    EFM_ASSERT( false );
-    return USB_STATUS_ILLEGAL;
-  }
-
-  INT_Disable();
-  if ( ep->state == D_EP_IDLE )
-  {
-    INT_Enable();
-    return USB_STATUS_OK;
-  }
-
-  USBD_AbortEp( ep );
-
-  ep->state = D_EP_IDLE;
-  if ( ep->xferCompleteCb )
-  {
-    callback = ep->xferCompleteCb;
-    ep->xferCompleteCb = NULL;
-
-    if ( ( dev->lastState == USBD_STATE_CONFIGURED ) &&
-         ( dev->state     == USBD_STATE_ADDRESSED  )    )
-    {
-      USBDHAL_DeactivateEp( ep );
-    }
-
-    DEBUG_TRACE_ABORT( USB_STATUS_EP_ABORTED );
-    callback( USB_STATUS_EP_ABORTED, ep->xferred, ep->remaining );
-  }
-
-  INT_Enable();
-  return USB_STATUS_OK;
-}
-
-/***************************************************************************//**
- * @brief
- *   Start USB device operation.
- *
- * @details
- *   Device operation is started by connecting a pullup resistor on the
- *   appropriate USB data line.
- ******************************************************************************/
-void USBD_Connect( void )
-{
-  INT_Disable();
-  USBDHAL_Connect();
-  INT_Enable();
-}
-
-/***************************************************************************//**
- * @brief
- *   Stop USB device operation.
- *
- * @details
- *   Device operation is stopped by disconnecting the pullup resistor from the
- *   appropriate USB data line. Often referred to as a "soft" disconnect.
- ******************************************************************************/
-void USBD_Disconnect( void )
-{
-  INT_Disable();
-  USBDHAL_Disconnect();
-  INT_Enable();
-}
-
-/***************************************************************************//**
- * @brief
- *   Check if an endpoint is busy doing a transfer.
- *
- * @param[in] epAddr
- *   The address of the endpoint to check.
- *
- * @return
- *   True if endpoint is busy, false otherwise.
- ******************************************************************************/
-bool USBD_EpIsBusy( int epAddr )
-{
-  USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
-
-  if ( ep == NULL )
-  {
-    DEBUG_USB_API_PUTS( "\nUSBD_EpIsBusy(), Illegal endpoint" );
-    EFM_ASSERT( false );
-    return USB_STATUS_ILLEGAL;
-  }
-
-  if ( ep->state == D_EP_IDLE )
-    return false;
-
-  return true;
-}
-
-/***************************************************************************//**
- * @brief
- *   Get current USB device state.
- *
- * @return
- *   Device USB state. See @ref USBD_State_TypeDef.
- ******************************************************************************/
-USBD_State_TypeDef USBD_GetUsbState( void )
-{
-  return dev->state;
-}
-
-/***************************************************************************//**
- * @brief
- *   Get a string naming a device USB state.
- *
- * @param[in] state
- *   Device USB state. See @ref USBD_State_TypeDef.
- *
- * @return
- *   State name string pointer.
- ******************************************************************************/
-const char *USBD_GetUsbStateName( USBD_State_TypeDef state )
-{
-  if ( state > USBD_STATE_LASTMARKER )
-    state = USBD_STATE_LASTMARKER;
-
-#ifndef __MBED__
-  return stateNames[ state ];
-#else
-  return NULL;
-#endif
-}
-
-/***************************************************************************//**
- * @brief
- *   Initializes USB device hardware and internal protocol stack data structures,
- *   then connects the data-line (D+ or D-) pullup resistor to signal host that
- *   enumeration can begin.
- *
- * @note
- *   You may later use @ref USBD_Disconnect() and @ref USBD_Connect() to force
- *   reenumeration.
- *
- * @param[in] p
- *   Pointer to device initialization struct. See @ref USBD_Init_TypeDef.
- *
- * @return
- *   @ref USB_STATUS_OK on success, else an appropriate error code.
- ******************************************************************************/
-int USBD_Init( const USBD_Init_TypeDef *p )
-{
-  USBD_Ep_TypeDef *ep;
-
-#if !defined( USB_CORECLK_HFRCO ) || !defined( CMU_OSCENCMD_USHFRCOEN )
-  /* Devices supporting crystal-less USB can use HFRCO or HFXO as core clock. */
-  /* All other devices must use HFXO as core clock.                           */
-  if ( CMU_ClockSelectGet( cmuClock_HF ) != cmuSelect_HFXO )
-  {
-    CMU_ClockSelectSet( cmuClock_HF, cmuSelect_HFXO );
-  }
-#endif
-
-#if !defined( CMU_OSCENCMD_USHFRCOEN )
-#if ( USB_USBC_32kHz_CLK == USB_USBC_32kHz_CLK_LFXO )
-  CMU_OscillatorEnable(cmuOsc_LFXO, true, false);
-#else
-  CMU_OscillatorEnable(cmuOsc_LFRCO, true, false);
-#endif
-
-#else
-  CMU_ClockEnable(cmuClock_CORELE, true);
-  /* LFC clock is needed to detect USB suspend when LEMIDLE is activated. */
-#if ( USB_USBC_32kHz_CLK == USB_USBC_32kHz_CLK_LFXO )
-  CMU_ClockSelectSet(cmuClock_LFC, cmuSelect_LFXO);
-#else
-  CMU_ClockSelectSet(cmuClock_LFC, cmuSelect_LFRCO);
-#endif
-  CMU_ClockEnable(cmuClock_USBLE, true);
-#endif
-
-  USBTIMER_Init();
-
-  memset( dev, 0, sizeof( USBD_Device_TypeDef ) );
-
-  dev->setup                = dev->setupPkt;
-  dev->state                = USBD_STATE_LASTMARKER;
-  dev->savedState           = USBD_STATE_NONE;
-  dev->lastState            = USBD_STATE_NONE;
-  dev->callbacks            = p->callbacks;
-  dev->remoteWakeupEnabled  = false;
-
-  /* Initialize EP0 */
-
-  ep                 = &dev->ep[ 0 ];
-  ep->in             = false;
-  ep->buf            = NULL;
-  ep->num            = 0;
-  ep->mask           = 1;
-  ep->addr           = 0;
-  ep->type           = USB_EPTYPE_CTRL;
-  ep->txFifoNum      = 0;
-
-  /* FIXME! */
-  ep->packetSize     = 64;
-  dev->ep0MpsCode = _USB_DOEP0CTL_MPS_64B;
-
-  ep->remaining      = 0;
-  ep->xferred        = 0;
-  ep->state          = D_EP_IDLE;
-  ep->xferCompleteCb = NULL;
-  ep->fifoSize       = ep->packetSize / 4;
-
-  totalTxFifoSize = ep->fifoSize * p->bufferingMultiplier[ 0 ];
-  totalRxFifoSize = (ep->fifoSize + 1) * p->bufferingMultiplier[ 0 ];
-
-  /* Rx-FIFO size: SETUP packets : 4*n + 6    n=#CTRL EP's
-   *               GOTNAK        : 1
-   *               Status info   : 2*n        n=#OUT EP's (EP0 included) in HW
-   */
-  totalRxFifoSize += 10 + 1 + ( 2 * (MAX_NUM_OUT_EPS + 1) );
-
-  INT_Disable();
-
-  /* Enable USB clock */
-  CMU->HFCORECLKEN0 |= CMU_HFCORECLKEN0_USB | CMU_HFCORECLKEN0_USBC;
-
-#if defined( CMU_OSCENCMD_USHFRCOEN )
-  CMU->USHFRCOCONF = CMU_USHFRCOCONF_BAND_48MHZ;
-  CMU_ClockSelectSet( cmuClock_USBC, cmuSelect_USHFRCO );
-
-  /* Enable USHFRCO Clock Recovery mode. */
-  CMU->USBCRCTRL |= CMU_USBCRCTRL_EN;
-
-  /* Turn on Low Energy Mode (LEM) features. */
-  USB->CTRL = USB_CTRL_LEMOSCCTRL_GATE
-              | USB_CTRL_LEMIDLEEN
-              | USB_CTRL_LEMPHYCTRL;
-#else
-  CMU_ClockSelectSet( cmuClock_USBC, cmuSelect_HFCLK );
-#endif
-
-  USBHAL_DisableGlobalInt();
-
-  if ( USBDHAL_CoreInit( totalRxFifoSize, totalTxFifoSize ) == USB_STATUS_OK )
-  {
-    USBDHAL_EnableUsbResetAndSuspendInt();
-    USBHAL_EnableGlobalInt();
-    NVIC_ClearPendingIRQ( USB_IRQn );
-    NVIC_EnableIRQ( USB_IRQn );
-  }
-  else
-  {
-    INT_Enable();
-    DEBUG_USB_API_PUTS( "\nUSBD_Init(), FIFO setup error" );
-    EFM_ASSERT( false );
-    return USB_STATUS_ILLEGAL;
-  }
-
-#if ( USB_PWRSAVE_MODE & USB_PWRSAVE_MODE_ONVBUSOFF )
-  if ( USBHAL_VbusIsOn() )
-  {
-    USBD_SetUsbState( USBD_STATE_POWERED );
-  }
-  else
-#endif
-  {
-    USBD_SetUsbState( USBD_STATE_NONE );
-  }
-
-  INT_Enable();
-  return USB_STATUS_OK;
-}
-
-/***************************************************************************//**
- * @brief
- *   Start a read (OUT) transfer on an endpoint.
- *
- * @note
- *   The transfer buffer length must be a multiple of 4 bytes in length and
- *   WORD (4 byte) aligned. When allocating the buffer, round buffer length up.
- *   If it is possible that the host will send more data than your device
- *   expects, round buffer size up to the next multiple of maxpacket size.
- *
- * @param[in] epAddr
- *   Endpoint address.
- *
- * @param[in] data
- *   Pointer to transfer data buffer.
- *
- * @param[in] byteCount
- *   Transfer length.
- *
- * @param[in] callback
- *   Function to be called on transfer completion. Supply NULL if no callback
- *   is needed. See @ref USB_XferCompleteCb_TypeDef.
- *
- * @return
- *   @ref USB_STATUS_OK on success, else an appropriate error code.
- ******************************************************************************/
-int USBD_Read( int epAddr, void *data, int byteCount,
-               USB_XferCompleteCb_TypeDef callback )
-{
-  USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
-
-  USB_PRINTF("USBD: Read addr %x, data %p, size %d, cb 0x%lx\n",
-             epAddr, data, byteCount, (uint32_t)callback);
-
-  if ( ep == NULL )
-  {
-    DEBUG_USB_API_PUTS( "\nUSBD_Read(), Illegal endpoint" );
-    EFM_ASSERT( false );
-    return USB_STATUS_ILLEGAL;
-  }
-
-  if ( (   byteCount > MAX_XFER_LEN                           ) ||
-       ( ( byteCount / ep->packetSize ) > MAX_PACKETS_PR_XFER )    )
-  {
-    DEBUG_USB_API_PUTS( "\nUSBD_Read(), Illegal transfer size" );
-    EFM_ASSERT( false );
-    return USB_STATUS_ILLEGAL;
-  }
-
-  if ( (uint32_t)data & 3 )
-  {
-    DEBUG_USB_API_PUTS( "\nUSBD_Read(), Misaligned data buffer" );
-    EFM_ASSERT( false );
-    return USB_STATUS_ILLEGAL;
-  }
-
-  INT_Disable();
-  if ( USBDHAL_EpIsStalled( ep ) )
-  {
-    INT_Enable();
-    DEBUG_USB_API_PUTS( "\nUSBD_Read(), Endpoint is halted" );
-    return USB_STATUS_EP_STALLED;
-  }
-
-  if ( ep->state != D_EP_IDLE )
-  {
-    INT_Enable();
-    DEBUG_USB_API_PUTS( "\nUSBD_Read(), Endpoint is busy" );
-    return USB_STATUS_EP_BUSY;
-  }
-
-  if ( ( ep->num > 0 ) && ( USBD_GetUsbState() != USBD_STATE_CONFIGURED ) )
-  {
-    INT_Enable();
-    DEBUG_USB_API_PUTS( "\nUSBD_Read(), Device not configured" );
-    return USB_STATUS_DEVICE_UNCONFIGURED;
-  }
-
-  ep->buf       = (uint8_t*)data;
-  ep->remaining = byteCount;
-  ep->xferred   = 0;
-
-  if ( ep->num == 0 )
-  {
-    ep->in = false;
-  }
-  else if ( ep->in != false )
-  {
-    INT_Enable();
-    DEBUG_USB_API_PUTS( "\nUSBD_Read(), Illegal EP direction" );
-    EFM_ASSERT( false );
-    return USB_STATUS_ILLEGAL;
-  }
-
-  ep->state          = D_EP_RECEIVING;
-  ep->xferCompleteCb = callback;
-
-  USBD_ArmEp( ep );
-  INT_Enable();
-  return USB_STATUS_OK;
-}
-
-/***************************************************************************//**
- * @brief
- *   Perform a remote wakeup signalling sequence.
- *
- * @note
- *   It is the responsibility of the application to ensure that remote wakeup
- *   is not attempted before the device has been suspended for at least 5
- *   miliseconds. This function should not be called from within an interrupt
- *   handler.
- *
- * @return
- *   @ref USB_STATUS_OK on success, else an appropriate error code.
- ******************************************************************************/
-int USBD_RemoteWakeup( void )
-{
-  INT_Disable();
-
-  if ( ( dev->state != USBD_STATE_SUSPENDED ) ||
-       ( dev->remoteWakeupEnabled == false  )    )
-  {
-    INT_Enable();
-    DEBUG_USB_API_PUTS( "\nUSBD_RemoteWakeup(), Illegal remote wakeup" );
-    return USB_STATUS_ILLEGAL;
-  }
-
-  USBDHAL_SetRemoteWakeup();
-  INT_Enable();
-  USBTIMER_DelayMs( 10 );
-  INT_Disable();
-  USBDHAL_ClearRemoteWakeup();
-  INT_Enable();
-  return USB_STATUS_OK;
-}
-
-/***************************************************************************//**
- * @brief
- *   Check if it is ok to enter energy mode EM2.
- *
- * @note
- *   Before entering EM2 both the USB hardware and the USB stack must be in a
- *   certain state, this function checks if all conditions for entering EM2
- *   is met.
- *   Refer to the @ref usb_device_powersave section for more information.
- *
- * @return
- *   True if ok to enter EM2, false otherwise.
- ******************************************************************************/
-bool USBD_SafeToEnterEM2( void )
-{
-#if ( USB_PWRSAVE_MODE )
-  return USBD_poweredDown ? true : false;
-#else
-  return false;
-#endif
-}
-
-/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
-
-void USBD_SetUsbState( USBD_State_TypeDef newState )
-{
-  USBD_State_TypeDef currentState;
-
-  currentState = dev->state;
-  if ( newState == USBD_STATE_SUSPENDED )
-  {
-    dev->savedState = currentState;
-  }
-
-  dev->lastState = dev->state;
-  dev->state = newState;
-
-  if ( ( dev->callbacks->usbStateChange ) &&
-       ( currentState != newState       )    )
-  {
-    /* When we transition to a state "lower" than CONFIGURED
-     * we must reset the endpoint data
-     */
-    if ( (dev->lastState == USBD_STATE_CONFIGURED ||
-          dev->lastState == USBD_STATE_SUSPENDED ) &&
-         dev->state < USBD_STATE_CONFIGURED )
-    {
-      USBD_ResetEndpoints();
-    }
-
-    dev->callbacks->usbStateChange( currentState, newState );
-  }
-}
-
-/** @endcond */
-
-/***************************************************************************//**
- * @brief
- *   Set an endpoint in the stalled (halted) state.
- *
- * @param[in] epAddr
- *   The address of the endpoint to stall.
- *
- * @return
- *   @ref USB_STATUS_OK on success, else an appropriate error code.
- ******************************************************************************/
-int USBD_StallEp( int epAddr )
-{
-  USB_Status_TypeDef retVal;
-  USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
-
-  if ( ep == NULL )
-  {
-    DEBUG_USB_API_PUTS( "\nUSBD_StallEp(), Illegal request" );
-    EFM_ASSERT( false );
-    return USB_STATUS_ILLEGAL;
-  }
-
-  if ( ep->num == 0 )
-  {
-    DEBUG_USB_API_PUTS( "\nUSBD_StallEp(), Illegal endpoint" );
-    EFM_ASSERT( false );
-    return USB_STATUS_ILLEGAL;
-  }
-
-  INT_Disable();
-  retVal = USBDHAL_StallEp( ep );
-  INT_Enable();
-
-  if ( retVal != USB_STATUS_OK )
-  {
-    retVal = USB_STATUS_ILLEGAL;
-  }
-
-  return retVal;
-}
-
-/***************************************************************************//**
- * @brief
- *   Stop USB device stack operation.
- *
- * @details
- *   The data-line pullup resistor is turned off, USB interrupts are disabled,
- *   and finally the USB pins are disabled.
- ******************************************************************************/
-void USBD_Stop( void )
-{
-  USBD_Disconnect();
-  NVIC_DisableIRQ( USB_IRQn );
-  USBHAL_DisableGlobalInt();
-  USBHAL_DisableUsbInt();
-  USBHAL_DisablePhyPins();
-  USBD_SetUsbState( USBD_STATE_NONE );
-  /* Turn off USB clocks. */
-  CMU->HFCORECLKEN0 &= ~(CMU_HFCORECLKEN0_USB | CMU_HFCORECLKEN0_USBC);
-}
-
-/***************************************************************************//**
- * @brief
- *   Reset stall state on a stalled (halted) endpoint.
- *
- * @param[in] epAddr
- *   The address of the endpoint to un-stall.
- *
- * @return
- *   @ref USB_STATUS_OK on success, else an appropriate error code.
- ******************************************************************************/
-int USBD_UnStallEp( int epAddr )
-{
-  USB_Status_TypeDef retVal;
-  USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
-
-  if ( ep == NULL )
-  {
-    DEBUG_USB_API_PUTS( "\nUSBD_UnStallEp(), Illegal request" );
-    EFM_ASSERT( false );
-    return USB_STATUS_ILLEGAL;
-  }
-
-  if ( ep->num == 0 )
-  {
-    DEBUG_USB_API_PUTS( "\nUSBD_UnStallEp(), Illegal endpoint" );
-    EFM_ASSERT( false );
-    return USB_STATUS_ILLEGAL;
-  }
-
-  INT_Disable();
-  retVal = USBDHAL_UnStallEp( ep );
-  INT_Enable();
-
-  if ( retVal != USB_STATUS_OK )
-  {
-    retVal = USB_STATUS_ILLEGAL;
-  }
-
-  return retVal;
-}
-
-/***************************************************************************//**
- * @brief
- *   Start a write (IN) transfer on an endpoint.
- *
- * @param[in] epAddr
- *   Endpoint address.
- *
- * @param[in] data
- *   Pointer to transfer data buffer. This buffer must be WORD (4 byte) aligned.
- *
- * @param[in] byteCount
- *   Transfer length.
- *
- * @param[in] callback
- *   Function to be called on transfer completion. Supply NULL if no callback
- *   is needed. See @ref USB_XferCompleteCb_TypeDef.
- *
- * @return
- *   @ref USB_STATUS_OK on success, else an appropriate error code.
- ******************************************************************************/
-int USBD_Write( int epAddr, void *data, int byteCount,
-                USB_XferCompleteCb_TypeDef callback )
-{
-  USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
-
-  USB_PRINTF("USBD: Write addr %x, data %p, size %d, cb 0x%lx\n",
-             epAddr, data, byteCount, (uint32_t)callback);
-
-  if ( ep == NULL )
-  {
-    DEBUG_USB_API_PUTS( "\nUSBD_Write(), Illegal endpoint" );
-    EFM_ASSERT( false );
-    return USB_STATUS_ILLEGAL;
-  }
-
-  if ( (   byteCount > MAX_XFER_LEN                           ) ||
-       ( ( byteCount / ep->packetSize ) > MAX_PACKETS_PR_XFER )    )
-  {
-    DEBUG_USB_API_PUTS( "\nUSBD_Write(), Illegal transfer size" );
-    EFM_ASSERT( false );
-    return USB_STATUS_ILLEGAL;
-  }
-
-  if ( (uint32_t)data & 3 )
-  {
-    DEBUG_USB_API_PUTS( "\nUSBD_Write(), Misaligned data buffer" );
-    EFM_ASSERT( false );
-    return USB_STATUS_ILLEGAL;
-  }
-
-  INT_Disable();
-  if ( USBDHAL_EpIsStalled( ep ) )
-  {
-    INT_Enable();
-    DEBUG_USB_API_PUTS( "\nUSBD_Write(), Endpoint is halted" );
-    return USB_STATUS_EP_STALLED;
-  }
-
-  if ( ep->state != D_EP_IDLE )
-  {
-    INT_Enable();
-    DEBUG_USB_API_PUTS( "\nUSBD_Write(), Endpoint is busy" );
-    return USB_STATUS_EP_BUSY;
-  }
-
-  if ( ( ep->num > 0 ) && ( USBD_GetUsbState() != USBD_STATE_CONFIGURED ) )
-  {
-    INT_Enable();
-    DEBUG_USB_API_PUTS( "\nUSBD_Write(), Device not configured" );
-    return USB_STATUS_DEVICE_UNCONFIGURED;
-  }
-
-  ep->buf       = (uint8_t*)data;
-  ep->remaining = byteCount;
-  ep->xferred   = 0;
-
-  if ( ep->num == 0 )
-  {
-    ep->in = true;
-  }
-  else if ( ep->in != true )
-  {
-    INT_Enable();
-    DEBUG_USB_API_PUTS( "\nUSBD_Write(), Illegal EP direction" );
-    EFM_ASSERT( false );
-    return USB_STATUS_ILLEGAL;
-  }
-
-  ep->state          = D_EP_TRANSMITTING;
-  ep->xferCompleteCb = callback;
-
-  USBD_ArmEp( ep );
-  INT_Enable();
-  return USB_STATUS_OK;
-}
-
-int USBD_SetAddress(uint8_t addr)
-{
-  int retVal = USB_STATUS_REQ_ERR;
-
-  if ( dev->state == USBD_STATE_DEFAULT )
-  {
-    if ( addr != 0 )
-    {
-      USBD_SetUsbState( USBD_STATE_ADDRESSED );
-    }
-    USBDHAL_SetAddr( addr );
-    retVal = USB_STATUS_OK;
-  }
-  else if ( dev->state == USBD_STATE_ADDRESSED )
-  {
-    if ( addr == 0 )
-    {
-      USBD_SetUsbState( USBD_STATE_DEFAULT );
-    }
-    USBDHAL_SetAddr( addr );
-    retVal = USB_STATUS_OK;
-  }
-
-  return retVal;
-}
-
-/***************************************************************************//**
- * @brief
- *   Query the stall state of an endpoint
- *
- * @param[in] epAddr
- *   The address of the endpoint to query.
- *
- * @return
- *   True if endpoint is stalled, false otherwise
- ******************************************************************************/
-int USBD_EpIsStalled(int epAddr)
-{
-  USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
-
-  if( !ep )
-  {
-    return false;
-  }
-
-  return USBDHAL_EpIsStalled(ep);
-}
-
-/***************************************************************************//**
- * @brief
- *   Reset (remove) all client endpoints
- *
- * @details
- *   Removes client endpoints, and resets the RX/TX fifos. No endpoints
- *   other than EP0 can be used until added with @ref USBD_AddEndpoint.
- ******************************************************************************/
-static void USBD_ResetEndpoints(void)
-{
-  USBD_Ep_TypeDef *ep = &dev->ep[0];
-
-  numEps = 0;
-  txFifoNum = 1;
-
-  totalTxFifoSize  = ep->fifoSize * 1;
-  totalRxFifoSize  = (ep->fifoSize + 1) * 1;
-  totalRxFifoSize += 10 + 1 + ( 2 * (MAX_NUM_OUT_EPS + 1) );
-}
-
-/***************************************************************************//**
- * @brief
- *   Add a new endpoint
- *
- * @param[in] epAddr
- *   Endpoint address
- *
- * @param[in] transferType
- *   Endpoint type, one of @ref USB_EPTYPE_BULK, @ref USB_EPTYPE_INTR or
- *   @ref USB_EPTYPE_ISOC.
- *
- * @param[in] maxPacketSize
- *   Maximum packet size of the new endpoint, in bytes
- *
- * @param[in] bufferMult
- *   FIFO buffer size multiplier
- *
- * @return
- *   @ref USB_STATUS_OK on success, else an appropriate error code.
- ******************************************************************************/
-int USBD_AddEndpoint(int epAddr, int transferType,
-                     int maxPacketSize, int bufferMult)
-{
-  USBD_Ep_TypeDef *ep;
-
-  numEps++;
-
-  ep                 = &dev->ep[ numEps ];
-  ep->in             = ( epAddr & USB_SETUP_DIR_MASK ) != 0;
-  ep->buf            = NULL;
-  ep->addr           = epAddr;
-  ep->num            = ep->addr & USB_EPNUM_MASK;
-  ep->mask           = 1 << ep->num;
-  ep->type           = transferType;
-  ep->packetSize     = maxPacketSize;
-  ep->remaining      = 0;
-  ep->xferred        = 0;
-  ep->state          = D_EP_IDLE;
-  ep->xferCompleteCb = NULL;
-
-  if ( ep->in )
-  {
-    ep->txFifoNum = txFifoNum++;
-    ep->fifoSize = ( ( ep->packetSize + 3 ) / 4 ) * bufferMult;
-    dev->inEpAddr2EpIndex[ ep->num ] = numEps;
-    totalTxFifoSize += ep->fifoSize;
-
-    if ( ep->num > MAX_NUM_IN_EPS )
-    {
-      DEBUG_USB_API_PUTS( "\nUSBD_AddEndpoint(), Illegal IN EP address" );
-      EFM_ASSERT( false );
-      return USB_STATUS_ILLEGAL;
-    }
-  }
-  else
-  {
-    ep->fifoSize = ( ( ( ep->packetSize + 3 ) / 4 ) + 1 ) * bufferMult;
-    dev->outEpAddr2EpIndex[ ep->num ] = numEps;
-    totalRxFifoSize += ep->fifoSize;
-
-    if ( ep->num > MAX_NUM_OUT_EPS )
-    {
-      DEBUG_USB_API_PUTS( "\nUSBD_AddEndpoint(), Illegal OUT EP address" );
-      EFM_ASSERT( false );
-      return USB_STATUS_ILLEGAL;
-    }
-  }
-
-  USB_PRINTF("USBD: Added endpoint %d to slot %d, in %d, addr 0x%x, type %d, ps %d, fifo %ld (total tx %ld, rx %ld)\n",
-             ep->num, numEps, ep->in, ep->addr, ep->type, ep->packetSize, ep->fifoSize,
-             totalTxFifoSize, totalRxFifoSize);
-
-  INT_Disable();
-#if defined( CMU_OSCENCMD_USHFRCOEN )
-  /* Happy Gecko workaround: disable LEM GATE mode if using ISOC endpoints. */
-  if ( transferType == USB_EPTYPE_ISOC )
-  {
-      USB->CTRL = (USB->CTRL & ~_USB_CTRL_LEMOSCCTRL_MASK) | USB_CTRL_LEMOSCCTRL_NONE;
-  }
-#endif
-
-  int ret = USBDHAL_ReconfigureFifos(totalRxFifoSize, totalTxFifoSize);
-  INT_Enable();
-
-  if( ret != USB_STATUS_OK ) {
-    return ret;
-  }
-
-  USBDHAL_ActivateEp(ep, false);
-
-  return USB_STATUS_OK;
-}
-
-
-/***************************************************************************//**
- * @brief
- *   Set an endpoint0 in the stalled (halted) state.
- *
- * @details
- *   Temporarily stalls endpoint 0. Used to signal a failure to respond to
- *   the host's setup packet.
- ******************************************************************************/
-void USBD_StallEp0()
-{
-    int const epAddr = 0;
-    USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
-    ep->in = true;
-    USBDHAL_StallEp( ep ); /* Stall Ep0 IN */
-    ep->in = false; /* OUT for next SETUP */
-    USBDHAL_StallEp( ep ); /* Stall Ep0 OUT */
-#if !defined( USB_DOEP0INT_STUPPKTRCVD )
-    USBDHAL_ReenableEp0Setup( dev ); /* Prepare for next SETUP pkt. */
-#else
-    USBDHAL_StartEp0Setup( dev );
-#endif
-    ep->state = D_EP_IDLE;
-}
-
-/******** THE REST OF THE FILE IS DOCUMENTATION ONLY !**********************//**
- * @{
-
-@page usb_device USB device stack library
-
-  The source files for the USB device stack resides in the usb directory
-  and follows the naming convention: em_usbd<em>nnn</em>.c/h.
-
-  @li @ref usb_device_intro
-  @li @ref usb_device_api
-  @li @ref usb_device_conf
-  @li @ref usb_device_powersave
-  @li @ref usb_device_example1
-
-
-@n @section usb_device_intro Introduction
-
-  The USB device protocol stack provides an API which makes it possible to
-  create USB devices with a minimum of effort. The device stack supports control,
-  bulk and interrupt transfers.
-
-  The stack is highly configurable to suit various needs, it does also contain
-  useful debugging features together with several demonstration projects to
-  get you started fast.
-
-  We recommend that you read through this documentation, then proceed to build
-  and test a few example projects before you start designing your own device.
-
-@n @section usb_device_api The device stack API
-
-  This section contains brief descriptions of the functions in the API. You will
-  find detailed information on input and output parameters and return values by
-  clicking on the hyperlinked function names. It is also a good idea to study
-  the code in the USB demonstration projects.
-
-  Your application code must include one header file: @em em_usb.h.
-
-  All functions defined in the API can be called from within interrupt handlers.
-
-  The USB stack use a hardware timer to keep track of time. TIMER0 is the
-  default choice, refer to @ref usb_device_conf for other possibilities.
-  Your application must not use the selected timer.
-
-  <b>Pitfalls:</b>@n
-    The USB peripheral will fill your receive buffers in quantities of WORD's
-    (4 bytes). Transmit and receive buffers must be WORD aligned, in
-    addition when allocating storage for receive buffers, round size up to
-    next WORD boundary. If it is possible that the host will send more data
-    than your device expects, round buffer size up to the next multiple of
-    maxpacket size for the relevant endpoint to avoid data corruption.
-
-    Transmit buffers passed to @htmlonly USBD_Write() @endhtmlonly must be
-    statically allocated because @htmlonly USBD_Write() @endhtmlonly only
-    initiates the transfer. When the host decide to actually perform the
-    transfer, your data must be available.
-
-  @n @ref USBD_Init() @n
-    This function is called to register your device and all its properties with
-    the device stack. The application must fill in a @ref USBD_Init_TypeDef
-    structure prior to calling. Refer to @ref DeviceInitCallbacks for the
-    optional callback functions defined within this structure. When this
-    function has been called your device is ready to be enumerated by the USB
-    host.
-
-  @ref USBD_Read(), @ref USBD_Write() @n
-    These functions initiate data transfers.
-    @n @htmlonly USBD_Read() @endhtmlonly initiate a transfer of data @em
-    from host @em to device (an @em OUT transfer in USB terminology).
-    @n @htmlonly USBD_Write() @endhtmlonly initiate a transfer of data @em from
-    device @em to host (an @em IN transfer).
-
-    When the USB host actually performs the transfer, your application will be
-    notified by means of a callback function which you provide (optionally).
-    Refer to @ref TransferCallback for details of the callback functionality.
-
-  @ref USBD_AbortTransfer(), @ref USBD_AbortAllTransfers() @n
-    These functions terminate transfers that are initiated, but has not yet
-    taken place. If a transfer is initiated with @htmlonly USBD_Read()
-    or USBD_Write(), @endhtmlonly but the USB host never actually peform
-    the transfers, these functions will deactivate the transfer setup to make
-    the USB device endpoint hardware ready for new (and potentially) different
-    transfers.
-
-  @ref USBD_Connect(), @ref USBD_Disconnect() @n
-    These functions turns the data-line (D+ or D-) pullup on or off. They can be
-    used to force reenumeration. It's good practice to delay at least one second
-    between @htmlonly USBD_Disconnect() and USBD_Connect() @endhtmlonly
-    to allow the USB host to unload the currently active device driver.
-
-  @ref USBD_EpIsBusy() @n
-    Check if an endpoint is busy.
-
-  @ref USBD_StallEp(), @ref USBD_UnStallEp() @n
-    These functions stalls or un-stalls an endpoint. This functionality may not
-    be needed by your application, but the USB device stack use them in response
-    to standard setup commands SET_FEATURE and CLEAR_FEATURE. They may be useful
-    when implementing some USB classes, e.g. a mass storage device use them
-    extensively.
-
-  @ref USBD_RemoteWakeup() @n
-    Used in SUSPENDED state (see @ref USB_Status_TypeDef) to signal resume to
-    host. It's the applications responsibility to adhere to the USB standard
-    which states that a device can not signal resume before it has been
-    SUSPENDED for at least 5 ms. The function will also check the configuration
-    descriptor defined by the application to see if it is legal for the device
-    to signal resume.
-
-  @ref USBD_GetUsbState() @n
-    Returns the device USB state (see @ref USBD_State_TypeDef). Refer to
-    Figure 9-1. "Device State Diagram" in the USB revision 2.0 specification.
-
-  @ref USBD_GetUsbStateName() @n
-    Returns a text string naming a given USB device state.
-
-  @ref USBD_SafeToEnterEM2() @n
-    Check if it is ok to enter energy mode EM2. Refer to the
-    @ref usb_device_powersave section for more information.
-
-  @n @anchor TransferCallback <b>The transfer complete callback function:</b> @n
-    @n USB_XferCompleteCb_TypeDef() is called when a transfer completes. It is
-    called with three parameters, the status of the transfer, the number of
-    bytes transferred and the number of bytes remaining. It may not always be
-    needed to have a callback on transfer completion, but you should keep in
-    mind that a transfer may be aborted when you least expect it. A transfer
-    will be aborted if host stalls the endpoint, if host resets your device, if
-    host unconfigures your device or if you unplug your device cable and the
-    device is selfpowered.
-    @htmlonly USB_XferCompleteCb_TypeDef() @endhtmlonly is also called if your
-    application use @htmlonly USBD_AbortTransfer() or USBD_AbortAllTransfers()
-    @endhtmlonly calls.
-    @note This callback is called from within an interrupt handler with
-          interrupts disabled.
-
-  @n @anchor DeviceInitCallbacks <b>Optional callbacks passed to the stack via
-    the @ref USBD_Init() function:</b> @n
-    @n These callbacks are all optional, and it is up to the application
-    programmer to decide if the application needs the functionality they
-    provide.
-    @note These callbacks are all called from within an interrupt handler
-          with interrupts disabled.
-
-  USBD_UsbResetCb_TypeDef() is called each time reset signalling is sensed on
-    the USB wire.
-
-  @n USBD_SofIntCb_TypeDef() is called with framenumber as a parameter on
-    each SOF interrupt.
-
-  @n USBD_DeviceStateChangeCb_TypeDef() is called whenever the device state
-    change. Useful for detecting e.g. SUSPENDED state change in order to reduce
-    current consumption of buspowered devices. The USB HID keyboard example
-    project has a good example on how to use this callback.
-
-  @n USBD_IsSelfPoweredCb_TypeDef() is called by the device stack when host
-    queries the device with a standard setup GET_STATUS command to check if the
-    device is currently selfpowered or buspowered. This feature is only
-    applicable on selfpowered devices which also works when only buspower is
-    available.
-
-  @n USBD_SetupCmdCb_TypeDef() is called each time a setup command is
-    received from host. Use this callback to override or extend the default
-    handling of standard setup commands, and to implement class or vendor
-    specific setup commands. The USB HID keyboard example project has a good
-    example on how to use this callback.
-
-  @n <b>Utility functions:</b> @n
-    @n    USB_PUTCHAR() Transmit a single char on the debug serial port.
-    @n @n USB_PUTS() Transmit a zero terminated string on the debug serial port.
-    @n @n USB_PRINTF() Transmit "printf" formated data on the debug serial port.
-    @n @n USB_GetErrorMsgString() Return an error message string for a given
-          error code.
-    @n @n USB_PrintErrorMsgString() Format and print a text string given an
-          error code, prepends an optional user supplied leader string.
-    @n @n USBTIMER_DelayMs() Active wait millisecond delay function. Can also be
-          used inside interrupt handlers.
-    @n @n USBTIMER_DelayUs() Active wait microsecond delay function. Can also be
-          used inside interrupt handlers.
-    @n @n USBTIMER_Init() Initialize the timer system. Called by @htmlonly
-          USBD_Init(), @endhtmlonly but your application must call it again to
-          reinitialize whenever you change the HFPERCLK frequency.
-    @n @n USBTIMER_Start() Start a timer. You can configure the USB device stack
-          to provide any number of timers. The timers have 1 ms resolution, your
-          application is notified of timeout by means of a callback.
-    @n @n USBTIMER_Stop() Stop a timer.
-
-@n @section usb_device_conf Configuring the device stack
-
-  Your application must provide a header file named @em usbconfig.h. This file
-  must contain the following \#define's:@n @n
-  @verbatim
-#define USB_DEVICE       // Compile the stack for device mode.
-#define NUM_EP_USED n    // Your application use 'n' endpoints in
-                         // addition to endpoint 0. @endverbatim
-
-  @n @em usbconfig.h may define the following items: @n @n
-  @verbatim
-#define NUM_APP_TIMERS n // Your application needs 'n' timers
-
-#define DEBUG_USB_API    // Turn on API debug diagnostics.
-
-// Some utility functions in the API needs printf. These
-// functions have "print" in their name. This macro enables
-// these functions.
-#define USB_USE_PRINTF   // Enable utility print functions.
-
-// Define a function for transmitting a single char on the serial port.
-extern int RETARGET_WriteChar(char c);
-#define USER_PUTCHAR  RETARGET_WriteChar
-
-#define USB_TIMER USB_TIMERn  // Select which hardware timer the USB stack
-                              // is allowed to use. Valid values are n=0,1,2...
-                              // corresponding to TIMER0, TIMER1, ...
-                              // If not specified, TIMER0 is used
-
-#define USB_VBUS_SWITCH_NOT_PRESENT  // Hardware does not have a VBUS switch
-
-#define USB_CORECLK_HFRCO   // Devices supporting crystal-less USB can use
-                            // HFRCO as core clock, default is HFXO
-@endverbatim
-
-  @n You are strongly encouraged to start application development with DEBUG_USB_API
-  turned on. When DEBUG_USB_API is turned on and USER_PUTCHAR is defined, useful
-  debugging information will be output on the development kit serial port.
-  Compiling with the DEBUG_EFM_USER flag will also enable all asserts
-  in both @em emlib and in the USB stack. If asserts are enabled and
-  USER_PUTCHAR defined, assert texts will be output on the serial port.
-
-  You application must include @em retargetserial.c if DEBUG_USB_API is defined
-  and @em retargetio.c if USB_USE_PRINTF is defined.
-  These files reside in the @em drivers
-  directory in the software package for your development board. Refer to
-  @ref usb_device_powersave for energy-saving mode configurations.
-
-@n @section usb_device_powersave Energy-saving modes
-
-  The device stack provides two energy saving levels. The first level is to
-  set the USB peripheral in energy saving mode, the next level is to enter
-  Energy Mode 2 (EM2). These energy saving modes can be applied when the device
-  is suspended by the USB host, or when when the device is not connected to a
-  USB host.
-  In addition to this an application can use energy modes EM1 and EM2. There
-  are no restrictions on when EM1 can be entered, EM2 can only be entered
-  when the USB device is suspended or detached from host.
-
-  Energy-saving modes are selected with a \#define in @em usbconfig.h, default
-  selection is to not use any energy saving modes.@n @n
-  @verbatim
-#define USB_PWRSAVE_MODE (USB_PWRSAVE_MODE_ONSUSPEND | USB_PWRSAVE_MODE_ENTEREM2)@endverbatim
-
-  There are three flags available, the flags can be or'ed together as shown above.
-
-  <b>\#define USB_PWRSAVE_MODE_ONSUSPEND</b>@n Set USB peripheral in low power
-  mode on suspend.
-
-  <b>\#define USB_PWRSAVE_MODE_ONVBUSOFF</b>@n Set USB peripheral in low power
-  mode when not attached to a host. This mode assumes that the internal voltage
-  regulator is used and that the VREGI pin of the chip is connected to VBUS.
-  This option can not be used with bus-powered devices.
-
-  <b>\#define USB_PWRSAVE_MODE_ENTEREM2</b>@n Enter EM2 when USB peripheral is
-  in low power mode.
-
-  When the USB peripheral is set in low power mode, it must be clocked by a 32kHz
-  clock. Both LFXO and LFRCO can be used, but only LFXO guarantee USB specification
-  compliance. Selection is done with a \#define in @em usbconfig.h.@n @n
-  @verbatim
-#define USB_USBC_32kHz_CLK   USB_USBC_32kHz_CLK_LFXO @endverbatim
-  Two flags are available, <b>USB_USBC_32kHz_CLK_LFXO</b> and
-  <b>USB_USBC_32kHz_CLK_LFRCO</b>. <b>USB_USBC_32kHz_CLK_LFXO</b> is selected
-  by default.
-
-  The USB HID keyboard and Mass Storage device example projects demonstrate
-  different energy-saving modes.
-
-  <b>Example 1:</b>
-  Leave all energy saving to the stack, the device enters EM2 on suspend and
-  when detached from host. @n
-  @verbatim
-In usbconfig.h:
-
-#define USB_PWRSAVE_MODE (USB_PWRSAVE_MODE_ONSUSPEND | USB_PWRSAVE_MODE_ONVBUSOFF | USB_PWRSAVE_MODE_ENTEREM2)
-  @endverbatim
-
-  @n <b>Example 2:</b>
-  Let the stack control energy saving in the USB periheral but let your
-  application control energy modes EM1 and EM2. @n
-  @verbatim
-In usbconfig.h:
-
-#define USB_PWRSAVE_MODE (USB_PWRSAVE_MODE_ONSUSPEND | USB_PWRSAVE_MODE_ONVBUSOFF)
-
-In application code:
-
-if ( USBD_SafeToEnterEM2() )
-  EMU_EnterEM2(true);
-else
-  EMU_EnterEM1(); @endverbatim
-
-@n @section usb_device_example1 Vendor unique device example application
-
-  This example represents the most simple USB device imaginable. It's purpose
-  is to turn user LED's on or off under control of vendor unique setup commands.
-  The device will rely on @em libusb device driver on the host, a host
-  application @em EFM32-LedApp.exe is bundled with the example.
-
-  The main() is really simple ! @n @n
-  @verbatim
-#include "em_usb.h"
-
-#include "descriptors.h"
-
-int main( void )
-{
-  BSP_Init(BSP_INIT_DEFAULT); // Initialize DK board register access
-  CMU_ClockSelectSet( cmuClock_HF, cmuSelect_HFXO );
-  BSP_LedsSet(0);             // Turn off all LED's
-
-  ConsoleDebugInit();         // Initialize UART for debug diagnostics
-
-  USB_PUTS( "\nEFM32 USB LED Vendor Unique Device example\n" );
-
-  USBD_Init( &initstruct );   // GO !
-
-  //When using a debugger it is pratical to uncomment the following three
-  //lines to force host to re-enumerate the device.
-
-  //USBD_Disconnect();
-  //USBTIMER_DelayMs( 1000 );
-  //USBD_Connect();
-
-  for (;;) {}
-} @endverbatim
-
-  @n Configure the device stack in <em>usbconfig.h</em>: @n @n
-  @verbatim
-#define USB_DEVICE                        // Compile stack for device mode.
-
-// **************************************************************************
-**                                                                         **
-** Specify number of endpoints used (in addition to EP0).                  **
-**                                                                         **
-*****************************************************************************
-#define NUM_EP_USED 0                     // EP0 is the only endpoint used.
-
-// **************************************************************************
-**                                                                         **
-** Configure serial port debug output.                                     **
-**                                                                         **
-*****************************************************************************
-// Prototype a function for transmitting a single char on the serial port.
-extern int RETARGET_WriteChar(char c);
-#define USER_PUTCHAR RETARGET_WriteChar
-
-// Enable debug diagnostics from API functions (illegal input params etc.)
-#define DEBUG_USB_API @endverbatim
-
-  @n Define device properties and fill in USB initstruct in
-  <em>descriptors.h</em>: @n @n
-  @verbatim
-EFM32_ALIGN(4)
-static const USB_DeviceDescriptor_TypeDef deviceDesc __attribute__ ((aligned(4))) =
-{
-  .bLength            = USB_DEVICE_DESCSIZE,
-  .bDescriptorType    = USB_DEVICE_DESCRIPTOR,
-  .bcdUSB             = 0x0200,
-  .bDeviceClass       = 0xFF,
-  .bDeviceSubClass    = 0,
-  .bDeviceProtocol    = 0,
-  .bMaxPacketSize0    = USB_FS_CTRL_EP_MAXSIZE,
-  .idVendor           = 0x10C4,
-  .idProduct          = 0x0001,
-  .bcdDevice          = 0x0000,
-  .iManufacturer      = 1,
-  .iProduct           = 2,
-  .iSerialNumber      = 3,
-  .bNumConfigurations = 1
-};
-
-EFM32_ALIGN(4)
-static const uint8_t configDesc[] __attribute__ ((aligned(4)))=
-{
-  // *** Configuration descriptor ***
-  USB_CONFIG_DESCSIZE,            // bLength
-  USB_CONFIG_DESCRIPTOR,          // bDescriptorType
-  USB_CONFIG_DESCSIZE +           // wTotalLength (LSB)
-  USB_INTERFACE_DESCSIZE,
-  (USB_CONFIG_DESCSIZE +          // wTotalLength (MSB)
-  USB_INTERFACE_DESCSIZE)>>8,
-  1,                              // bNumInterfaces
-  1,                              // bConfigurationValue
-  0,                              // iConfiguration
-  CONFIG_DESC_BM_RESERVED_D7 |    // bmAttrib: Self powered
-  CONFIG_DESC_BM_SELFPOWERED,
-  CONFIG_DESC_MAXPOWER_mA( 100 ), // bMaxPower: 100 mA
-
-  // *** Interface descriptor ***
-  USB_INTERFACE_DESCSIZE,         // bLength
-  USB_INTERFACE_DESCRIPTOR,       // bDescriptorType
-  0,                              // bInterfaceNumber
-  0,                              // bAlternateSetting
-  NUM_EP_USED,                    // bNumEndpoints
-  0xFF,                           // bInterfaceClass
-  0,                              // bInterfaceSubClass
-  0,                              // bInterfaceProtocol
-  0,                              // iInterface
-};
-
-STATIC_CONST_STRING_DESC_LANGID( langID, 0x04, 0x09 );
-STATIC_CONST_STRING_DESC( iManufacturer, 'E','n','e','r','g','y',' ',       \
-                                         'M','i','c','r','o',' ','A','S' );
-STATIC_CONST_STRING_DESC( iProduct     , 'V','e','n','d','o','r',' ',       \
-                                         'U','n','i','q','u','e',' ',       \
-                                         'L','E','D',' ',                   \
-                                         'D','e','v','i','c','e' );
-STATIC_CONST_STRING_DESC( iSerialNumber, '0','0','0','0','0','0',           \
-                                         '0','0','1','2','3','4' );
-
-static const void * const strings[] =
-{
-  &langID,
-  &iManufacturer,
-  &iProduct,
-  &iSerialNumber
-};
-
-// Endpoint buffer sizes
-// 1 = single buffer, 2 = double buffering, 3 = tripple buffering ...
-static const uint8_t bufferingMultiplier[ NUM_EP_USED + 1 ] = { 1 };
-
-static const USBD_Callbacks_TypeDef callbacks =
-{
-  .usbReset        = NULL,
-  .usbStateChange  = NULL,
-  .setupCmd        = SetupCmd,
-  .isSelfPowered   = NULL,
-  .sofInt          = NULL
-};
-
-static const USBD_Init_TypeDef initstruct =
-{
-  .deviceDescriptor    = &deviceDesc,
-  .configDescriptor    = configDesc,
-  .stringDescriptors   = strings,
-  .numberOfStrings     = sizeof(strings)/sizeof(void*),
-  .callbacks           = &callbacks,
-  .bufferingMultiplier = bufferingMultiplier
-};  @endverbatim
-
-  @n Now we have to implement vendor unique USB setup commands to control the
-  LED's (see callbacks variable above). Notice that the buffer variable below is
-  statically allocated because @htmlonly USBD_Write() @endhtmlonly only
-  initiates the transfer. When the host actually performs the transfer, the
-  SetupCmd() function will have returned ! @n @n
-
-  @verbatim
-#define VND_GET_LEDS 0x10
-#define VND_SET_LED  0x11
-
-static int SetupCmd( const USB_Setup_TypeDef *setup )
-{
-  int retVal;
-  uint16_t leds;
-  static uint32_t buffer;
-  uint8_t *pBuffer = (uint8_t*)&buffer;
-
-  retVal = USB_STATUS_REQ_UNHANDLED;
-
-  if ( setup->Type == USB_SETUP_TYPE_VENDOR )
-  {
-    switch ( setup->bRequest )
-    {
-      case VND_GET_LEDS:
-      // ********************
-        *pBuffer = BSP_LedsGet() & 0x1F;
-        retVal = USBD_Write( 0, pBuffer, setup->wLength, NULL );
-        break;
-
-      case VND_SET_LED:
-      // ********************
-        leds = DVK_getLEDs() & 0x1F;
-        if ( setup->wValue )
-        {
-          leds |= LED0 << setup->wIndex;
-        }
-        else
-        {
-          leds &= ~( LED0 << setup->wIndex );
-        }
-        BSP_LedsSet( leds );
-        retVal = USB_STATUS_OK;
-        break;
-    }
-  }
-
-  return retVal;
-}@endverbatim
-
- * @}**************************************************************************/
-
-#endif /* defined( USB_DEVICE ) */
-#endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_Silicon_Labs/src/em_usbdep.c
--- a/USBDevice/TARGET_Silicon_Labs/src/em_usbdep.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,446 +0,0 @@
-/**************************************************************************//**
- * @file em_usbdep.c
- * @brief USB protocol stack library, USB device endpoint handlers.
- * @version 3.20.14
- ******************************************************************************
- * @section License
- * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
- *******************************************************************************
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************/
-
-#include "em_device.h"
-#if defined( USB_PRESENT ) && ( USB_COUNT == 1 )
-#include "em_usb.h"
-#if defined( USB_DEVICE )
-
-#include "em_usbtypes.h"
-#include "em_usbhal.h"
-#include "em_usbd.h"
-
-#ifdef USB_USE_PRINTF
-static const char *epStatusStr[] = {
-    "IDLE","TRANS","RECV","IN_S","OUT_S"
-};
-#endif
-
-/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
-
-/*
- * USBDEP_Ep0Handler() is called each time a packet has been transmitted
- * or recieved on the default endpoint.
- * A state machine navigate us through the phases of a control transfer
- * according to "chapter 9" in the USB spec.
- */
-#if !defined( USB_DOEP0INT_STUPPKTRCVD )
-void USBDEP_Ep0Handler( USBD_Device_TypeDef *device )
-{
-  int status;
-  USBD_Ep_TypeDef *ep;
-  static bool statusIn;
-  static uint32_t xferred;
-  static USB_XferCompleteCb_TypeDef callback;
-
-  ep = &device->ep[ 0 ];
-
-#ifdef __MBED__
-
-  (void)xferred;
-  (void)statusIn;
-  (void)status;
-
-  USB_PRINTF("USBDEP: ep0 %s, rem %ld, z %d\n", epStatusStr[ep->state], ep->remaining, ep->zlp);
-
-  if ( ( ep->state == D_EP_TRANSMITTING ) || ( ep->state == D_EP_RECEIVING ) )
-  {
-    ep->state = D_EP_IDLE;
-
-    if ( ep->xferCompleteCb )
-    {
-      callback = ep->xferCompleteCb;
-      ep->xferCompleteCb = NULL;
-      callback( USB_STATUS_OK, ep->xferred, ep->remaining );
-    }
-
-    USBDHAL_ReenableEp0Setup(device);
-  }
-  else
-  {
-    device->callbacks->setupCmd(device->setup);
-  }
-
-#else /* not __MBED__ */
-
-  switch ( ep->state )
-  {
-    case D_EP_IDLE:
-      ep->remaining = 0;
-      ep->zlp = 0;
-      callback = NULL;
-      statusIn = false;
-
-      status = USBDCH9_SetupCmd( device );
-
-      if ( status == USB_STATUS_REQ_ERR )
-      {
-        ep->in = true;
-        USBDHAL_StallEp( ep );              /* Stall Ep0 IN                 */
-        ep->in = false;                     /* OUT for next SETUP           */
-        USBDHAL_StallEp( ep );              /* Stall Ep0 OUT                */
-        USBDHAL_ReenableEp0Setup( device ); /* Prepare for next SETUP packet*/
-      }
-      else /* ( Status == USB_STATUS_OK ) */
-      {
-        if ( (ep->state == D_EP_RECEIVING) || (ep->state == D_EP_TRANSMITTING) )
-        {
-          callback = ep->xferCompleteCb;
-        }
-
-        if ( ep->state != D_EP_RECEIVING )
-        {
-          if ( ep->remaining )
-          {
-            /* Data will be sent to host, check if a ZLP must be appended */
-            if ( ( ep->remaining < device->setup->wLength ) &&
-                 ( ep->remaining % ep->packetSize == 0    )    )
-            {
-              ep->zlp = 1;
-            }
-          }
-          else
-          {
-            /* Prepare for next SETUP packet*/
-            USBDHAL_ReenableEp0Setup( device );
-
-            /* No data stage, a ZLP may have been sent. If not, send one */
-
-            xferred = 0;
-            if ( ep->zlp == 0 )
-            {
-              USBD_Write( 0, NULL, 0, NULL );             /* ACK to host */
-              ep->state = D_EP0_IN_STATUS;
-            }
-            else
-            {
-              ep->state = D_EP_IDLE;
-              ep->in = false;                      /* OUT for next SETUP */
-            }
-          }
-        }
-      }
-      break;
-
-    case D_EP_RECEIVING:
-      if ( ep->remaining )
-      {
-        /* There is more data to receive */
-        USBD_ReArmEp0( ep );
-      }
-      else
-      {
-        status = USB_STATUS_OK;
-        if ( callback != NULL )
-        {
-          status = callback( USB_STATUS_OK, ep->xferred, 0 );
-          callback = NULL;
-        }
-
-        if ( status != USB_STATUS_OK )
-        {
-          ep->in = true;
-          USBDHAL_StallEp( ep );              /* Stall Ep0 IN                */
-          ep->in = false;                     /* OUT for next SETUP           */
-          USBDHAL_StallEp( ep );              /* Stall Ep0 OUT                */
-          USBDHAL_ReenableEp0Setup( device ); /* Prepare for next SETUP pkt. */
-          ep->state = D_EP_IDLE;
-        }
-        else /* Everything OK, send a ZLP (ACK) to host */
-        {
-          USBDHAL_ReenableEp0Setup( device );/* Prepare for next SETUP packet*/
-
-          ep->state = D_EP_IDLE;              /* USBD_Write() sets state back*/
-                                              /* to EP_TRANSMITTING          */
-          USBD_Write( 0, NULL, 0, NULL );
-          ep->state = D_EP0_IN_STATUS;
-        }
-      }
-      break;
-
-    case D_EP_TRANSMITTING:
-      if ( ep->remaining )
-      {
-        /* There is more data to transmit */
-        USBD_ReArmEp0( ep );
-      }
-      else
-      {
-        /* All data transferred, is a ZLP packet needed ? */
-        if ( ep->zlp == 1 )
-        {
-          xferred   = ep->xferred;
-          ep->state = D_EP_IDLE;          /* USBD_Write() sets state back */
-                                          /* to EP_TRANSMITTING           */
-          USBD_Write( 0, NULL, 0, NULL ); /* Send ZLP                     */
-          ep->zlp = 2;
-        }
-        else
-        {
-          if ( ep->zlp == 0 )
-          {
-            xferred = ep->xferred;
-          }
-
-          ep->state = D_EP_IDLE;
-          USBD_Read( 0, NULL, 0, NULL );  /* Get ZLP packet (ACK) from host */
-          statusIn = true;
-          ep->state = D_EP0_OUT_STATUS;
-        }
-      }
-      break;
-
-    case D_EP0_IN_STATUS:
-    case D_EP0_OUT_STATUS:
-      if ( statusIn )
-      {
-        USBDHAL_ReenableEp0Setup( device );
-      }
-
-      if ( callback != NULL )
-      {
-        callback( USB_STATUS_OK, xferred, 0 );
-      }
-
-      ep->state = D_EP_IDLE;
-      ep->in = false;                     /* OUT for next SETUP */
-      break;
-
-    default:
-      EFM_ASSERT( false );
-      break;
-  }
-#endif /* __MBED__ */
-}
-#endif
-
-#if defined( USB_DOEP0INT_STUPPKTRCVD )
-void USBDEP_Ep0Handler( USBD_Device_TypeDef *device )
-{
-  int status;
-  USBD_Ep_TypeDef *ep;
-  static uint32_t xferred;
-  static USB_XferCompleteCb_TypeDef callback;
-
-#ifdef __MBED__
-
-  (void)xferred;
-  (void)status;
-
-  ep = &device->ep[ 0 ];
-
-  if ( ( ep->state == D_EP_TRANSMITTING ) || ( ep->state == D_EP_RECEIVING ) )
-  {
-    ep->state = D_EP_IDLE;
-
-    if ( ep->xferCompleteCb )
-    {
-      callback = ep->xferCompleteCb;
-      ep->xferCompleteCb = NULL;
-      callback( USB_STATUS_OK, ep->xferred, ep->remaining );
-    }
-
-    USBDHAL_StartEp0Setup( dev );
-  }
-  else
-  {
-    device->callbacks->setupCmd(device->setup);
-  }
-
-#else
-
-  ep = &device->ep[ 0 ];
-
-  switch ( ep->state )
-  {
-    case D_EP_IDLE:
-      ep->zlp       = 0;
-      ep->remaining = 0;
-      callback      = NULL;
-
-      status = USBDCH9_SetupCmd( device );
-
-      if ( status == USB_STATUS_REQ_ERR )
-      {
-        ep->in = true;
-        USBDHAL_StallEp( ep );              /* Stall Ep0 IN                 */
-        ep->in = false;                     /* OUT for next SETUP           */
-        USBDHAL_StallEp( ep );              /* Stall Ep0 OUT                */
-        USBDHAL_StartEp0Setup( dev );       /* Prepare for next SETUP packet*/
-      }
-      else /* ( Status == USB_STATUS_OK ) */
-      {
-        if ( (ep->state == D_EP_RECEIVING) || (ep->state == D_EP_TRANSMITTING) )
-        {
-          callback = ep->xferCompleteCb;
-        }
-
-        if ( ep->state != D_EP_RECEIVING )
-        {
-          if ( ep->remaining )
-          {
-            /* Data will be sent to host, check if a ZLP must be appended */
-            if ( ( ep->remaining < device->setup->wLength ) &&
-                 ( ep->remaining % ep->packetSize == 0    )    )
-            {
-              ep->zlp = 1;
-            }
-          }
-          else
-          {
-            /* No data stage, a ZLP may have been sent. If not, send one */
-            xferred = 0;
-            if ( ep->zlp == 0 )
-            {
-              ep->state = D_EP_IDLE;
-              USBD_Write( 0, NULL, 0, NULL );             /* ACK to host */
-              ep->state = D_EP0_IN_STATUS;
-            }
-          }
-        }
-      }
-      break;
-
-    case D_EP_RECEIVING:
-      if ( ep->remaining )
-      {
-        ep->in = false;
-        USBD_ReArmEp0( ep );
-      }
-      else
-      {
-        status = USB_STATUS_OK;
-        if ( callback != NULL )
-        {
-          status = callback( USB_STATUS_OK, ep->xferred, 0 );
-          callback = NULL;
-        }
-
-        if ( status != USB_STATUS_OK )
-        {
-          ep->in = true;
-          USBDHAL_StallEp( ep );              /* Stall Ep0 IN                */
-          ep->in = false;                     /* OUT for next SETUP          */
-          USBDHAL_StallEp( ep );              /* Stall Ep0 OUT               */
-          USBDHAL_StartEp0Setup( dev );       /* Prepare for next SETUP pkt. */
-          ep->state = D_EP_IDLE;
-        }
-        else
-        {
-
-          USBDHAL_StartEp0Setup( dev );      /* Prepare for next SETUP packet*/
-          ep->state = D_EP_IDLE;             /* USBD_Write() sets state back */
-                                             /* to EP_TRANSMITTING           */
-          USBD_Write( 0, NULL, 0, NULL );
-          ep->state = D_EP0_IN_STATUS;
-        }
-      }
-      break;
-
-    case D_EP_TRANSMITTING:
-      if ( ep->remaining )
-      {
-        ep->in = true;
-        USBD_ReArmEp0( ep );
-      }
-      else
-      {
-        if ( ep->zlp == 1 )
-        {
-          xferred   = ep->xferred;
-          ep->state = D_EP_IDLE;          /* USBD_Write() sets state back */
-                                          /* to EP_TRANSMITTING           */
-          USBD_Write( 0, NULL, 0, NULL ); /* Send ZLP                     */
-          ep->zlp = 2;
-        }
-        else
-        {
-          if ( ep->zlp == 0 )
-          {
-            xferred = ep->xferred;
-          }
-
-          ep->state = D_EP_IDLE;
-          USBD_Read( 0, NULL, 0, NULL );  /* Get ZLP packet (ACK) from host */
-          ep->state = D_EP0_OUT_STATUS;
-        }
-      }
-      break;
-
-    case D_EP0_IN_STATUS:
-      if ( ( USB->DOEP0CTL & USB_DOEP0CTL_EPENA ) == 0 )
-      {
-        /* Prepare for more SETUP Packets */
-        USBDHAL_StartEp0Setup( dev );
-      }
-      if ( callback != NULL )
-      {
-        callback( USB_STATUS_OK, xferred, 0 );
-      }
-      ep->state = D_EP_IDLE;
-      ep->in = false;                     /* OUT for next SETUP */
-      break;
-
-    case D_EP0_OUT_STATUS:
-      USBDHAL_StartEp0Setup( dev );       /* Prepare for more SETUP Packets */
-      if ( callback != NULL )
-      {
-        callback( USB_STATUS_OK, xferred, 0 );
-      }
-      ep->state = D_EP_IDLE;
-      ep->in = false;                     /* OUT for next SETUP */
-      break;
-  }
-#endif /* __MBED__ */
-}
-#endif
-
-/*
- * USBDEP_EpHandler() is called each time a packet has been transmitted
- * or recieved on an endpoint other than the default endpoint.
- */
-void USBDEP_EpHandler( uint8_t epAddr )
-{
-  USB_XferCompleteCb_TypeDef callback;
-  USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
-
-  if ( ( ep->state == D_EP_TRANSMITTING ) || ( ep->state == D_EP_RECEIVING ) )
-  {
-    ep->state = D_EP_IDLE;
-    if ( ep->xferCompleteCb )
-    {
-      callback = ep->xferCompleteCb;
-      ep->xferCompleteCb = NULL;
-      callback( USB_STATUS_OK, ep->xferred, ep->remaining );
-    }
-  }
-  else
-  {
-    EFM_ASSERT( false );
-  }
-}
-
-/** @endcond */
-
-#endif /* defined( USB_DEVICE ) */
-#endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_Silicon_Labs/src/em_usbdint.c
--- a/USBDevice/TARGET_Silicon_Labs/src/em_usbdint.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,946 +0,0 @@
-/**************************************************************************//**
- * @file em_usbdint.c
- * @brief USB protocol stack library, USB device peripheral interrupt handlers.
- * @version 3.20.14
- ******************************************************************************
- * @section License
- * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
- *******************************************************************************
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************/
-
-#include "em_device.h"
-#if defined( USB_PRESENT ) && ( USB_COUNT == 1 )
-#include "em_usb.h"
-#if defined( USB_DEVICE )
-
-#include "em_cmu.h"
-#include "em_usbtypes.h"
-#include "em_usbhal.h"
-#include "em_usbd.h"
-
-#ifdef __MBED__
-extern void usbhal_allow_em2(bool em2_allow);
-#endif
-
-/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
-
-#define HANDLE_INT( x ) if ( status & x ) { Handle_##x(); status &= ~x; }
-
-static void Handle_USB_GINTSTS_ENUMDONE  ( void );
-static void Handle_USB_GINTSTS_IEPINT    ( void );
-static void Handle_USB_GINTSTS_OEPINT    ( void );
-static void Handle_USB_GINTSTS_RESETDET  ( void );
-static void Handle_USB_GINTSTS_SOF       ( void );
-static void Handle_USB_GINTSTS_USBRST    ( void );
-static void Handle_USB_GINTSTS_USBSUSP   ( void );
-static void Handle_USB_GINTSTS_WKUPINT   ( void );
-#if defined( USB_DOEP0INT_STUPPKTRCVD )
-static void HandleOutEpIntr( uint32_t status, USBD_Ep_TypeDef *ep );
-#else
-static void ProcessSetup                 ( void );
-static void ProcessOepData               ( USBD_Ep_TypeDef *ep );
-#endif
-
-#if ( USB_PWRSAVE_MODE )
-/* Variables and prototypes for USB powerdown (suspend) functionality. */
-static bool UsbPowerDown( void );
-static bool UsbPowerUp( void );
-
-volatile bool USBD_poweredDown = false;
-
-/* Storage for backing up USB core registers. */
-static uint32_t  x_USB_GINTMSK;
-#if defined(_USB_GOTGCTL_MASK)
-static uint32_t  x_USB_GOTGCTL;
-#endif
-static uint32_t  x_USB_GAHBCFG;
-static uint32_t  x_USB_GUSBCFG;
-static uint32_t  x_USB_GRXFSIZ;
-static uint32_t  x_USB_GNPTXFSIZ;
-static uint32_t  x_USB_DCFG;
-static uint32_t  x_USB_DCTL;
-static uint32_t  x_USB_DAINTMSK;
-static uint32_t  x_USB_DIEPMSK;
-static uint32_t  x_USB_DOEPMSK;
-static uint32_t  x_USB_PCGCCTL;
-
-#if ( NUM_EP_USED > 0 )
-static uint32_t  x_USB_EP_CTL[ NUM_EP_USED ];
-static uint32_t  x_USB_EP_TSIZ[ NUM_EP_USED ];
-static uint32_t  x_USB_EP_DMAADDR[ NUM_EP_USED ];
-#endif
-
-#if ( NUM_EP_USED > MAX_NUM_TX_FIFOS )
-#define FIFO_CNT MAX_NUM_TX_FIFOS
-#else
-#define FIFO_CNT NUM_EP_USED
-#endif
-
-#if ( FIFO_CNT > 0 )
-static uint32_t  x_USB_DIEPTXFS[ FIFO_CNT ];
-#endif
-
-#if ( USB_PWRSAVE_MODE )
-static uint32_t cmuStatus = 0;
-#endif
-
-#endif /* if ( USB_PWRSAVE_MODE ) */
-
-/*
- * USB_IRQHandler() is the first level handler for the USB peripheral interrupt.
- */
-void USB_IRQHandler( void )
-{
-  uint32_t status;
-  bool servedVbusInterrupt = false;
-
-  INT_Disable();
-
-#if ( USB_PWRSAVE_MODE )
-  if ( USBD_poweredDown )
-  {
-    /* Switch USBC clock from 32kHz to a 48MHz clock to be able to  */
-    /* read USB peripheral registers.                               */
-    /* If we woke up from EM2, HFCLK is now HFRCO.                  */
-
-    /* Restore clock oscillators.*/
-#if defined( CMU_OSCENCMD_USHFRCOEN )
-    if ( ( CMU->STATUS & CMU_STATUS_USHFRCOENS ) == 0 )/*Wakeup from EM2 ?*/
-    {
-      CMU->OSCENCMD = ( cmuStatus
-                        & ( CMU_STATUS_AUXHFRCOENS | CMU_STATUS_HFXOENS ) )
-                      | CMU_OSCENCMD_USHFRCOEN;
-    }
-#else
-    if ( ( CMU->STATUS & CMU_STATUS_HFXOENS ) == 0 ) /* Wakeup from EM2 ? */
-    {
-      CMU->OSCENCMD = cmuStatus
-                      & ( CMU_STATUS_AUXHFRCOENS | CMU_STATUS_HFXOENS );
-    }
-#endif
-
-    /* Select correct USBC clock.*/
-#if defined( CMU_OSCENCMD_USHFRCOEN )
-    CMU->CMD = CMU_CMD_USBCCLKSEL_USHFRCO;
-    while ( ( CMU->STATUS & CMU_STATUS_USBCUSHFRCOSEL ) == 0 ){}
-#else
-    CMU->CMD = CMU_CMD_USBCCLKSEL_HFCLKNODIV;
-    while ( ( CMU->STATUS & CMU_STATUS_USBCHFCLKSEL ) == 0 ){}
-#endif
-  }
-#endif /* if ( USB_PWRSAVE_MODE ) */
-
-  if ( USB->IF && ( USB->CTRL & USB_CTRL_VREGOSEN ) )
-  {
-    if ( USB->IF & USB_IF_VREGOSH )
-    {
-      USB->IFC = USB_IFC_VREGOSH;
-
-      if ( USB->STATUS & USB_STATUS_VREGOS )
-      {
-        servedVbusInterrupt = true;
-        DEBUG_USB_INT_LO_PUTS( "\nVboN" );
-
-#if ( USB_PWRSAVE_MODE )
-        if ( UsbPowerUp() )
-        {
-          USBDHAL_EnableUsbResetAndSuspendInt();
-        }
-        USBD_SetUsbState( USBD_STATE_POWERED );
-#endif
-      }
-    }
-
-    if ( USB->IF & USB_IF_VREGOSL )
-    {
-      USB->IFC = USB_IFC_VREGOSL;
-
-      if ( ( USB->STATUS & USB_STATUS_VREGOS ) == 0 )
-      {
-        servedVbusInterrupt = true;
-        DEBUG_USB_INT_LO_PUTS( "\nVboF" );
-
-#if ( USB_PWRSAVE_MODE )
-#if ( USB_PWRSAVE_MODE & USB_PWRSAVE_MODE_ONVBUSOFF )
-        if ( !USBD_poweredDown )
-        {
-          USB->GINTMSK = 0;
-          USB->GINTSTS = 0xFFFFFFFF;
-        }
-
-        UsbPowerDown();
-#endif
-        USBD_SetUsbState( USBD_STATE_NONE );
-#endif
-      }
-    }
-  }
-
-  status = USBHAL_GetCoreInts();
-  if ( status == 0 )
-  {
-    INT_Enable();
-    if ( !servedVbusInterrupt )
-    {
-      DEBUG_USB_INT_LO_PUTS( "\nSinT" );
-    }
-    return;
-  }
-
-  HANDLE_INT( USB_GINTSTS_RESETDET   )
-  HANDLE_INT( USB_GINTSTS_WKUPINT    )
-  HANDLE_INT( USB_GINTSTS_USBSUSP    )
-  HANDLE_INT( USB_GINTSTS_SOF        )
-  HANDLE_INT( USB_GINTSTS_ENUMDONE   )
-  HANDLE_INT( USB_GINTSTS_USBRST     )
-  HANDLE_INT( USB_GINTSTS_IEPINT     )
-  HANDLE_INT( USB_GINTSTS_OEPINT     )
-
-  INT_Enable();
-
-  if ( status != 0 )
-  {
-    DEBUG_USB_INT_LO_PUTS( "\nUinT" );
-  }
-}
-
-/*
- * Handle port enumeration interrupt. This has nothing to do with normal
- * device enumeration.
- */
-static void Handle_USB_GINTSTS_ENUMDONE( void )
-{
-#if ( USB_PWRSAVE_MODE )
-  UsbPowerUp();
-#endif
-
-  USBDHAL_Ep0Activate( dev->ep0MpsCode );
-  dev->ep[ 0 ].state = D_EP_IDLE;
-  USBDHAL_EnableInts( dev );
-  DEBUG_USB_INT_LO_PUTS( "EnumD" );
-}
-
-/*
- * Handle IN endpoint transfer interrupt.
- */
-static void Handle_USB_GINTSTS_IEPINT( void )
-{
-  int epnum;
-  uint16_t epint;
-  uint16_t epmask;
-  uint32_t status;
-  USBD_Ep_TypeDef *ep;
-
-  DEBUG_USB_INT_HI_PUTCHAR( 'i' );
-
-  epint = USBDHAL_GetAllInEpInts();
-  for ( epnum = 0,                epmask = 1;
-        epnum <= MAX_NUM_IN_EPS;
-        epnum++,                  epmask <<= 1 )
-  {
-    if ( epint & epmask )
-    {
-      ep = USBD_GetEpFromAddr( USB_SETUP_DIR_MASK | epnum );
-      status = USBDHAL_GetInEpInts( ep );
-
-      if ( status & USB_DIEP_INT_XFERCOMPL )
-      {
-        USB_DINEPS[ epnum ].INT = USB_DIEP_INT_XFERCOMPL;
-
-        DEBUG_USB_INT_HI_PUTCHAR( 'c' );
-
-        if ( epnum == 0 )
-        {
-          if ( ep->remaining > ep->packetSize )
-          {
-            ep->remaining -= ep->packetSize;
-            ep->xferred += ep->packetSize;
-          }
-          else
-          {
-            ep->xferred += ep->remaining;
-            ep->remaining = 0;
-          }
-          USBDEP_Ep0Handler( dev );
-        }
-        else
-        {
-          ep->xferred = ep->remaining -
-                        ( ( USB_DINEPS[ epnum ].TSIZ      &
-                            _USB_DIEP_TSIZ_XFERSIZE_MASK    ) >>
-                          _USB_DIEP_TSIZ_XFERSIZE_SHIFT          );
-          ep->remaining -= ep->xferred;
-
-          USBDEP_EpHandler( ep->addr );
-#if defined( USB_DOEP0INT_STUPPKTRCVD )
-          if ( USB_DINEPS[ ep->num ].INT & USB_DIEP_INT_NAKINTRPT )
-          {
-            USB_DINEPS[ ep->num ].INT = USB_DIEP_INT_NAKINTRPT;
-          }
-#endif
-        }
-      }
-    }
-  }
-}
-
-/*
- * Handle OUT endpoint transfer interrupt.
- */
-static void Handle_USB_GINTSTS_OEPINT( void )
-{
-  int epnum;
-  uint16_t epint;
-  uint16_t epmask;
-  uint32_t status;
-  USBD_Ep_TypeDef *ep;
-
-  DEBUG_USB_INT_HI_PUTCHAR( 'o' );
-
-  epint = USBDHAL_GetAllOutEpInts();
-  for ( epnum = 0,                epmask = 1;
-        epnum <= MAX_NUM_OUT_EPS;
-        epnum++,                  epmask <<= 1 )
-  {
-    if ( epint & epmask )
-    {
-      ep = USBD_GetEpFromAddr( epnum );
-      status = USBDHAL_GetOutEpInts( ep );
-
-#if defined( USB_DOEP0INT_STUPPKTRCVD )
-      HandleOutEpIntr( status, ep );
-#else
-      if ( status & USB_DOEP_INT_XFERCOMPL )
-      {
-        USB_DOUTEPS[ epnum ].INT = USB_DOEP_INT_XFERCOMPL;
-        DEBUG_USB_INT_HI_PUTCHAR( 'c' );
-        ProcessOepData( ep );
-      }
-
-      /* Setup Phase Done */
-      if ( status & USB_DOEP0INT_SETUP )
-      {
-        ProcessSetup();
-      }
-#endif
-    }
-  }
-}
-
-#if !defined( USB_DOEP0INT_STUPPKTRCVD )
-static void ProcessOepData( USBD_Ep_TypeDef *ep )
-{
-  if ( ep->num == 0 )
-  {
-
-#ifdef __MBED__
-    int xfer_size = ep->packetSize - (( USB->DOEP0TSIZ & _USB_DOEP0TSIZ_XFERSIZE_MASK )
-                                      >> _USB_DOEP0TSIZ_XFERSIZE_SHIFT);
-    int setup_pkt_received = USBDHAL_GetOutEpInts( ep ) & USB_DOEP0INT_SETUP;
-
-    if ( (!setup_pkt_received && xfer_size == 0) ||
-         (setup_pkt_received && xfer_size == 8) )
-    {
-      /* Higher levels need to see the correct transfer amount for ZLPs */
-      ep->remaining = 0;
-      ep->xferred = 0;
-    }
-    else
-    {
-      /* FIXME - does not work if actual read size > 56 */
-      if ( setup_pkt_received ) xfer_size -= 8;
-
-      ep->xferred = xfer_size;
-      ep->remaining -= xfer_size;
-    }
-#else
-    if ( ep->remaining > ep->packetSize )
-    {
-      ep->remaining -= ep->packetSize;
-      ep->xferred += ep->packetSize;
-    }
-    else
-    {
-      ep->xferred += ep->remaining;
-      ep->remaining = 0;
-    }
-#endif
-
-    USBDEP_Ep0Handler( dev );
-  }
-  else
-  {
-    ep->xferred = ep->hwXferSize -
-        ( ( USB_DOUTEPS[ ep->num ].TSIZ & _USB_DOEP_TSIZ_XFERSIZE_MASK )>>
-          _USB_DOEP_TSIZ_XFERSIZE_SHIFT );
-    ep->remaining -= ep->xferred;
-    USBDEP_EpHandler( ep->addr );
-  }
-}
-#endif
-
-#if !defined( USB_DOEP0INT_STUPPKTRCVD )
-static void ProcessSetup( void )
-{
-  DEBUG_USB_INT_LO_PUTS( "\nS" );
-
-  if ( USB->DOEP0INT & USB_DOEP0INT_BACK2BACKSETUP )
-  {                           /* Back to back setup packets received */
-    USB->DOEP0INT = USB_DOEP0INT_BACK2BACKSETUP;
-    DEBUG_USB_INT_LO_PUTS( "B2B" );
-
-    dev->setup = (USB_Setup_TypeDef*)( USB->DOEP0DMAADDR - USB_SETUP_PKT_SIZE );
-  }
-  else
-  {
-    /* Read SETUP packet counter from hw. */
-    int supCnt = ( USB->DOEP0TSIZ & _USB_DOEP0TSIZ_SUPCNT_MASK )
-                 >> _USB_DOEP0TSIZ_SUPCNT_SHIFT;
-
-    if ( supCnt == 3 )
-      supCnt = 2;
-
-    dev->setup = &dev->setupPkt[ 2 - supCnt ];
-  }
-  USB->DOEP0TSIZ |= 3 << _USB_DOEP0TSIZ_SUPCNT_SHIFT;
-  USB->DOEP0DMAADDR = (uint32_t)dev->setupPkt;
-  USB->DOEP0INT = USB_DOEP0INT_SETUP;
-
-  USBDEP_Ep0Handler( dev );   /* Call the SETUP handler for EP0 */
-}
-#endif
-
-/*
- * Handle USB reset detected interrupt in suspend mode.
- */
-static void Handle_USB_GINTSTS_RESETDET  ( void )
-{
-#if ( USB_PWRSAVE_MODE )
-  if ( ! USBD_poweredDown )
-  {
-    USB->GINTSTS = USB_GINTSTS_RESETDET;
-  }
-
-  if ( UsbPowerUp() )
-  {
-    USB->GINTSTS = USB_GINTSTS_RESETDET;
-  }
-
-#if ( USB_PWRSAVE_MODE & USB_PWRSAVE_MODE_ONVBUSOFF )
-  /* Power down immediately if VBUS is off. */
-  if ( ! ( USB->STATUS & USB_STATUS_VREGOS ) )
-  {
-    UsbPowerDown();
-  }
-#endif
-
-#else
-  USB->GINTSTS = USB_GINTSTS_RESETDET;
-#endif /* if ( USB_PWRSAVE_MODE ) */
-
-  if ( USB->STATUS & USB_STATUS_VREGOS )
-  {
-    USBD_SetUsbState( USBD_STATE_DEFAULT );
-  }
-  else
-  {
-    USBD_SetUsbState( USBD_STATE_NONE );
-  }
-  DEBUG_USB_INT_LO_PUTS( "RsuP\n" );
-}
-
-/*
- * Handle Start Of Frame (SOF) interrupt.
- */
-static void Handle_USB_GINTSTS_SOF( void )
-{
-  USB->GINTSTS = USB_GINTSTS_SOF;
-
-  if ( dev->callbacks->sofInt )
-  {
-    dev->callbacks->sofInt(
-      ( USB->DSTS & _USB_DSTS_SOFFN_MASK ) >> _USB_DSTS_SOFFN_SHIFT );
-  }
-}
-
-/*
- * Handle USB port reset interrupt.
- */
-static void Handle_USB_GINTSTS_USBRST( void )
-{
-  int i;
-
-  DEBUG_USB_INT_LO_PUTS( "ReseT" );
-
-  /* Clear Remote Wakeup Signalling */
-  USB->DCTL &= ~( DCTL_WO_BITMASK | USB_DCTL_RMTWKUPSIG );
-  USBHAL_FlushTxFifo( 0 );
-
-  /* Clear pending interrupts */
-  for ( i = 0; i <= MAX_NUM_IN_EPS; i++ )
-  {
-    USB_DINEPS[ i ].INT = 0xFFFFFFFF;
-  }
-
-  for ( i = 0; i <= MAX_NUM_OUT_EPS; i++ )
-  {
-    USB_DOUTEPS[ i ].INT = 0xFFFFFFFF;
-  }
-
-  USB->DAINTMSK = USB_DAINTMSK_INEPMSK0 | USB_DAINTMSK_OUTEPMSK0;
-#if defined( USB_DOEPMSK_STSPHSERCVDMSK )
-  USB->DOEPMSK  = USB_DOEPMSK_SETUPMSK  | USB_DOEPMSK_XFERCOMPLMSK
-                  | USB_DOEPMSK_STSPHSERCVDMSK;
-#else
-  USB->DOEPMSK  = USB_DOEPMSK_SETUPMSK  | USB_DOEPMSK_XFERCOMPLMSK;
-#endif
-  USB->DIEPMSK  = USB_DIEPMSK_XFERCOMPLMSK;
-
-  /* Reset Device Address */
-  USB->DCFG &= ~_USB_DCFG_DEVADDR_MASK;
-
-  /* Setup EP0 to receive SETUP packets */
-  USBDHAL_StartEp0Setup( dev );
-  USBDHAL_EnableInts( dev );
-
-  if ( dev->callbacks->usbReset )
-  {
-    dev->callbacks->usbReset();
-  }
-
-  USBD_SetUsbState( USBD_STATE_DEFAULT );
-  USBDHAL_AbortAllTransfers( USB_STATUS_DEVICE_RESET );
-}
-
-/*
- * Handle USB port suspend interrupt.
- */
-static void Handle_USB_GINTSTS_USBSUSP( void )
-{
-  USBD_State_TypeDef state;
-
-  USB->GINTSTS = USB_GINTSTS_USBSUSP;
-  USBDHAL_AbortAllTransfers( USB_STATUS_DEVICE_SUSPENDED );
-  DEBUG_USB_INT_LO_PUTS( "\nSusP" );
-
-  if ( USBD_GetUsbState() == USBD_STATE_NONE )
-  {
-    USBD_SetUsbState( USBD_STATE_POWERED );
-  }
-
-  state = USBD_GetUsbState();
-  if ( ( state == USBD_STATE_POWERED    ) ||
-       ( state == USBD_STATE_DEFAULT    ) ||
-       ( state == USBD_STATE_ADDRESSED  ) ||
-       ( state == USBD_STATE_CONFIGURED )    )
-  {
-#if ( USB_PWRSAVE_MODE )
-    UsbPowerDown();
-#endif
-    USBD_SetUsbState( USBD_STATE_SUSPENDED );
-  }
-}
-
-/*
- * Handle USB port wakeup interrupt.
- */
-static void Handle_USB_GINTSTS_WKUPINT( void )
-{
-#if ( USB_PWRSAVE_MODE )
-  if ( ! USBD_poweredDown )
-  {
-    USB->GINTSTS = USB_GINTSTS_WKUPINT;
-  }
-
-  if ( UsbPowerUp() )
-  {
-    USB->GINTSTS = USB_GINTSTS_WKUPINT;
-    USBDHAL_StartEp0Setup( dev );
-    USBDHAL_Ep0Activate( dev->ep0MpsCode );
-  }
-#else
-  USB->GINTSTS = USB_GINTSTS_WKUPINT;
-#endif
-
-  USBD_SetUsbState( dev->savedState );
-  DEBUG_USB_INT_LO_PUTS( "WkuP\n" );
-}
-
-#if ( USB_PWRSAVE_MODE )
-/*
- * Backup essential USB core registers, and set the core in partial powerdown
- * mode. Optionally prepare entry into EM2.
- */
-static bool UsbPowerDown( void )
-{
-#if ( NUM_EP_USED > 0 ) || ( FIFO_CNT > 0 )
-  int i;
-#endif
-#if ( NUM_EP_USED > 0 )
-  int epNum;
-  USBD_Ep_TypeDef *ep;
-#endif
-
-  if ( !USBD_poweredDown )
-  {
-    USBD_poweredDown = true;
-    DEBUG_USB_INT_LO_PUTCHAR( '\\' );
-
-    /* Backup USB core registers. */
-    x_USB_GINTMSK   = USB->GINTMSK;
-#if defined(_USB_GOTGCTL_MASK)
-    x_USB_GOTGCTL   = USB->GOTGCTL;
-#endif
-    x_USB_GAHBCFG   = USB->GAHBCFG;
-    x_USB_GUSBCFG   = USB->GUSBCFG;
-    x_USB_GRXFSIZ   = USB->GRXFSIZ;
-    x_USB_GNPTXFSIZ = USB->GNPTXFSIZ;
-    x_USB_DCFG      = USB->DCFG;
-    x_USB_DCTL      = USB->DCTL;
-    x_USB_DAINTMSK  = USB->DAINTMSK;
-    x_USB_DIEPMSK   = USB->DIEPMSK;
-    x_USB_DOEPMSK   = USB->DOEPMSK;
-    x_USB_PCGCCTL   = USB->PCGCCTL;
-
-#if ( NUM_EP_USED > 0 )
-    for ( i = 0; i < NUM_EP_USED; i++ )
-    {
-      ep = &dev->ep[ i+1 ];
-      epNum = ep->num;
-      if ( ep->in )
-      {
-        x_USB_EP_CTL[     i ] = USB_DINEPS[ epNum ].CTL;
-        x_USB_EP_TSIZ[    i ] = USB_DINEPS[ epNum ].TSIZ;
-        x_USB_EP_DMAADDR[ i ] = USB_DINEPS[ epNum ].DMAADDR;
-      }
-      else
-      {
-        x_USB_EP_CTL[     i ] = USB_DOUTEPS[ epNum ].CTL;
-        x_USB_EP_TSIZ[    i ] = USB_DOUTEPS[ epNum ].TSIZ;
-        x_USB_EP_DMAADDR[ i ] = USB_DOUTEPS[ epNum ].DMAADDR;
-      }
-    }
-#endif
-
-#if ( FIFO_CNT > 0 )
-    for ( i = 0; i < FIFO_CNT; i++ )
-    {
-      x_USB_DIEPTXFS[ i ] = USB_DIEPTXFS[ i ];
-    }
-#endif
-
-    /* Prepare for wakeup on resume and reset. */
-    USB->DCFG    = (USB->DCFG & ~_USB_DCFG_RESVALID_MASK) |
-                   (4 << _USB_DCFG_RESVALID_SHIFT);
-    USB->DCFG   |= USB_DCFG_ENA32KHZSUSP;
-    USB->GINTMSK = USB_GINTMSK_RESETDETMSK | USB_GINTMSK_WKUPINTMSK;
-
-    /* Enter partial powerdown mode. */
-    USB->PCGCCTL |= USB_PCGCCTL_PWRCLMP;
-    USB->PCGCCTL |= USB_PCGCCTL_RSTPDWNMODULE;
-    USB->PCGCCTL |= USB_PCGCCTL_STOPPCLK;
-
-    /* Record current clock settings. */
-    cmuStatus = CMU->STATUS;
-
-#if ( USB_PWRSAVE_MODE & USB_PWRSAVE_MODE_ENTEREM2 )
-#ifndef __MBED__
-    /* Enter EM2 on interrupt exit. */
-    SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk;
-#else
-    usbhal_allow_em2(true);
-#endif
-#endif
-
-    /* Switch USBC clock to 32 kHz. */
-#if ( USB_USBC_32kHz_CLK == USB_USBC_32kHz_CLK_LFXO )
-    CMU->CMD = CMU_CMD_USBCCLKSEL_LFXO;
-    while ( ( CMU->STATUS & CMU_STATUS_USBCLFXOSEL ) == 0 ){}
-#else
-    CMU->CMD = CMU_CMD_USBCCLKSEL_LFRCO;
-    while ( ( CMU->STATUS & CMU_STATUS_USBCLFRCOSEL ) == 0 ){}
-#endif
-
-    return true;
-  }
-  return false;
-}
-#endif /* if ( USB_PWRSAVE_MODE ) */
-
-#if ( USB_PWRSAVE_MODE )
-/*
- * Exit USB core partial powerdown mode, restore essential USB core registers.
- * Will prevent re-entry back to EM2.
- * Returns true if a powerup sequence was performed.
- */
-static bool UsbPowerUp( void )
-{
-#if ( NUM_EP_USED > 0 ) || ( FIFO_CNT > 0 )
-  int i;
-#endif
-#if ( NUM_EP_USED > 0 )
-  int epNum;
-  uint32_t tmp;
-  USBD_Ep_TypeDef *ep;
-#endif
-
-  if ( USBD_poweredDown )
-  {
-    USBD_poweredDown = false;
-    DEBUG_USB_INT_LO_PUTCHAR( '/' );
-
-#if !defined( USB_CORECLK_HFRCO ) || !defined( CMU_OSCENCMD_USHFRCOEN )
-    /* Switch HFCLK from HFRCO to HFXO. */
-    CMU_ClockSelectSet( cmuClock_HF, cmuSelect_HFXO );
-#endif
-
-    /* Turn off HFRCO when not needed. */
-    if ( ( cmuStatus & CMU_STATUS_HFRCOENS ) == 0 )
-    {
-      CMU->OSCENCMD = CMU_OSCENCMD_HFRCODIS;
-    }
-
-    /* Exit partial powerdown mode. */
-    USB->PCGCCTL &= ~USB_PCGCCTL_STOPPCLK;
-    USB->PCGCCTL &= ~(USB_PCGCCTL_PWRCLMP | USB_PCGCCTL_RSTPDWNMODULE);
-
-    if (( USB->GINTSTS & ( USB_GINTSTS_WKUPINT | USB_GINTSTS_RESETDET ) ) == 0)
-    {
-      USB->DCTL = x_USB_DCTL | USB_DCTL_RMTWKUPSIG;
-      USB->DCTL = x_USB_DCTL;
-    }
-
-    /* Restore USB core registers. */
-    USB->GUSBCFG = x_USB_GUSBCFG;
-    USB->DCFG    = x_USB_DCFG;
-
-#if ( FIFO_CNT > 0 )
-    for ( i = 0; i < FIFO_CNT; i++ )
-    {
-      USB_DIEPTXFS[ i ] = x_USB_DIEPTXFS[ i ];
-    }
-#endif
-
-#if ( NUM_EP_USED > 0 )
-    for ( i = 0; i < NUM_EP_USED; i++ )
-    {
-      ep = &dev->ep[ i+1 ];
-      epNum = ep->num;
-
-      tmp = x_USB_EP_CTL[ i ] &
-            ~( USB_DIEP_CTL_CNAK       | USB_DIEP_CTL_SNAK       |
-               USB_DIEP_CTL_SETD0PIDEF | USB_DIEP_CTL_SETD1PIDOF   );
-
-      if ( x_USB_EP_CTL[ i ] & USB_DIEP_CTL_DPIDEOF )
-        tmp |= USB_DIEP_CTL_SETD1PIDOF;
-      else
-        tmp |= USB_DIEP_CTL_SETD0PIDEF;
-
-      if ( x_USB_EP_CTL[ i ] & USB_DIEP_CTL_NAKSTS )
-        tmp |= USB_DIEP_CTL_SNAK;
-      else
-        tmp |= USB_DIEP_CTL_CNAK;
-
-      if ( ep->in )
-      {
-        USB_DINEPS[ epNum ].CTL     = tmp;
-        USB_DINEPS[ epNum ].TSIZ    = x_USB_EP_TSIZ[    i ];
-        USB_DINEPS[ epNum ].DMAADDR = x_USB_EP_DMAADDR[ i ];
-      }
-      else
-      {
-        USB_DOUTEPS[ epNum ].CTL     = tmp;
-        USB_DOUTEPS[ epNum ].TSIZ    = x_USB_EP_TSIZ[    i ];
-        USB_DOUTEPS[ epNum ].DMAADDR = x_USB_EP_DMAADDR[ i ];
-      }
-    }
-#endif
-
-    USB->PCGCCTL   = x_USB_PCGCCTL;
-    USB->DOEPMSK   = x_USB_DOEPMSK;
-    USB->DIEPMSK   = x_USB_DIEPMSK;
-    USB->DAINTMSK  = x_USB_DAINTMSK;
-    USB->DCTL      = x_USB_DCTL;
-    USB->GNPTXFSIZ = x_USB_GNPTXFSIZ;
-    USB->GRXFSIZ   = x_USB_GRXFSIZ;
-    USB->GAHBCFG   = x_USB_GAHBCFG;
-#if defined(_USB_GOTGCTL_MASK)
-    USB->GOTGCTL   = x_USB_GOTGCTL;
-#endif
-    USB->GINTMSK   = x_USB_GINTMSK;
-
-    USB->DCTL |= USB_DCTL_PWRONPRGDONE;
-
-#if ( USB_PWRSAVE_MODE & USB_PWRSAVE_MODE_ENTEREM2 )
-#ifndef __MBED__
-    /* Do not reenter EM2 on interrupt exit. */
-    SCB->SCR &= ~(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk);
-#else
-    usbhal_allow_em2(false);
-#endif
-#endif
-
-    return true;
-  }
-  return false;
-}
-#endif /* if ( USB_PWRSAVE_MODE ) */
-
-#if defined( USB_DOEP0INT_STUPPKTRCVD )
-static void HandleOutEpIntr( uint32_t status, USBD_Ep_TypeDef *ep )
-{
-  uint32_t doeptsiz;
-
-  if ( ep->num == 0 )
-  {
-    if ( status & USB_DOEP0INT_XFERCOMPL )
-    {
-      USB->DOEP0INT = USB_DOEP0INT_XFERCOMPL;
-      doeptsiz      = USB->DOEP0TSIZ;
-
-      if ( ep->state == D_EP_IDLE )
-      {
-        if ( status & USB_DOEP0INT_STUPPKTRCVD )
-        {
-          USB->DOEP0INT = USB_DOEP0INT_STUPPKTRCVD;
-        }
-        status = USBDHAL_GetOutEpInts( ep );
-        doeptsiz = USB->DOEP0TSIZ;
-
-        if ( status & USB_DOEP0INT_SETUP )
-        {
-retry:
-          /* Already started data stage, clear setup */
-          USB->DOEP0INT = USB_DOEP0INT_SETUP;
-          status       &= ~USB_DOEP0INT_SETUP;
-          {
-            int supCnt = ( doeptsiz & _USB_DOEP0TSIZ_SUPCNT_MASK )
-                         >> _USB_DOEP0TSIZ_SUPCNT_SHIFT;
-
-            if ( supCnt == 3 )
-              supCnt = 2;
-
-            dev->setup = &dev->setupPkt[ 2 - supCnt ];
-          }
-          DEBUG_USB_INT_LO_PUTS( "\nS" );
-          USBDEP_Ep0Handler( dev );
-
-          /* Prepare for more setup packets */
-          if ( ep->state == D_EP0_IN_STATUS || ep->state == D_EP_TRANSMITTING )
-          {
-            USBDHAL_StartEp0Setup( dev );
-          }
-        }
-        else /* xfercompl && idle && !setup */
-        {
-            status = USBDHAL_GetOutEpInts( ep );
-            if ( status & USB_DOEP0INT_SETUP )
-              goto retry;
-            USBDHAL_StartEp0Setup( dev );
-        }
-      }
-      else /* ep0state != EP0_IDLE */
-      {
-#ifdef __MBED__
-        if ( ep->state == D_EP_RECEIVING )
-        {
-          int xfer_size = ep->packetSize - (( USB->DOEP0TSIZ & _USB_DOEP0TSIZ_XFERSIZE_MASK )
-                                            >> _USB_DOEP0TSIZ_XFERSIZE_SHIFT);
-          int setup_pkt_received = status & USB_DOEP0INT_SETUP;
-
-          if ( (!setup_pkt_received && xfer_size == 0) ||
-               (setup_pkt_received && xfer_size == 8) )
-          {
-            /* Higher levels need to see the correct transfer amount for ZLPs */
-            ep->remaining = 0;
-            ep->xferred = 0;
-          }
-          else
-          {
-            /* FIXME - does not work if actual read size > 56 */
-            if ( setup_pkt_received ) xfer_size -= 8;
-
-            ep->xferred = xfer_size;
-            ep->remaining -= xfer_size;
-          }
-
-          USBDEP_Ep0Handler( dev );
-        }
-#else
-        if ( ep->state == D_EP_RECEIVING )
-        {
-          if ( ep->remaining > ep->packetSize )
-          {
-            ep->remaining -= ep->packetSize;
-            ep->xferred += ep->packetSize;
-          }
-          else
-          {
-            ep->xferred += ep->remaining;
-            ep->remaining = 0;
-          }
-          USBDEP_Ep0Handler( dev );
-        }
-        else if ( ep->state == D_EP0_OUT_STATUS )
-        {
-          USBDEP_Ep0Handler( dev );
-        }
-#endif
-      }
-    } /* if ( status & USB_DOEP0INT_XFERCOMPL ) */
-
-    if ( status & USB_DOEP0INT_STSPHSERCVD )
-    {
-      USB->DOEP0INT = USB_DOEP0INT_STSPHSERCVD;
-    }
-
-    if ( status & USB_DOEP0INT_SETUP )
-    {
-      USB->DOEP0INT = USB_DOEP0INT_SETUP;
-      {
-        int supCnt = ( USB->DOEP0TSIZ & _USB_DOEP0TSIZ_SUPCNT_MASK )
-                     >> _USB_DOEP0TSIZ_SUPCNT_SHIFT;
-
-        if ( supCnt == 3 )
-          supCnt = 2;
-
-        dev->setup = &dev->setupPkt[ 2 - supCnt ];
-      }
-      DEBUG_USB_INT_LO_PUTS( "\nS" );
-      USBDEP_Ep0Handler( dev );
-    }
-  }
-  else /* epnum != 0 */
-  {
-    if ( status & USB_DOEP_INT_XFERCOMPL )
-    {
-      USB_DOUTEPS[ ep->num ].INT = USB_DOEP_INT_XFERCOMPL;
-
-      ep->xferred = ep->hwXferSize -
-          ( ( USB_DOUTEPS[ ep->num ].TSIZ & _USB_DOEP_TSIZ_XFERSIZE_MASK )>>
-            _USB_DOEP_TSIZ_XFERSIZE_SHIFT );
-      ep->remaining -= ep->xferred;
-
-      USBDEP_EpHandler( ep->addr );
-    }
-  }
-}
-#endif
-
-/** @endcond */
-
-#endif /* defined( USB_DEVICE ) */
-#endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_Silicon_Labs/src/em_usbhal.c
--- a/USBDevice/TARGET_Silicon_Labs/src/em_usbhal.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,799 +0,0 @@
-/**************************************************************************//**
- * @file em_usbhal.c
- * @brief USB protocol stack library, low level USB peripheral access.
- * @version 3.20.14
- ******************************************************************************
- * @section License
- * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
- *******************************************************************************
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************/
-
-#include "em_device.h"
-#if defined( USB_PRESENT ) && ( USB_COUNT == 1 )
-#include "em_usb.h"
-#if defined( USB_DEVICE ) || defined( USB_HOST )
-
-#include "em_usbtypes.h"
-#include "em_usbhal.h"
-#if defined( USB_DEVICE )
-#include "em_usbd.h"
-#endif
-#if defined( USB_HOST )
-#include "em_usbh.h"
-#endif
-#include "em_cmu.h"
-#include "em_gpio.h"
-
-/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
-
-#define EPABORT_BREAK_LOOP_COUNT 15000              /* Approx. 100 ms */
-
-/* NOTE: The sequence of error message strings must agree with the    */
-/*       definition of USB_Status_TypeDef enum.                       */
-static const char * const errMsg[] =
-{
-  [  USB_STATUS_OK                  ] = "No errors",
-  [ -USB_STATUS_REQ_ERR             ] = "Setup request error",
-  [ -USB_STATUS_EP_BUSY             ] = "Endpoint is busy",
-  [ -USB_STATUS_REQ_UNHANDLED       ] = "Setup request not handled",
-  [ -USB_STATUS_ILLEGAL             ] = "Illegal operation attempted",
-  [ -USB_STATUS_EP_STALLED          ] = "Endpoint is stalled",
-  [ -USB_STATUS_EP_ABORTED          ] = "Transfer aborted",
-  [ -USB_STATUS_EP_ERROR            ] = "Transfer error",
-  [ -USB_STATUS_EP_NAK              ] = "Endpoint NAK",
-  [ -USB_STATUS_DEVICE_UNCONFIGURED ] = "Device is not configured",
-  [ -USB_STATUS_DEVICE_SUSPENDED    ] = "Device is suspended",
-  [ -USB_STATUS_DEVICE_RESET        ] = "Device has been reset",
-  [ -USB_STATUS_TIMEOUT             ] = "Transfer timeout",
-  [ -USB_STATUS_DEVICE_REMOVED      ] = "Device removed",
-  [ -USB_STATUS_HC_BUSY             ] = "Host channel is busy",
-  [ -USB_STATUS_DEVICE_MALFUNCTION  ] = "Device malfunction",
-  [ -USB_STATUS_PORT_OVERCURRENT    ] = "VBUS overcurrent",
-};
-/** @endcond */
-
-
-/***************************************************************************//**
- * @brief
- *   Return an error message string for a given error code.
- *
- * @param[in] error
- *   Error code, see \ref USB_Status_TypeDef.
- *
- * @return
- *   Error message string pointer.
- ******************************************************************************/
-char *USB_GetErrorMsgString( int error )
-{
-  if ( error >= 0 )
-    return (char*)errMsg[ 0 ];
-
-  return (char*)errMsg[ -error ];
-}
-
-
-#if defined( USB_USE_PRINTF )
-/***************************************************************************//**
- * @brief
- *   Format and print a text string given an error code, prepends an optional user
- *   supplied leader string.
- *
- * @param[in] pre
- *   Optional leader string to prepend to error message string.
- *
- * @param[in] error
- *   Error code, see \ref USB_Status_TypeDef.
- ******************************************************************************/
-void USB_PrintErrorMsgString( char *pre, int error )
-{
-  if ( pre )
-  {
-    USB_PRINTF( "%s", pre );
-  }
-
-  if ( error > USB_STATUS_OK )
-  {
-    USB_PRINTF( "%d", error );
-  }
-  else
-  {
-    USB_PRINTF( "%s", USB_GetErrorMsgString( error ) );
-  }
-}
-#endif /* defined( USB_USE_PRINTF ) */
-
-/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
-
-#if defined( DEBUG_EFM_USER )
-static void PrintI( int i )
-{
-#if !defined ( USER_PUTCHAR )
-  (void)i;
-#else
-  if ( i >= 10 )
-  {
-    PrintI( i / 10 );
-  }
-
-  DEBUG_USB_API_PUTCHAR( ( i % 10 ) + '0' );
-#endif
-}
-
-void assertEFM( const char *file, int line )
-{
-#if !defined ( USER_PUTCHAR )
-  (void)file;
-#endif
-
-  DEBUG_USB_API_PUTS( "\nASSERT " );
-  DEBUG_USB_API_PUTS( file );
-  DEBUG_USB_API_PUTCHAR( ' ' );
-  PrintI( line );
-  for(;;){}
-}
-#endif /* defined( DEBUG_EFM_USER ) */
-
-#if defined ( USER_PUTCHAR )
-void USB_Puts( const char *p )
-{
-  while( *p )
-    USB_PUTCHAR( *p++ );
-}
-#endif /* defined ( USER_PUTCHAR ) */
-
-void USBHAL_CoreReset( void )
-{
-  USB->PCGCCTL &= ~USB_PCGCCTL_STOPPCLK;
-  USB->PCGCCTL &= ~(USB_PCGCCTL_PWRCLMP | USB_PCGCCTL_RSTPDWNMODULE);
-
-  /* Core Soft Reset */
-  USB->GRSTCTL |= USB_GRSTCTL_CSFTRST;
-  while ( USB->GRSTCTL & USB_GRSTCTL_CSFTRST ) {}
-
-  USBTIMER_DelayUs( 1 );
-
-  /* Wait for AHB master IDLE state. */
-  while ( !( USB->GRSTCTL & USB_GRSTCTL_AHBIDLE ) ) {}
-}
-
-#ifdef USB_DEVICE
-void USBDHAL_Connect( void )
-{
-  USB->DCTL &= ~( DCTL_WO_BITMASK | USB_DCTL_SFTDISCON );
-}
-
-USB_Status_TypeDef USBDHAL_CoreInit( uint32_t totalRxFifoSize,
-                                     uint32_t totalTxFifoSize )
-{
-  uint8_t i, j;
-  uint16_t start, depth;
-  USBD_Ep_TypeDef *ep;
-
-#if !defined( USB_VBUS_SWITCH_NOT_PRESENT )
-  CMU_ClockEnable( cmuClock_GPIO, true );
-  GPIO_PinModeSet( gpioPortF, 5, gpioModePushPull, 0 ); /* Enable VBUSEN pin */
-  USB->ROUTE = USB_ROUTE_PHYPEN | USB_ROUTE_VBUSENPEN;  /* Enable PHY pins.  */
-#else
-  USB->ROUTE = USB_ROUTE_PHYPEN;                        /* Enable PHY pins.  */
-#endif
-
-  USBHAL_CoreReset();                                   /* Reset USB core    */
-
-#if defined( USB_GUSBCFG_FORCEHSTMODE )
-  /* Force Device Mode */
-  USB->GUSBCFG = ( USB->GUSBCFG                                    &
-                  ~(GUSBCFG_WO_BITMASK | USB_GUSBCFG_FORCEHSTMODE )  ) |
-                 USB_GUSBCFG_FORCEDEVMODE;
-#endif
-
-  INT_Enable();
-  USBTIMER_DelayMs( 50 );
-  INT_Disable();
-
-  /* Set device speed */
-  USB->DCFG = ( USB->DCFG & ~_USB_DCFG_DEVSPD_MASK ) | 3; /* Full speed PHY */
-
-  /* Stall on non-zero len status OUT packets (ctrl transfers). */
-  USB->DCFG |= USB_DCFG_NZSTSOUTHSHK;
-
-  /* Set periodic frame interval to 80% */
-  USB->DCFG &= ~_USB_DCFG_PERFRINT_MASK;
-
-  USB->GAHBCFG = ( USB->GAHBCFG & ~_USB_GAHBCFG_HBSTLEN_MASK ) |
-                 USB_GAHBCFG_DMAEN | USB_GAHBCFG_HBSTLEN_INCR;
-
-  /* Ignore frame numbers on ISO transfers. */
-  USB->DCTL = ( USB->DCTL & ~DCTL_WO_BITMASK ) | USB_DCTL_IGNRFRMNUM;
-
-  /* Set Rx FIFO size */
-  start = EFM32_MAX( totalRxFifoSize, MIN_EP_FIFO_SIZE_INWORDS );
-  USB->GRXFSIZ = ( start << _USB_GRXFSIZ_RXFDEP_SHIFT ) &
-                 _USB_GRXFSIZ_RXFDEP_MASK;
-
-  /* Set Tx EP0 FIFO size */
-  depth = EFM32_MAX( dev->ep[ 0 ].fifoSize, MIN_EP_FIFO_SIZE_INWORDS );
-  USB->GNPTXFSIZ = ( ( depth << _USB_GNPTXFSIZ_NPTXFINEPTXF0DEP_SHIFT ) &
-                     _USB_GNPTXFSIZ_NPTXFINEPTXF0DEP_MASK                 ) |
-                   ( ( start << _USB_GNPTXFSIZ_NPTXFSTADDR_SHIFT ) &
-                     _USB_GNPTXFSIZ_NPTXFSTADDR_MASK                      );
-
-
-  /* Set Tx EP FIFO sizes for all IN ep's */
-  for ( j = 1; j <= MAX_NUM_TX_FIFOS; j++ )
-  {
-    for ( i = 1; i <= MAX_NUM_IN_EPS; i++ )
-    {
-      ep = USBD_GetEpFromAddr( USB_SETUP_DIR_MASK | i );
-      if ( ep )                             /* Is EP in use ? */
-      {
-        if ( ep->txFifoNum == j )           /* Is it correct FIFO number ? */
-        {
-          start += depth;
-          depth = EFM32_MAX( ep->fifoSize, MIN_EP_FIFO_SIZE_INWORDS );
-          USB_DIEPTXFS[ ep->txFifoNum - 1 ] =
-                              ( depth << _USB_DIEPTXF1_INEPNTXFDEP_SHIFT   ) |
-                              ( start &  _USB_DIEPTXF1_INEPNTXFSTADDR_MASK );
-        }
-      }
-    }
-  }
-
-  if ( totalRxFifoSize + totalTxFifoSize > MAX_DEVICE_FIFO_SIZE_INWORDS )
-    return USB_STATUS_ILLEGAL;
-
-  if ( start > MAX_DEVICE_FIFO_SIZE_INWORDS )
-    return USB_STATUS_ILLEGAL;
-
-  /* Flush the FIFO's */
-  USBHAL_FlushTxFifo( 0x10 );      /* All Tx FIFO's */
-  USBHAL_FlushRxFifo();            /* The Rx FIFO   */
-
-  /* Disable all device interrupts */
-  USB->DIEPMSK  = 0;
-  USB->DOEPMSK  = 0;
-  USB->DAINTMSK = 0;
-  USB->DIEPEMPMSK = 0;
-
-  /* Disable all EP's, clear all EP ints. */
-  for ( i = 0; i <= MAX_NUM_IN_EPS; i++ )
-  {
-    USB_DINEPS[ i ].CTL  = 0;
-    USB_DINEPS[ i ].TSIZ = 0;
-    USB_DINEPS[ i ].INT  = 0xFFFFFFFF;
-  }
-
-  for ( i = 0; i <= MAX_NUM_OUT_EPS; i++ )
-  {
-    USB_DOUTEPS[ i ].CTL  = 0;
-    USB_DOUTEPS[ i ].TSIZ = 0;
-    USB_DOUTEPS[ i ].INT  = 0xFFFFFFFF;
-  }
-
-#if ( USB_DCTL_SFTDISCON_DEFAULT != 0 )
-  USBD_Connect();
-#endif
-
-  /* Enable VREGO sense. */
-  USB->CTRL |= USB_CTRL_VREGOSEN;
-  USB->IFC   = USB_IFC_VREGOSH | USB_IFC_VREGOSL;
-  USB->IEN   = USB_IFC_VREGOSH | USB_IFC_VREGOSL;
-  /* Force a VREGO interrupt. */
-  if ( USB->STATUS & USB_STATUS_VREGOS)
-    USB->IFS = USB_IFS_VREGOSH;
-  else
-    USB->IFS = USB_IFS_VREGOSL;
-
-  return USB_STATUS_OK;
-}
-
-USB_Status_TypeDef USBDHAL_ReconfigureFifos( uint32_t totalRxFifoSize,
-                                             uint32_t totalTxFifoSize )
-{
-  uint8_t i, j;
-  uint16_t start, depth;
-  USBD_Ep_TypeDef *ep;
-
-  /* Set Rx FIFO size */
-  start = EFM32_MAX( totalRxFifoSize, MIN_EP_FIFO_SIZE_INWORDS );
-  USB->GRXFSIZ = ( start << _USB_GRXFSIZ_RXFDEP_SHIFT ) &
-                 _USB_GRXFSIZ_RXFDEP_MASK;
-
-  /* Set Tx EP0 FIFO size */
-  depth = EFM32_MAX( dev->ep[ 0 ].fifoSize, MIN_EP_FIFO_SIZE_INWORDS );
-  USB->GNPTXFSIZ = ( ( depth << _USB_GNPTXFSIZ_NPTXFINEPTXF0DEP_SHIFT ) &
-                     _USB_GNPTXFSIZ_NPTXFINEPTXF0DEP_MASK                 ) |
-                   ( ( start << _USB_GNPTXFSIZ_NPTXFSTADDR_SHIFT ) &
-                     _USB_GNPTXFSIZ_NPTXFSTADDR_MASK                      );
-
-
-  /* Set Tx EP FIFO sizes for all IN ep's */
-  for ( j = 1; j <= MAX_NUM_TX_FIFOS; j++ )
-  {
-    for ( i = 1; i <= MAX_NUM_IN_EPS; i++ )
-    {
-      ep = USBD_GetEpFromAddr( USB_SETUP_DIR_MASK | i );
-      if ( ep )                             /* Is EP in use ? */
-      {
-        if ( ep->txFifoNum == j )           /* Is it correct FIFO number ? */
-        {
-          start += depth;
-          depth = EFM32_MAX( ep->fifoSize, MIN_EP_FIFO_SIZE_INWORDS );
-          USB_DIEPTXFS[ ep->txFifoNum - 1 ] =
-                              ( depth << _USB_DIEPTXF1_INEPNTXFDEP_SHIFT   ) |
-                              ( start &  _USB_DIEPTXF1_INEPNTXFSTADDR_MASK );
-        }
-      }
-    }
-  }
-
-  if ( totalRxFifoSize + totalTxFifoSize > MAX_DEVICE_FIFO_SIZE_INWORDS )
-    return USB_STATUS_ILLEGAL;
-
-  if ( start > MAX_DEVICE_FIFO_SIZE_INWORDS )
-    return USB_STATUS_ILLEGAL;
-
-  /* Flush the FIFO's */
-  USBHAL_FlushTxFifo( 0x10 );      /* All Tx FIFO's */
-  USBHAL_FlushRxFifo();            /* The Rx FIFO   */
-
-  return USB_STATUS_OK;
-}
-
-void USBDHAL_Disconnect( void )
-{
-  USB->DCTL = ( USB->DCTL & ~DCTL_WO_BITMASK ) | USB_DCTL_SFTDISCON;
-}
-
-void USBDHAL_AbortEpIn( USBD_Ep_TypeDef *ep )
-{
-  /* Clear epdis & inepnakeff INT's */
-  USB_DINEPS[ ep->num ].INT |= USB_DIEP_INT_EPDISBLD |
-                               USB_DIEP_INT_INEPNAKEFF;
-
-  /* Enable epdis & inepnakeff INT's */
-  USB->DIEPMSK |= USB_DIEPMSK_EPDISBLDMSK | USB_DIEPMSK_INEPNAKEFFMSK;
-  USB_DINEPS[ ep->num ].CTL = ( USB_DINEPS[ ep->num ].CTL  &
-                                ~DEPCTL_WO_BITMASK           ) |
-                              USB_DIEP_CTL_SNAK;
-
-  /* Wait for inepnakeff INT */
-  while ( !( USBDHAL_GetInEpInts( ep ) & USB_DIEP_INT_INEPNAKEFF ) ) {}
-  USB_DINEPS[ ep->num ].INT = USB_DIEP_INT_INEPNAKEFF;
-  USB->DIEPMSK &= ~USB_DIEPMSK_INEPNAKEFFMSK;
-
-  DEBUG_USB_INT_LO_PUTCHAR( '.' );
-
-  USBDHAL_SetEPDISNAK( ep );
-  /* Wait for epdis INT */
-  while ( !( USBDHAL_GetInEpInts( ep ) & USB_DIEP_INT_EPDISBLD ) ) {}
-  USB_DINEPS[ ep->num ].INT = USB_DIEP_INT_EPDISBLD;
-  USB->DIEPMSK &= ~USB_DIEPMSK_EPDISBLDMSK;
-  USBHAL_FlushTxFifo( ep->txFifoNum );
-
-  /* Clear any interrupts generated by the abort sequence. */
-  NVIC_ClearPendingIRQ( USB_IRQn );
-
-  DEBUG_USB_INT_LO_PUTCHAR( '.' );
-}
-
-void USBDHAL_AbortEpOut( USBD_Ep_TypeDef *ep )
-{
-  int cnt;
-
-  /* Clear epdis INT's */
-  USB_DOUTEPS[ ep->num ].INT |= USB_DOEP_INT_EPDISBLD;
-
-  /* Clear Global OUT NAK if already set */
-  USB->DCTL = ( USB->DCTL & ~DCTL_WO_BITMASK ) | USB_DCTL_CGOUTNAK;
-  USB->GINTMSK |= USB_GINTMSK_GOUTNAKEFFMSK;    /* Enable GOUTNAKEFF int */
-
-  /* Set Global OUT NAK */
-  USB->DCTL = ( USB->DCTL & ~DCTL_WO_BITMASK ) | USB_DCTL_SGOUTNAK;
-
-  /* Wait for goutnakeff */
-  cnt = EPABORT_BREAK_LOOP_COUNT;
-  while ( !( USB->GINTSTS & USB_GINTSTS_GOUTNAKEFF ) && cnt )
-  {
-    cnt--;
-  }
-
-  USB->GINTMSK &= ~USB_GINTMSK_GOUTNAKEFFMSK; /* Disable GOUTNAKEFF int  */
-  USB->DOEPMSK |= USB_DOEPMSK_EPDISBLDMSK;    /* Enable EPDIS interrupt  */
-
-  DEBUG_USB_INT_LO_PUTCHAR( ',' );
-
-  USBDHAL_SetEPDISNAK( ep );                  /* Disable ep */
-
-  /* Wait for epdis INT */
-  cnt = EPABORT_BREAK_LOOP_COUNT;
-  while ( !( USBDHAL_GetOutEpInts( ep ) & USB_DOEP_INT_EPDISBLD ) && cnt )
-  {
-    cnt--;
-  }
-
-  USB_DOUTEPS[ ep->num ].INT = USB_DOEP_INT_EPDISBLD;
-  USB->DOEPMSK &= ~USB_DOEPMSK_EPDISBLDMSK;     /* Disable EPDIS interrupt */
-
-  /* Clear Global OUT NAK */
-  USB->DCTL = ( USB->DCTL & ~DCTL_WO_BITMASK ) | USB_DCTL_CGOUTNAK;
-
-  /* Clear any interrupts generated by the abort sequence. */
-  NVIC_ClearPendingIRQ( USB_IRQn );
-
-  DEBUG_USB_INT_LO_PUTCHAR( ',' );
-}
-
-void USBDHAL_AbortAllEps( void )
-{
-  int i, cnt;
-  USBD_Ep_TypeDef *ep;
-  uint16_t im, om, inmask=0, outmask=0;
-
-  /* Clear epdis & inepnakeff INT's */
-  for ( i = 1; i <= NUM_EP_USED; i++ )
-  {
-    ep = &dev->ep[i];
-    if ( ep->state != D_EP_IDLE )
-    {
-      if ( ep->in )
-      {
-        inmask |= ep->mask;
-        USB_DINEPS[ ep->num ].INT |= USB_DIEP_INT_EPDISBLD |
-                                     USB_DIEP_INT_INEPNAKEFF;
-      }
-      else
-      {
-        outmask |= ep->mask;
-        USB_DOUTEPS[ ep->num ].INT |= USB_DOEP_INT_EPDISBLD;
-      }
-    }
-  }
-
-  if ( inmask )
-  {
-    /* Enable epdis & inepnakeff INT's */
-    USB->DIEPMSK |= USB_DIEPMSK_EPDISBLDMSK | USB_DIEPMSK_INEPNAKEFFMSK;
-
-    /* Set NAK on all IN ep's */
-    im = inmask;
-    for ( i = 1; i <= NUM_EP_USED; i++ )
-    {
-      ep = &dev->ep[i];
-      if ( im & ep->mask )
-      {
-        USB_DINEPS[ ep->num ].CTL = ( USB_DINEPS[ ep->num ].CTL &
-                                      ~DEPCTL_WO_BITMASK          ) |
-                                    USB_DIEP_CTL_SNAK;
-      }
-    }
-  }
-
-  if ( outmask )
-  {
-    /* Clear Global OUT NAK if already set */
-    USB->DCTL = ( USB->DCTL & ~DCTL_WO_BITMASK ) | USB_DCTL_CGOUTNAK;
-
-    USB->GINTMSK |= USB_GINTMSK_GOUTNAKEFFMSK;    /* Enable GOUTNAKEFF int */
-
-    /* Set Global OUT NAK */
-    USB->DCTL = ( USB->DCTL & ~DCTL_WO_BITMASK ) | USB_DCTL_SGOUTNAK;
-
-    /* Wait for goutnakeff */
-    cnt = EPABORT_BREAK_LOOP_COUNT;
-    while ( !( USB->GINTSTS & USB_GINTSTS_GOUTNAKEFF ) && cnt )
-    {
-      cnt--;
-    }
-    USB->GINTMSK &= ~USB_GINTMSK_GOUTNAKEFFMSK; /* Disable GOUTNAKEFF int  */
-    USB->DOEPMSK |= USB_DOEPMSK_EPDISBLDMSK;    /* Enable EPDIS interrupt  */
-  }
-
-  if ( inmask )
-  {
-    /* Wait for inepnakeff INT on all IN ep's */
-    im  = inmask;
-    cnt = EPABORT_BREAK_LOOP_COUNT;
-    do
-    {
-      for ( i = 1; i <= NUM_EP_USED; i++ )
-      {
-        ep = &dev->ep[i];
-        if ( im & ep->mask )
-        {
-          if ( USBDHAL_GetInEpInts( ep ) & USB_DIEP_INT_INEPNAKEFF )
-          {
-            USB_DINEPS[ ep->num ].INT = USB_DIEP_INT_INEPNAKEFF;
-            im &= ~ep->mask;
-          }
-        }
-      }
-      cnt--;
-    } while ( im && cnt );
-    USB->DIEPMSK &= ~USB_DIEPMSK_INEPNAKEFFMSK;
-  }
-
-  DEBUG_USB_INT_LO_PUTCHAR( '\'' );
-
-  /* Disable ep's */
-  for ( i = 1; i <= NUM_EP_USED; i++ )
-  {
-    ep = &dev->ep[i];
-    if ( ep->state != D_EP_IDLE )
-    {
-      USBDHAL_SetEPDISNAK( ep );
-    }
-  }
-
-  /* Wait for epdis INT */
-  im  = inmask;
-  om  = outmask;
-  cnt = EPABORT_BREAK_LOOP_COUNT;
-  do
-  {
-    for ( i = 1; i <= NUM_EP_USED; i++ )
-    {
-      ep = &dev->ep[i];
-      if ( ep->in && ( im & ep->mask ) )
-      {
-        if ( USBDHAL_GetInEpInts( ep ) & USB_DIEP_INT_EPDISBLD )
-        {
-          USB_DINEPS[ ep->num ].INT = USB_DIEP_INT_EPDISBLD;
-          im &= ~ep->mask;
-        }
-      }
-
-      if ( !ep->in && ( om & ep->mask ) )
-      {
-        if ( USBDHAL_GetOutEpInts( ep ) & USB_DOEP_INT_EPDISBLD )
-        {
-          USB_DOUTEPS[ ep->num ].INT = USB_DOEP_INT_EPDISBLD;
-          om &= ~ep->mask;
-        }
-      }
-    }
-    cnt--;
-  } while ( ( im || om ) && cnt );
-
-  if ( inmask )
-  {
-    USB->DIEPMSK &= ~USB_DIEPMSK_EPDISBLDMSK;     /* Disable EPDIS interrupt */
-    USBHAL_FlushTxFifo( 0x10 );                   /* Flush all Tx FIFO's     */
-  }
-
-  if ( outmask )
-  {
-    USB->DOEPMSK &= ~USB_DOEPMSK_EPDISBLDMSK;     /* Disable EPDIS interrupt */
-    /* Clear Global OUT NAK */
-    USB->DCTL = ( USB->DCTL & ~DCTL_WO_BITMASK ) | USB_DCTL_CGOUTNAK;
-  }
-
-  DEBUG_USB_INT_LO_PUTCHAR( '\'' );
-}
-
-void USBDHAL_AbortAllTransfers( USB_Status_TypeDef reason )
-{
-  int i;
-  USBD_Ep_TypeDef *ep;
-  USB_XferCompleteCb_TypeDef callback;
-
-  if ( reason != USB_STATUS_DEVICE_RESET )
-  {
-    USBDHAL_AbortAllEps();
-  }
-
-  for ( i = 1; i <= NUM_EP_USED; i++ )
-  {
-    ep = &(dev->ep[i]);
-    if ( ep->state != D_EP_IDLE )
-    {
-      ep->state = D_EP_IDLE;
-      if ( ep->xferCompleteCb )
-      {
-        callback = ep->xferCompleteCb;
-        ep->xferCompleteCb = NULL;
-
-        if ( ( dev->lastState == USBD_STATE_CONFIGURED ) &&
-             ( dev->state     == USBD_STATE_ADDRESSED  )    )
-        {
-          USBDHAL_DeactivateEp( ep );
-        }
-
-        DEBUG_TRACE_ABORT( reason );
-        callback( reason, ep->xferred, ep->remaining );
-      }
-    }
-  }
-
-  /* Clear any interrupts generated by the abort sequence. */
-  NVIC_ClearPendingIRQ( USB_IRQn );
-}
-#endif /* defined( USB_DEVICE ) */
-
-#if defined( USB_HOST )
-USB_Status_TypeDef USBHHAL_CoreInit( uint32_t rxFifoSize,
-                                     uint32_t nptxFifoSize,
-                                     uint32_t ptxFifoSize )
-{
-  uint8_t i;
-
-  rxFifoSize   /= 4;              /* Convert from byte count to word count.  */
-  nptxFifoSize /= 4;
-  ptxFifoSize  /= 4;
-
-  CMU_ClockEnable( cmuClock_GPIO, true );
-  GPIO_PinModeSet( gpioPortF, 5, gpioModePushPull, 0 ); /* Enable VBUSEN pin */
-
-#if ( USB_VBUSOVRCUR_PORT != USB_VBUSOVRCUR_PORT_NONE )
-  /* Enable VBUS overcurrent flag pin. */
-  GPIO_PinModeSet( USB_VBUSOVRCUR_PORT, USB_VBUSOVRCUR_PIN, gpioModeInput, 0 );
-#endif
-
-  USB->ROUTE = USB_ROUTE_PHYPEN | USB_ROUTE_VBUSENPEN;  /* Enable PHY pins.  */
-  USBHAL_CoreReset();                                   /* Reset USB core    */
-
-  /* Force Host Mode */
-  USB->GUSBCFG = ( USB->GUSBCFG                                     &
-                   ~(GUSBCFG_WO_BITMASK | USB_GUSBCFG_FORCEDEVMODE )  ) |
-                 USB_GUSBCFG_FORCEHSTMODE;
-
-  INT_Enable();
-  USBTIMER_DelayMs( 100 );
-  INT_Disable();
-
-  /* Set 48 MHz PHY clock, FS/LS mode */
-  USB->HCFG = ( USB->HCFG & ~_USB_HCFG_FSLSPCLKSEL_MASK ) |
-              ( 1 << _USB_HCFG_FSLSPCLKSEL_SHIFT        ) |
-              ( USB_HCFG_FSLSSUPP                       );
-
-  USB->GAHBCFG = ( USB->GAHBCFG & ~_USB_GAHBCFG_HBSTLEN_MASK ) |
-                 USB_GAHBCFG_DMAEN | USB_GAHBCFG_HBSTLEN_INCR;
-
-  /* Set Rx FIFO size */
-  USB->GRXFSIZ = ( rxFifoSize << _USB_GRXFSIZ_RXFDEP_SHIFT ) &
-                 _USB_GRXFSIZ_RXFDEP_MASK;
-
-  /* Set Tx FIFO sizes */
-  USB->GNPTXFSIZ = ( ( nptxFifoSize <<
-                       _USB_GNPTXFSIZ_NPTXFINEPTXF0DEP_SHIFT ) &
-                     _USB_GNPTXFSIZ_NPTXFINEPTXF0DEP_MASK        ) |
-                   ( ( rxFifoSize <<
-                       _USB_GNPTXFSIZ_NPTXFSTADDR_SHIFT      ) &
-                     _USB_GNPTXFSIZ_NPTXFSTADDR_MASK             );
-
-  USB->HPTXFSIZ  = ( ( ptxFifoSize  << _USB_HPTXFSIZ_PTXFSIZE_SHIFT   ) &
-                     _USB_HPTXFSIZ_PTXFSIZE_MASK                          ) |
-                   ( ( ( rxFifoSize + nptxFifoSize )
-                                    << _USB_HPTXFSIZ_PTXFSTADDR_SHIFT ) &
-                     _USB_HPTXFSIZ_PTXFSTADDR_MASK                        );
-
-  /* Flush Tx and Rx FIFO's */
-  USBHAL_FlushTxFifo( 0x10 );
-  USBHAL_FlushRxFifo();
-
-  for ( i = 0; i < MAX_NUM_HOSTCHANNELS; i++ )
-  {
-    USB->HC[ i ].CHAR = USB_HC_CHAR_CHDIS;      /* Disable channel          */
-    USB->HC[ i ].INT = 0xFFFFFFFF;              /* Clear pending interrupts */
-  }
-
-  /* Enable and halt all channels */
-  for ( i = 0; i < MAX_NUM_HOSTCHANNELS; i++ )
-  {
-    USB->HC[ i ].CHAR |= USB_HC_CHAR_CHDIS | USB_HC_CHAR_CHENA;
-    do
-    {
-      __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
-    }
-    while ( USB->HC[ i ].CHAR & USB_HC_CHAR_CHENA );
-  }
-
-  /* Disable all interrupts */
-  for ( i = 0; i < MAX_NUM_HOSTCHANNELS; i++ )
-  {
-    USB->HC[ i ].INTMSK = 0;
-  }
-
-  USB->HAINTMSK = 0;
-
-  return USB_STATUS_OK;
-}
-
-void USBHHAL_HCHalt( int hcnum, uint32_t hcchar )
-{
-  hcchar |= USB_HC_CHAR_CHENA | USB_HC_CHAR_CHDIS;
-  USB->HC[ hcnum ].CHAR = hcchar;
-}
-
-void USBHHAL_HCInit( int hcnum )
-{
-  USBH_Ep_TypeDef *ep;
-
-  ep = hcs[ hcnum ].ep;
-  USB->HC[ hcnum ].INT = 0xFFFFFFFF;      /* Clear all interrupt flags      */
-
-  switch ( ep->type )                     /* Enable host channel int. types */
-  {
-    case USB_EPTYPE_CTRL:
-    case USB_EPTYPE_BULK:
-    case USB_EPTYPE_INTR:
-      USB->HC[ hcnum ].INTMSK = USB_HC_INT_CHHLTD;
-      break;
-  }
-
-  hcs[ hcnum ].errorCnt = 0;
-
-  USB->HAINTMSK |= 1 << hcnum;            /* Enable host channel interrupt  */
-
-  USB->HC[ hcnum ].CHAR =                 /* Program HCCHAR register        */
-      ( ep->parentDevice->addr     <<   _USB_HC_CHAR_DEVADDR_SHIFT     ) |
-      ( ( ep->addr & USB_EPNUM_MASK ) << _USB_HC_CHAR_EPNUM_SHIFT      ) |
-      ( ep->type                   <<   _USB_HC_CHAR_EPTYPE_SHIFT      ) |
-      ( ep->packetSize             <<   _USB_HC_CHAR_MPS_SHIFT         ) |
-      ( ep->in                      ?   USB_HC_CHAR_EPDIR         : 0  ) |
-      ( ep->parentDevice->speed ==
-                           HPRT_L_SPEED >> _USB_HPRT_PRTSPD_SHIFT
-                                    ?   USB_HC_CHAR_LSPDDEV       : 0  );
-}
-
-void USBHHAL_HCStart( int hcnum )
-{
-  USBH_Hc_TypeDef *hc;
-  uint16_t packets, len;
-
-  hc = &hcs[ hcnum ];
-  hc->status = 0;
-  hc->idle = false;
-
-  if ( hc->remaining > 0 )
-  {
-    packets = ( hc->remaining + hc->ep->packetSize - 1 ) / hc->ep->packetSize;
-  }
-  else
-  {
-    packets = 1;
-  }
-
-  if ( hc->ep->in )
-  {
-    len = packets * hc->ep->packetSize;
-  }
-  else
-  {
-    len = hc->remaining;
-  }
-
-  /* Initialize the HCTSIZn register */
-  hc->hwXferSize = len;
-  USB->HC[ hcnum ].TSIZ =
-          ( ( len             << _USB_HC_TSIZ_XFERSIZE_SHIFT ) &
-                                 _USB_HC_TSIZ_XFERSIZE_MASK       ) |
-          ( ( packets         << _USB_HC_TSIZ_PKTCNT_SHIFT   ) &
-                                 _USB_HC_TSIZ_PKTCNT_MASK         ) |
-          ( ( hc->ep->toggle  << _USB_HC_TSIZ_PID_SHIFT      ) &
-                                 _USB_HC_TSIZ_PID_MASK            );
-
-  USB->HC[ hcnum ].DMAADDR = (uint32_t)hc->buf;
-
-  USBHHAL_HCActivate( hcnum,
-                      USB->HC[ hcnum ].CHAR,
-                      hc->ep->type == USB_EPTYPE_INTR );
-}
-#endif /* defined( USB_HOST ) */
-
-/** @endcond */
-
-#endif /* defined( USB_DEVICE ) || defined( USB_HOST ) */
-#endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/TARGET_Silicon_Labs/src/em_usbtimer.c
--- a/USBDevice/TARGET_Silicon_Labs/src/em_usbtimer.c	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,381 +0,0 @@
-/***************************************************************************//**
- * @file em_usbtimer.c
- * @brief USB protocol stack library, timer API.
- * @version 3.20.14
- *******************************************************************************
- * @section License
- * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
- *******************************************************************************
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************/
-
-#include "em_device.h"
-#if defined( USB_PRESENT ) && ( USB_COUNT == 1 )
-#include "em_usb.h"
-#if defined( USB_DEVICE ) || defined( USB_HOST )
-#include "em_cmu.h"
-#include "em_timer.h"
-#include "em_usbtypes.h"
-#include "em_usbhal.h"
-
-#include "device_peripherals.h"
-
-/*
- *  Use one HW timer to serve n software milisecond timers.
- *  A timer is, when running, in a linked list of timers.
- *  A given timers timeout period is the acculmulated timeout
- *  of all timers preceeding it in the queue.
- *  This makes timer start (linked list insertion) computing intensive,
- *  but the checking of the queue at each tick very effective.
- *             ______          ______          ______
- *            |      |    --->|      |    --->|      |
- *   head --> |      |   |    |      |   |    |      |
- *            |______|---     |______|---     |______|---/ NULL
- */
-
-/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
-
-#ifndef USB_TIMER
-#error HW platform must define the timer to use for USB
-#endif
-
-#if ( USB_TIMER == USB_TIMER0 ) && ( TIMER_COUNT >= 1 )
-  #define TIMER             TIMER0
-  #define TIMER_CLK         cmuClock_TIMER0
-  #define TIMER_IRQ         TIMER0_IRQn
-  #define TIMER_IRQHandler  TIMER0_IRQHandler
-
-#elif ( USB_TIMER == USB_TIMER1 ) && ( TIMER_COUNT >= 2 )
-  #define TIMER             TIMER1
-  #define TIMER_CLK         cmuClock_TIMER1
-  #define TIMER_IRQ         TIMER1_IRQn
-  #define TIMER_IRQHandler  TIMER1_IRQHandler
-
-#elif ( USB_TIMER == USB_TIMER2 ) && ( TIMER_COUNT >= 3 )
-  #define TIMER             TIMER2
-  #define TIMER_CLK         cmuClock_TIMER2
-  #define TIMER_IRQ         TIMER2_IRQn
-  #define TIMER_IRQHandler  TIMER2_IRQHandler
-
-#elif ( USB_TIMER == USB_TIMER3 ) && ( TIMER_COUNT == 4 )
-  #define TIMER             TIMER3
-  #define TIMER_CLK         cmuClock_TIMER3
-  #define TIMER_IRQ         TIMER3_IRQn
-  #define TIMER_IRQHandler  TIMER3_IRQHandler
-
-#else
-#error "Illegal USB TIMER definition"
-#endif
-
-typedef struct _timer
-{
-  uint32_t                  timeout;  /* Delta value relative to prev. timer */
-  struct _timer             *next;
-  USBTIMER_Callback_TypeDef callback;
-  bool                      running;
-} USBTIMER_Timer_TypeDef;
-
-#if ( NUM_QTIMERS > 0 )
-static USBTIMER_Timer_TypeDef timers[ NUM_QTIMERS ];
-static USBTIMER_Timer_TypeDef *head = NULL;
-#endif
-
-static uint32_t ticksPrMs, ticksPr1us, ticksPr10us, ticksPr100us;
-
-#if ( NUM_QTIMERS > 0 )
-
-static void TimerTick( void );
-
-void TIMER_IRQHandler( void )
-{
-  uint32_t flags;
-
-  flags = TIMER_IntGet( TIMER );
-
-  if ( flags & TIMER_IF_CC0 )
-  {
-    TIMER_IntClear( TIMER, TIMER_IFC_CC0 );
-    TIMER_CompareSet( TIMER, 0, TIMER_CaptureGet( TIMER, 0 ) + ticksPrMs );
-    TimerTick();
-  }
-}
-#endif /* ( NUM_QTIMERS > 0 ) */
-
-static void DelayTicks( uint16_t ticks )
-{
-  uint16_t startTime;
-  volatile uint16_t now;
-
-  if ( ticks )
-  {
-    startTime = TIMER_CounterGet( TIMER );
-    do
-    {
-      now = TIMER_CounterGet(TIMER);
-    } while ( (uint16_t)( now - startTime ) < ticks );
-  }
-}
-
-/** @endcond */
-
-/** @addtogroup USB_COMMON
- *  @{*/
-
-/***************************************************************************//**
- * @brief
- *   Active wait millisecond delay function. Can also be used inside
- *   interrupt handlers.
- *
- * @param[in] msec
- *   Number of milliseconds to wait.
- ******************************************************************************/
-void USBTIMER_DelayMs( uint32_t msec )
-{
-  uint64_t totalTicks;
-
-  totalTicks = (uint64_t)ticksPrMs * msec;
-  while ( totalTicks > 20000 )
-  {
-    DelayTicks( 20000 );
-    totalTicks -= 20000;
-  }
-  DelayTicks( (uint16_t)totalTicks );
-}
-
-/***************************************************************************//**
- * @brief
- *   Active wait microsecond delay function. Can also be used inside
- *   interrupt handlers.
- *
- * @param[in] usec
- *   Number of microseconds to wait.
- ******************************************************************************/
-void USBTIMER_DelayUs( uint32_t usec )
-{
-  uint64_t totalTicks;
-
-  totalTicks = (uint64_t)ticksPr1us * usec;
-  if ( totalTicks == 0 )
-  {
-    usec /= 10;
-    totalTicks = (uint64_t)ticksPr10us * usec;
-
-    if ( totalTicks == 0 )
-    {
-      usec /= 10;
-      totalTicks = (uint64_t)ticksPr100us * usec;
-    }
-  }
-
-  while ( totalTicks > 60000 )
-  {
-    DelayTicks( 60000 );
-    totalTicks -= 60000;
-  }
-  DelayTicks( (uint16_t)totalTicks );
-}
-
-/***************************************************************************//**
- * @brief
- *   Activate the hardware timer used to pace the 1 millisecond timer system.
- *
- * @details
- *   Call this function whenever the HFPERCLK frequency is changed.
- *   This function is initially called by HOST and DEVICE stack xxxx_Init()
- *   functions.
- ******************************************************************************/
-void USBTIMER_Init( void )
-{
-  uint32_t freq;
-  TIMER_Init_TypeDef timerInit     = TIMER_INIT_DEFAULT;
-  TIMER_InitCC_TypeDef timerCCInit = TIMER_INITCC_DEFAULT;
-
-  freq = CMU_ClockFreqGet( cmuClock_HFPER );
-  ticksPrMs = ( freq + 500 ) / 1000;
-  ticksPr1us = ( freq + 500000 ) / 1000000;
-  ticksPr10us = ( freq + 50000 ) / 100000;
-  ticksPr100us = ( freq + 5000 ) / 10000;
-
-  timerCCInit.mode = timerCCModeCompare;
-  CMU_ClockEnable( TIMER_CLK, true );
-  TIMER_TopSet( TIMER, 0xFFFF );
-  TIMER_InitCC( TIMER, 0, &timerCCInit );
-  TIMER_Init( TIMER, &timerInit );
-
-#if ( NUM_QTIMERS > 0 )
-  TIMER_IntClear( TIMER, 0xFFFFFFFF );
-  TIMER_IntEnable( TIMER, TIMER_IEN_CC0 );
-  TIMER_CompareSet( TIMER, 0, TIMER_CounterGet( TIMER ) + ticksPrMs );
-  NVIC_ClearPendingIRQ( TIMER_IRQ );
-  NVIC_EnableIRQ( TIMER_IRQ );
-#endif /* ( NUM_QTIMERS > 0 ) */
-}
-
-#if ( NUM_QTIMERS > 0 ) || defined( DOXY_DOC_ONLY )
-/***************************************************************************//**
- * @brief
- *   Start a timer.
- *
- * @details
- *   If the timer is already running, it will be restarted with new timeout.
- *
- * @param[in] id
- *   Timer id (0..).
- *
- * @param[in] timeout
- *   Number of milliseconds before timer will elapse.
- *
- * @param[in] callback
- *   Function to be called on timer elapse, ref. @ref USBTIMER_Callback_TypeDef.
- ******************************************************************************/
-void USBTIMER_Start( uint32_t id, uint32_t timeout,
-                     USBTIMER_Callback_TypeDef callback )
-{
-  uint32_t accumulated;
-  USBTIMER_Timer_TypeDef *this, **last;
-
-  INT_Disable();
-
-  if ( timers[ id ].running )
-  {
-    USBTIMER_Stop( id );
-  }
-
-  if ( timeout == 0 )
-  {
-    callback();
-    INT_Enable();
-    return;
-  }
-
-  timers[ id ].running  = true;
-  timers[ id ].callback = callback;
-  timers[ id ].next     = NULL;
-
-  if ( !head )                                        /* Queue empty ? */
-  {
-    timers[ id ].timeout  = timeout;
-    head = &timers[ id ];
-  }
-  else
-  {
-    this = head;
-    last = &head;
-    accumulated = 0;
-
-    /* Do a sorted insert */
-    while ( this  )
-    {
-      if ( timeout < accumulated + this->timeout )  /* Insert before "this" ? */
-      {
-        timers[ id ].timeout  = timeout - accumulated;
-        timers[ id ].next     = this;
-        *last = &timers[ id ];
-        this->timeout -= timers[ id ].timeout;        /* Adjust timeout     */
-        break;
-      }
-      else if ( this->next == NULL )                  /* At end of queue ?  */
-      {
-        timers[ id ].timeout  = timeout - accumulated - this->timeout;
-        this->next = &timers[ id ];
-        break;
-      }
-      accumulated += this->timeout;
-      last = &this->next;
-      this = this->next;
-    }
-  }
-
-  INT_Enable();
-}
-
-/***************************************************************************//**
- * @brief
- *   Stop a timer.
- *
- * @param[in] id
- *   Timer id (0..).
- ******************************************************************************/
-void USBTIMER_Stop( uint32_t id )
-{
-  USBTIMER_Timer_TypeDef *this, **last;
-
-  INT_Disable();
-
-  if ( head )                                           /* Queue empty ?    */
-  {
-    this = head;
-    last = &head;
-    timers[ id ].running = false;
-
-    while ( this  )
-    {
-      if ( this == &timers[ id ] )                      /* Correct timer ?  */
-      {
-        if ( this->next )
-        {
-          this->next->timeout += timers[ id ].timeout;  /* Adjust timeout   */
-        }
-        *last = this->next;
-        break;
-      }
-      last = &this->next;
-      this = this->next;
-    }
-  }
-
-  INT_Enable();
-}
-#endif /* ( NUM_QTIMERS > 0 ) */
-
-/** @} (end addtogroup USB_COMMON) */
-
-#if ( NUM_QTIMERS > 0 )
-/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
-
-static void TimerTick( void )
-{
-  USBTIMER_Callback_TypeDef cb;
-
-  INT_Disable();
-
-  if ( head )
-  {
-    head->timeout--;
-
-    while ( head  )
-    {
-      if ( head->timeout == 0 )
-      {
-        cb = head->callback;
-        head->running = false;
-        head = head->next;
-        /* The callback may place new items in the queue !!! */
-        if ( cb )
-        {
-          (cb)();
-        }
-        continue; /* There might be more than one timeout pr. tick */
-      }
-      break;
-    }
-  }
-
-  INT_Enable();
-}
-/** @endcond */
-#endif /* ( NUM_QTIMERS > 0 ) */
-
-#endif /* defined( USB_DEVICE ) || defined( USB_HOST ) */
-#endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/USBEndpoints_EFM32.h
--- a/USBDevice/USBEndpoints_EFM32.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-
-#ifndef TARGET_EFM32HG_STK3400
-# define NUMBER_OF_LOGICAL_ENDPOINTS   (6)
-#else
-# define NUMBER_OF_LOGICAL_ENDPOINTS   (3)
-#endif
-
-#define NUMBER_OF_PHYSICAL_ENDPOINTS  (NUMBER_OF_LOGICAL_ENDPOINTS * 2)
-#define NUMBER_OF_ENDPOINTS           (NUMBER_OF_PHYSICAL_ENDPOINTS + 2)  /* Includes EP0 */
-
-#define EP0OUT      (0)
-#define EP0IN       (1)
-#define EP1OUT      (2)
-#define EP1IN       (3)
-#define EP2OUT      (4)
-#define EP2IN       (5)
-#define EP3OUT      (6)
-#define EP3IN       (7)
-#ifndef TARGET_EFM32HG_STK3400
-# define EP4OUT     (8)
-# define EP4IN      (9)
-# define EP5OUT     (10)
-# define EP5IN      (11)
-# define EP6OUT     (12)
-# define EP6IN      (13)
-#endif
-
-#define USB_EP_TO_INDEX(ep) (ep)
-#define USB_EP_TO_ADDR(ep)  (((ep)>>1) | (((ep) & 1   ) ? 0x80 : 0x00))
-#define USB_ADDR_TO_EP(ep)  (((ep)<<1) | (((ep) & 0x80) ? 0x01 : 0x00))
-
-/* Maximum Packet sizes */
-
-#define MAX_PACKET_SIZE_EP0   64
-#define MAX_PACKET_SIZE_EP1   64
-#define MAX_PACKET_SIZE_EP2   64
-#define MAX_PACKET_SIZE_EP3   64
-#ifndef TARGET_EFM32HG_STK3400
-# define MAX_PACKET_SIZE_EP4  64
-# define MAX_PACKET_SIZE_EP5  64
-# define MAX_PACKET_SIZE_EP6  64
-#endif
-
-/* Generic endpoints - intended to be portable accross devices */
-/* and be suitable for simple USB devices. */
-
-/* Bulk endpoints */
-#define EPBULK_OUT            EP2OUT
-#define EPBULK_IN             EP2IN
-#define EPBULK_OUT_callback   EP2_OUT_callback
-#define EPBULK_IN_callback    EP2_IN_callback
-/* Interrupt endpoints */
-#define EPINT_OUT             EP1OUT
-#define EPINT_IN              EP1IN
-#define EPINT_OUT_callback    EP1_OUT_callback
-#define EPINT_IN_callback     EP1_IN_callback
-/* Isochronous endpoints */
-#define EPISO_OUT             EP3OUT
-#define EPISO_IN              EP3IN
-#define EPISO_OUT_callback    EP3_OUT_callback
-#define EPISO_IN_callback     EP3_IN_callback
-
-#define MAX_PACKET_SIZE_EPBULK  64
-#define MAX_PACKET_SIZE_EPINT   64
-#define MAX_PACKET_SIZE_EPISO   1023
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/USBEndpoints_KL25Z.h
--- a/USBDevice/USBEndpoints_KL25Z.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/* Copyright (c) 2010-2011 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#define NUMBER_OF_LOGICAL_ENDPOINTS (4)
-#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS * 2)
-
-/* Define physical endpoint numbers */
-
-/*      Endpoint    No.   */
-/*      ----------------  */
-#define EP0OUT      (0)
-#define EP0IN       (1)
-#define EP1OUT      (2)
-#define EP1IN       (3)
-#define EP2OUT      (4)
-#define EP2IN       (5)
-#define EP3OUT      (6)
-#define EP3IN       (7)
-
-/* Maximum Packet sizes */
-
-#define MAX_PACKET_SIZE_EP0  (64)
-#define MAX_PACKET_SIZE_EP1  (64)
-#define MAX_PACKET_SIZE_EP2  (64)
-#define MAX_PACKET_SIZE_EP3  (1023)
-
-/* Generic endpoints - intended to be portable accross devices */
-/* and be suitable for simple USB devices. */
-
-/* Bulk endpoints */
-#define EPBULK_OUT  (EP2OUT)
-#define EPBULK_IN   (EP2IN)
-#define EPBULK_OUT_callback   EP2_OUT_callback
-#define EPBULK_IN_callback    EP2_IN_callback
-/* Interrupt endpoints */
-#define EPINT_OUT   (EP1OUT)
-#define EPINT_IN    (EP1IN)
-#define EPINT_OUT_callback    EP1_OUT_callback
-#define EPINT_IN_callback     EP1_IN_callback
-/* Isochronous endpoints */
-#define EPISO_OUT   (EP3OUT)
-#define EPISO_IN    (EP3IN)
-#define EPISO_OUT_callback    EP3_OUT_callback
-#define EPISO_IN_callback     EP3_IN_callback
-
-#define MAX_PACKET_SIZE_EPBULK  (MAX_PACKET_SIZE_EP2)
-#define MAX_PACKET_SIZE_EPINT   (MAX_PACKET_SIZE_EP1)
-#define MAX_PACKET_SIZE_EPISO   (MAX_PACKET_SIZE_EP3)
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/USBEndpoints_LPC11U.h
--- a/USBDevice/USBEndpoints_LPC11U.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-/* Copyright (c) 2010-2011 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#define NUMBER_OF_LOGICAL_ENDPOINTS (5)
-#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS * 2)
-
-/* Define physical endpoint numbers */
-
-/*      Endpoint    No.     Type(s)       MaxPacket   DoubleBuffer  */
-/*      ----------------    ------------  ----------  ---           */
-#define EP0OUT      (0)  /* Control       64          No            */
-#define EP0IN       (1)  /* Control       64          No            */
-#define EP1OUT      (2)  /* Int/Bulk/Iso  64/64/1023  Yes           */
-#define EP1IN       (3)  /* Int/Bulk/Iso  64/64/1023  Yes           */
-#define EP2OUT      (4)  /* Int/Bulk/Iso  64/64/1023  Yes           */
-#define EP2IN       (5)  /* Int/Bulk/Iso  64/64/1023  Yes           */
-#define EP3OUT      (6)  /* Int/Bulk/Iso  64/64/1023  Yes           */
-#define EP3IN       (7)  /* Int/Bulk/Iso  64/64/1023  Yes           */
-#define EP4OUT      (8)  /* Int/Bulk/Iso  64/64/1023  Yes           */
-#define EP4IN       (9)  /* Int/Bulk/Iso  64/64/1023  Yes           */
-
-/* Maximum Packet sizes */
-
-#define MAX_PACKET_SIZE_EP0 (64)
-#define MAX_PACKET_SIZE_EP1 (64) /* Int/Bulk */
-#define MAX_PACKET_SIZE_EP2 (64) /* Int/Bulk */
-#define MAX_PACKET_SIZE_EP3 (64) /* Int/Bulk */
-#define MAX_PACKET_SIZE_EP4 (64) /* Int/Bulk */
-
-#define MAX_PACKET_SIZE_EP1_ISO (1023) /* Isochronous */
-#define MAX_PACKET_SIZE_EP2_ISO (1023) /* Isochronous */
-#define MAX_PACKET_SIZE_EP3_ISO (1023) /* Isochronous */
-#define MAX_PACKET_SIZE_EP4_ISO (1023) /* Isochronous */
-
-/* Generic endpoints - intended to be portable accross devices */
-/* and be suitable for simple USB devices. */
-
-/* Bulk endpoint */
-#define EPBULK_OUT  (EP2OUT)
-#define EPBULK_IN   (EP2IN)
-#define EPBULK_OUT_callback   EP2_OUT_callback
-#define EPBULK_IN_callback    EP2_IN_callback
-/* Interrupt endpoint */
-#define EPINT_OUT   (EP1OUT)
-#define EPINT_IN    (EP1IN)
-#define EPINT_OUT_callback    EP1_OUT_callback
-#define EPINT_IN_callback     EP1_IN_callback
-/* Isochronous endpoint */
-#define EPISO_OUT   (EP3OUT)
-#define EPISO_IN    (EP3IN)
-#define EPISO_OUT_callback    EP3_OUT_callback
-#define EPISO_IN_callback     EP3_IN_callback
-
-#define MAX_PACKET_SIZE_EPBULK  (MAX_PACKET_SIZE_EP2)
-#define MAX_PACKET_SIZE_EPINT   (MAX_PACKET_SIZE_EP1)
-#define MAX_PACKET_SIZE_EPISO   (MAX_PACKET_SIZE_EP3_ISO)
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/USBEndpoints_LPC17_LPC23.h
--- a/USBDevice/USBEndpoints_LPC17_LPC23.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-/* Copyright (c) 2010-2011 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#define NUMBER_OF_LOGICAL_ENDPOINTS (16)
-#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS * 2)
-
-/* Define physical endpoint numbers */
-
-/*      Endpoint    No.     Type(s)       MaxPacket   DoubleBuffer  */
-/*      ----------------    ------------  ----------  ---           */
-#define EP0OUT      (0)  /* Control       64          No            */
-#define EP0IN       (1)  /* Control       64          No            */
-#define EP1OUT      (2)  /* Interrupt     64          No            */
-#define EP1IN       (3)  /* Interrupt     64          No            */
-#define EP2OUT      (4)  /* Bulk          64          Yes           */
-#define EP2IN       (5)  /* Bulk          64          Yes           */
-#define EP3OUT      (6)  /* Isochronous   1023        Yes           */
-#define EP3IN       (7)  /* Isochronous   1023        Yes           */
-#define EP4OUT      (8)  /* Interrupt     64          No            */
-#define EP4IN       (9)  /* Interrupt     64          No            */
-#define EP5OUT      (10) /* Bulk          64          Yes           */
-#define EP5IN       (11) /* Bulk          64          Yes           */
-#define EP6OUT      (12) /* Isochronous   1023        Yes           */
-#define EP6IN       (13) /* Isochronous   1023        Yes           */
-#define EP7OUT      (14) /* Interrupt     64          No            */
-#define EP7IN       (15) /* Interrupt     64          No            */
-#define EP8OUT      (16) /* Bulk          64          Yes           */
-#define EP8IN       (17) /* Bulk          64          Yes           */
-#define EP9OUT      (18) /* Isochronous   1023        Yes           */
-#define EP9IN       (19) /* Isochronous   1023        Yes           */
-#define EP10OUT     (20) /* Interrupt     64          No            */
-#define EP10IN      (21) /* Interrupt     64          No            */
-#define EP11OUT     (22) /* Bulk          64          Yes           */
-#define EP11IN      (23) /* Bulk          64          Yes           */
-#define EP12OUT     (24) /* Isochronous   1023        Yes           */
-#define EP12IN      (25) /* Isochronous   1023        Yes           */
-#define EP13OUT     (26) /* Interrupt     64          No            */
-#define EP13IN      (27) /* Interrupt     64          No            */
-#define EP14OUT     (28) /* Bulk          64          Yes           */
-#define EP14IN      (29) /* Bulk          64          Yes           */
-#define EP15OUT     (30) /* Bulk          64          Yes           */
-#define EP15IN      (31) /* Bulk          64          Yes           */
-
-/* Maximum Packet sizes */
-
-#define MAX_PACKET_SIZE_EP0  (64)
-#define MAX_PACKET_SIZE_EP1  (64)
-#define MAX_PACKET_SIZE_EP2  (64)
-#define MAX_PACKET_SIZE_EP3  (1023)
-#define MAX_PACKET_SIZE_EP4  (64)
-#define MAX_PACKET_SIZE_EP5  (64)
-#define MAX_PACKET_SIZE_EP6  (1023)
-#define MAX_PACKET_SIZE_EP7  (64)
-#define MAX_PACKET_SIZE_EP8  (64)
-#define MAX_PACKET_SIZE_EP9  (1023)
-#define MAX_PACKET_SIZE_EP10 (64)
-#define MAX_PACKET_SIZE_EP11 (64)
-#define MAX_PACKET_SIZE_EP12 (1023)
-#define MAX_PACKET_SIZE_EP13 (64)
-#define MAX_PACKET_SIZE_EP14 (64)
-#define MAX_PACKET_SIZE_EP15 (64)
-
-/* Generic endpoints - intended to be portable accross devices */
-/* and be suitable for simple USB devices. */
-
-/* Bulk endpoints */
-#define EPBULK_OUT  (EP2OUT)
-#define EPBULK_IN   (EP2IN)
-#define EPBULK_OUT_callback   EP2_OUT_callback
-#define EPBULK_IN_callback    EP2_IN_callback
-/* Interrupt endpoints */
-#define EPINT_OUT   (EP1OUT)
-#define EPINT_IN    (EP1IN)
-#define EPINT_OUT_callback    EP1_OUT_callback
-#define EPINT_IN_callback     EP1_IN_callback
-/* Isochronous endpoints */
-#define EPISO_OUT   (EP3OUT)
-#define EPISO_IN    (EP3IN)
-#define EPISO_OUT_callback    EP3_OUT_callback
-#define EPISO_IN_callback     EP3_IN_callback
-
-#define MAX_PACKET_SIZE_EPBULK  (MAX_PACKET_SIZE_EP2)
-#define MAX_PACKET_SIZE_EPINT   (MAX_PACKET_SIZE_EP1)
-#define MAX_PACKET_SIZE_EPISO   (MAX_PACKET_SIZE_EP3)
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/USBEndpoints_M453.h
--- a/USBDevice/USBEndpoints_M453.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-/* mbed Microcontroller Library
- * Copyright (c) 2015-2016 Nuvoton
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#define NU_MAX_EPX_BUFSIZE      4096
-#define NU_EP2EPL(ep)           ((ep) >> 1)
-#define NU_EP2EPH(ep)           (((ep) >> 1) + 1)
-#define NU_EPL2EPH(ep)          ((ep) + 1)
-#define NU_EPH2EPL(ep)          ((ep) - 1)
-#define NU_EP_DIR_Pos           0
-#define NU_EP_DIR_Msk           (1 << NU_EP_DIR_Pos)
-#define NU_EP_DIR_OUT           0
-#define NU_EP_DIR_IN            1
-
-#define NU_EP_TYPE(ep)          (((ep) & NU_EP_TYPE_Msk) >> NU_EP_TYPE_Pos)
-#define NU_EP_NUM(ep)           (((ep) & NU_EP_NUM_Msk) >> NU_EP_NUM_Pos)
-#define NU_EP_DIR(ep)           (((ep) & NU_EP_DIR_Msk) >> NU_EP_DIR_Pos)
-#define NU_EP_NUM_DIR(ep)       ((NU_EP_NUM(ep) << 1) | NU_EP_DIR(ep))
-
-#define NUMBER_OF_PHYSICAL_ENDPOINTS    8
-#define EP0OUT      (0)
-#define EP0IN       (1)
-#define EP1OUT      (2)
-#define EP1IN       (3)
-#define EP2OUT      (4)
-#define EP2IN       (5)
-#define EP3OUT      (6)
-#define EP3IN       (7)
-#define EP4OUT      (8)
-#define EP4IN       (9)
-#define EP5OUT     (10)
-#define EP5IN      (11)
-#define EP6OUT     (12)
-#define EP6IN      (13)
-
-/* Maximum Packet sizes */
-#define MAX_PACKET_SIZE_EP0     64
-#define MAX_PACKET_SIZE_EP1     64
-#define MAX_PACKET_SIZE_EP2     64
-#define MAX_PACKET_SIZE_EP3     0x60
-#define MAX_PACKET_SIZE_EP4     64
-#define MAX_PACKET_SIZE_EP5     64
-#define MAX_PACKET_SIZE_EP6     64
-#define MAX_PACKET_SIZE_EP7     64
-
-/* Generic endpoints - intended to be portable accross devices */
-/* and be suitable for simple USB devices. */
-
-/* Bulk endpoints */
-#define EPBULK_OUT            EP5OUT
-#define EPBULK_IN             EP6IN
-#define EPBULK_OUT_callback   EP5_OUT_callback
-#define EPBULK_IN_callback    EP6_IN_callback
-/* Interrupt endpoints */
-#define EPINT_OUT             EP1OUT
-#define EPINT_IN              EP2IN
-#define EPINT_OUT_callback    EP1_OUT_callback
-#define EPINT_IN_callback     EP2_IN_callback
-/* Isochronous endpoints */
-#define EPISO_OUT             EP3OUT
-#define EPISO_IN              EP4IN
-#define EPISO_OUT_callback    EP3_OUT_callback
-#define EPISO_IN_callback     EP4_IN_callback
-
-#define MAX_PACKET_SIZE_EPBULK  64
-#define MAX_PACKET_SIZE_EPINT   64
-#define MAX_PACKET_SIZE_EPISO   1023
-
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/USBEndpoints_Maxim.h
--- a/USBDevice/USBEndpoints_Maxim.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,94 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2015 Maxim Integrated Products, Inc., All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
- * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name of Maxim Integrated
- * Products, Inc. shall not be used except as stated in the Maxim Integrated
- * Products, Inc. Branding Policy.
- *
- * The mere transfer of this software does not imply any licenses
- * of trade secrets, proprietary technology, copyrights, patents,
- * trademarks, maskwork rights, or any other form of intellectual
- * property whatsoever. Maxim Integrated Products, Inc. retains all
- * ownership rights.
- *******************************************************************************
- */
-
-#define NUMBER_OF_LOGICAL_ENDPOINTS   (8)
-#define NUMBER_OF_PHYSICAL_ENDPOINTS  (NUMBER_OF_LOGICAL_ENDPOINTS * 2)
-
-#define DIR_OUT       0x00
-#define DIR_IN        0x01
-#define EP_NUM(ep)    (ep >> 1)
-#define IN_EP(ep)     (ep & DIR_IN)
-#define OUT_EP(ep)    (!(ep & DIR_IN))
-
-/* Define physical endpoint numbers */
-
-/*      Endpoint    No.   */
-/*      ----------------  */
-#define EP0OUT      ((0 << 1) | DIR_OUT)
-#define EP0IN       ((0 << 1) | DIR_IN)
-#define EP1OUT      ((1 << 1) | DIR_OUT)
-#define EP1IN       ((1 << 1) | DIR_IN)
-#define EP2OUT      ((2 << 1) | DIR_OUT)
-#define EP2IN       ((2 << 1) | DIR_IN)
-#define EP3OUT      ((3 << 1) | DIR_OUT)
-#define EP3IN       ((3 << 1) | DIR_IN)
-#define EP4OUT      ((4 << 1) | DIR_OUT)
-#define EP4IN       ((4 << 1) | DIR_IN)
-#define EP5OUT      ((5 << 1) | DIR_OUT)
-#define EP5IN       ((5 << 1) | DIR_IN)
-#define EP6OUT      ((6 << 1) | DIR_OUT)
-#define EP6IN       ((6 << 1) | DIR_IN)
-#define EP7OUT      ((7 << 1) | DIR_OUT)
-#define EP7IN       ((7 << 1) | DIR_IN)
-
-/* Maximum Packet sizes */
-
-#define MAX_PACKET_SIZE_EP0  (64)
-#define MAX_PACKET_SIZE_EP1  (64)
-#define MAX_PACKET_SIZE_EP2  (64)
-#define MAX_PACKET_SIZE_EP3  (64)
-#define MAX_PACKET_SIZE_EP4  (64)
-#define MAX_PACKET_SIZE_EP5  (64)
-#define MAX_PACKET_SIZE_EP6  (64)
-#define MAX_PACKET_SIZE_EP7  (64)
-
-/* Generic endpoints - intended to be portable accross devices */
-/* and be suitable for simple USB devices. */
-
-/* Bulk endpoints */
-#define EPBULK_OUT  (EP1OUT)
-#define EPBULK_IN   (EP2IN)
-#define EPBULK_OUT_callback   EP1_OUT_callback
-#define EPBULK_IN_callback    EP2_IN_callback
-/* Interrupt endpoints */
-#define EPINT_OUT   (EP3OUT)
-#define EPINT_IN    (EP4IN)
-#define EPINT_OUT_callback    EP3_OUT_callback
-#define EPINT_IN_callback     EP4_IN_callback
-/* Isochronous endpoints */
-/* NOT SUPPORTED - use invalid endpoint number to prevent built errors */
-#define EPISO_OUT   (EP0OUT)
-#define EPISO_IN    (EP0IN)
-
-#define MAX_PACKET_SIZE_EPBULK  (64)
-#define MAX_PACKET_SIZE_EPINT   (64)
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/USBEndpoints_NUC472.h
--- a/USBDevice/USBEndpoints_NUC472.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-/* mbed Microcontroller Library
- * Copyright (c) 2015-2016 Nuvoton
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#define NU_MAX_EPX_BUFSIZE      4096
-#define NU_EP2EPL(ep)           ((ep) >> 1)
-#define NU_EP2EPH(ep)           (((ep) >> 1) - 1)
-#define NU_EPX2EP(ep)           ((ep == CEP) ? EP0OUT : ((ep) - EPA + EP1OUT))
-#define NU_EPL2EPH(ep)          ((ep) - 1)
-#define NU_EPH2EPL(ep)          ((ep) + 1)
-#define NU_EP_DIR_Pos           0
-#define NU_EP_DIR_Msk           (1 << NU_EP_DIR_Pos)
-#define NU_EP_DIR_OUT           0
-#define NU_EP_DIR_IN            1
-
-#define NU_EP_TYPE(ep)          (((ep) & NU_EP_TYPE_Msk) >> NU_EP_TYPE_Pos)
-#define NU_EP_NUM(ep)           (((ep) & NU_EP_NUM_Msk) >> NU_EP_NUM_Pos)
-#define NU_EP_DIR(ep)           (((ep) & NU_EP_DIR_Msk) >> NU_EP_DIR_Pos)
-#define NU_EP_NUM_DIR(ep)       ((NU_EP_NUM(ep) << 1) | NU_EP_DIR(ep))
-
-#define NUMBER_OF_PHYSICAL_ENDPOINTS    12
-
-#define EP0OUT      (0)
-#define EP0IN       (1)
-#define EP1OUT      (2)
-#define EP1IN       (3)
-#define EP2OUT      (4)
-#define EP2IN       (5)
-#define EP3OUT      (6)
-#define EP3IN       (7)
-#define EP4OUT      (8)
-#define EP4IN       (9)
-#define EP5OUT     (10)
-#define EP5IN      (11)
-#define EP6OUT     (12)
-#define EP6IN      (13)
-
-/* Maximum Packet sizes */
-#define MAX_PACKET_SIZE_EP0     64
-#define MAX_PACKET_SIZE_EP1     64
-#define MAX_PACKET_SIZE_EP2     64
-#define MAX_PACKET_SIZE_EP3     0x60
-#define MAX_PACKET_SIZE_EP4     64
-#define MAX_PACKET_SIZE_EP5     64
-#define MAX_PACKET_SIZE_EP6     64
-#define MAX_PACKET_SIZE_EP7     64
-#define MAX_PACKET_SIZE_EP8     64
-#define MAX_PACKET_SIZE_EP9     64
-#define MAX_PACKET_SIZE_EP10    64
-#define MAX_PACKET_SIZE_EP11    64
-
-/* Generic endpoints - intended to be portable accross devices */
-/* and be suitable for simple USB devices. */
-
-/* Bulk endpoints */
-#define EPBULK_OUT            EP5OUT
-#define EPBULK_IN             EP6IN
-#define EPBULK_OUT_callback   EP5_OUT_callback
-#define EPBULK_IN_callback    EP6_IN_callback
-/* Interrupt endpoints */
-#define EPINT_OUT             EP1OUT
-#define EPINT_IN              EP2IN
-#define EPINT_OUT_callback    EP1_OUT_callback
-#define EPINT_IN_callback     EP2_IN_callback
-/* Isochronous endpoints */
-#define EPISO_OUT             EP3OUT
-#define EPISO_IN              EP4IN
-#define EPISO_OUT_callback    EP3_OUT_callback
-#define EPISO_IN_callback     EP4_IN_callback
-
-#define MAX_PACKET_SIZE_EPBULK  64
-#define MAX_PACKET_SIZE_EPINT   64
-#define MAX_PACKET_SIZE_EPISO   1023
-
-#define USBD_GET_EP_MAX_PAYLOAD(ep)     (*((__IO uint32_t *) ((uint32_t)&USBD->EPAMPS + (uint32_t)((ep)*0x28)))) 
-#define USBD_GET_EP_DATA_COUNT(ep)      ((*((__IO uint32_t *) ((uint32_t)&USBD->EPADATCNT + (uint32_t)((ep)*0x28)))) & 0xFFFFF)
-#define USBD_SET_EP_SHORT_PACKET(ep)    (*((__IO uint32_t *) ((uint32_t)&USBD->EPARSPCTL + (uint32_t)((ep)*0x28))) = (*((__IO uint32_t *) ((uint32_t)&USBD->EPARSPCTL + (uint32_t)((ep)*0x28)))) & 0x10 | 0x40)
-#define USBD_GET_EP_INT_EN(ep)          (*((__IO uint32_t *) ((uint32_t)&USBD->EPAINTEN + (uint32_t)((ep)*0x28))))
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/USBEndpoints_RZ_A1H.h
--- a/USBDevice/USBEndpoints_RZ_A1H.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-/* Copyright (c) 2010-2011 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#define NUMBER_OF_LOGICAL_ENDPOINTS (16)
-#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS * 2)
-
-/* Define physical endpoint numbers */
-
-/*      Endpoint    No.     Type(s)   MaxSiz  DoubleBuf  pipe */
-/*      ----------------    --------- ------  ---------  ---- */
-#define EP0OUT      (0)  /* Control    256    No           0  */
-#define EP0IN       (1)  /* Control    256    No           0  */
-#define EP1OUT      (2)  /* Int         64    No           6  */
-#define EP1IN       (3)  /* Int         64    No           7  */
-#define EP2OUT      (4)  /* Bulk      2048    Yes          3  */
-#define EP2IN       (5)  /* Bulk      2048    Yes          4  */
-#define EP3OUT      (6)  /* Bulk/Iso  2048    Yes          1  */
-#define EP3IN       (7)  /* Bulk/Iso  2048    Yes          2  */
-/*following EP is not configured in sample program*/
-#define EP6IN       (8)  /* Bulk      2048    Yes          5  */
-#define EP8IN       (9)  /* Int        64     No           8  */
-#define EP9IN       (10) /* Bulk       512    Bulk         9  */
-#define EP10IN      (11) /* Int/Bulk  2048    Bulk        10  */
-#define EP11IN      (12) /* Bulk      2048    Yes         11  */
-#define EP12IN      (13) /* Bulk      2048    Yes         12  */
-#define EP13IN      (14) /* Bulk      2048    Yes         13  */
-#define EP14IN      (15) /* Bulk      2048    Yes         14  */
-#define EP15IN      (16) /* Bulk      2048    Yes         15  */
-
-/* Maximum Packet sizes */
-#define MAX_PACKET_SIZE_EP0   (64)      /*pipe0/pipe0: control      */
-#define MAX_PACKET_SIZE_EP1   (64)      /*pipe6/pipe7: interrupt    */
-#define MAX_PACKET_SIZE_EP2  (512)      /*pipe3/pipe4: bulk         */
-#define MAX_PACKET_SIZE_EP3  (512)      /*pipe1/pipe2: isochronous  */
-#define MAX_PACKET_SIZE_EP6   (64)      /*pipe5:    Note *1 */
-#define MAX_PACKET_SIZE_EP8   (64)      /*pipe7:    Note *1 */
-#define MAX_PACKET_SIZE_EP9  (512)      /*pipe8:    Note *1 */
-#define MAX_PACKET_SIZE_EP10 (512)      /*pipe9:    Note *1 */
-#define MAX_PACKET_SIZE_EP11 (512)      /*pipe10:   Note *1 */
-#define MAX_PACKET_SIZE_EP12 (512)      /*pipe11:   Note *1 */
-#define MAX_PACKET_SIZE_EP13 (512)      /*pipe12:   Note *1 */
-#define MAX_PACKET_SIZE_EP14 (512)      /*pipe13:   Note *1 */
-#define MAX_PACKET_SIZE_EP15 (512)      /*pipe14:   Note *1 */
-/* Note *1: This pipe is not configure in sample program */
-
-
-/* Generic endpoints - intended to be portable accross devices */
-/* and be suitable for simple USB devices. */
-
-/* Bulk endpoints */
-#define EPBULK_OUT  (EP2OUT)
-#define EPBULK_IN   (EP2IN)
-#define EPBULK_OUT_callback   EP2_OUT_callback
-#define EPBULK_IN_callback    EP2_IN_callback
-/* Interrupt endpoints */
-#define EPINT_OUT   (EP1OUT)
-#define EPINT_IN    (EP1IN)
-#define EPINT_OUT_callback    EP1_OUT_callback
-#define EPINT_IN_callback     EP1_IN_callback
-/* Isochronous endpoints */
-#define EPISO_OUT   (EP3OUT)
-#define EPISO_IN    (EP3IN)
-#define EPISO_OUT_callback    EP3_OUT_callback
-#define EPISO_IN_callback     EP3_IN_callback
-
-#define MAX_PACKET_SIZE_EPBULK  (MAX_PACKET_SIZE_EP2)
-#define MAX_PACKET_SIZE_EPINT   (MAX_PACKET_SIZE_EP1)
-#define MAX_PACKET_SIZE_EPISO   (MAX_PACKET_SIZE_EP3)
-
-/*EOF*/
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/USBEndpoints_STM32.h
--- a/USBDevice/USBEndpoints_STM32.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/* Copyright (c) 2010-2011 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#define NUMBER_OF_LOGICAL_ENDPOINTS (4)
-#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS * 2)
-
-/* Define physical endpoint numbers */
-
-/*      Endpoint    No.     Type(s)       MaxPacket   DoubleBuffer  */
-/*      ----------------    ------------  ----------  ---           */
-#define EP0OUT      (0)  /* Control       64          No            */
-#define EP0IN       (1)  /* Control       64          No            */
-#define EP1OUT      (2)  /* Int/Bulk/Iso  64/64/1023  Yes           */
-#define EP1IN       (3)  /* Int/Bulk/Iso  64/64/1023  Yes           */
-#define EP2OUT      (4)  /* Int/Bulk/Iso  64/64/1023  Yes           */
-#define EP2IN       (5)  /* Int/Bulk/Iso  64/64/1023  Yes           */
-#define EP3OUT      (6)  /* Int/Bulk/Iso  64/64/1023  Yes           */
-#define EP3IN       (7)  /* Int/Bulk/Iso  64/64/1023  Yes           */
-
-/* Maximum Packet sizes */
-#define MAX_PACKET_SIZE_SETUP (48)
-#define MAX_PACKET_SIZE_EP0 (64)
-#define MAX_PACKET_SIZE_EP1 (64) /* Int/Bulk */
-#define MAX_PACKET_SIZE_EP2 (64) /* Int/Bulk */
-#define MAX_PACKET_SIZE_EP3 (200) /* Int/Bulk/iso (44100 stereo 16 bits) */
-
-#define MAX_PACKET_SIZE_EP1_ISO (1023) /* Isochronous */
-#define MAX_PACKET_SIZE_EP2_ISO (1023) /* Isochronous */
-#define MAX_PACKET_SIZE_EP3_ISO (1023) /* Isochronous */
-
-/* Generic endpoints - intended to be portable accross devices */
-/* and be suitable for simple USB devices. */
-
-/* Bulk endpoint */
-#define EPBULK_OUT  (EP2OUT)
-#define EPBULK_IN   (EP2IN)
-#define EPBULK_OUT_callback   EP2_OUT_callback
-#define EPBULK_IN_callback    EP2_IN_callback
-/* Interrupt endpoint */
-#define EPINT_OUT   (EP1OUT)
-#define EPINT_IN    (EP1IN)
-#define EPINT_OUT_callback    EP1_OUT_callback
-#define EPINT_IN_callback     EP1_IN_callback
-/* Isochronous endpoint */
-#define EPISO_OUT   (EP3OUT)
-#define EPISO_IN    (EP3IN)
-#define EPISO_OUT_callback    EP3_OUT_callback
-#define EPISO_IN_callback     EP3_IN_callback
-
-#define MAX_PACKET_SIZE_EPBULK  (MAX_PACKET_SIZE_EP2)
-#define MAX_PACKET_SIZE_EPINT   (MAX_PACKET_SIZE_EP1)
-#define MAX_PACKET_SIZE_EPISO   (MAX_PACKET_SIZE_EP3_ISO)
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/USBEndpoints_STM32F4.h
--- a/USBDevice/USBEndpoints_STM32F4.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/* Copyright (c) 2010-2011 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#define NUMBER_OF_LOGICAL_ENDPOINTS (4)
-#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS * 2)
-
-/* Define physical endpoint numbers */
-
-/*      Endpoint    No.     Type(s)       MaxPacket   DoubleBuffer  */
-/*      ----------------    ------------  ----------  ---           */
-#define EP0OUT      (0)  /* Control       64          No            */
-#define EP0IN       (1)  /* Control       64          No            */
-#define EP1OUT      (2)  /* Int/Bulk/Iso  64/64/1023  Yes           */
-#define EP1IN       (3)  /* Int/Bulk/Iso  64/64/1023  Yes           */
-#define EP2OUT      (4)  /* Int/Bulk/Iso  64/64/1023  Yes           */
-#define EP2IN       (5)  /* Int/Bulk/Iso  64/64/1023  Yes           */
-#define EP3OUT      (6)  /* Int/Bulk/Iso  64/64/1023  Yes           */
-#define EP3IN       (7)  /* Int/Bulk/Iso  64/64/1023  Yes           */
-
-/* Maximum Packet sizes */
-
-#define MAX_PACKET_SIZE_EP0 (64)
-#define MAX_PACKET_SIZE_EP1 (64) /* Int/Bulk */
-#define MAX_PACKET_SIZE_EP2 (64) /* Int/Bulk */
-#define MAX_PACKET_SIZE_EP3 (64) /* Int/Bulk */
-
-#define MAX_PACKET_SIZE_EP1_ISO (1023) /* Isochronous */
-#define MAX_PACKET_SIZE_EP2_ISO (1023) /* Isochronous */
-#define MAX_PACKET_SIZE_EP3_ISO (1023) /* Isochronous */
-
-/* Generic endpoints - intended to be portable accross devices */
-/* and be suitable for simple USB devices. */
-
-/* Bulk endpoint */
-#define EPBULK_OUT  (EP2OUT)
-#define EPBULK_IN   (EP2IN)
-#define EPBULK_OUT_callback   EP2_OUT_callback
-#define EPBULK_IN_callback    EP2_IN_callback
-/* Interrupt endpoint */
-#define EPINT_OUT   (EP1OUT)
-#define EPINT_IN    (EP1IN)
-#define EPINT_OUT_callback    EP1_OUT_callback
-#define EPINT_IN_callback     EP1_IN_callback
-/* Isochronous endpoint */
-#define EPISO_OUT   (EP3OUT)
-#define EPISO_IN    (EP3IN)
-#define EPISO_OUT_callback    EP3_OUT_callback
-#define EPISO_IN_callback     EP3_IN_callback
-
-#define MAX_PACKET_SIZE_EPBULK  (MAX_PACKET_SIZE_EP2)
-#define MAX_PACKET_SIZE_EPINT   (MAX_PACKET_SIZE_EP1)
-#define MAX_PACKET_SIZE_EPISO   (MAX_PACKET_SIZE_EP3_ISO)
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/USBHAL_EFM32.cpp
--- a/USBDevice/USBHAL_EFM32.cpp	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,775 +0,0 @@
-/* Copyright 2015 Silicon Labs, http://www.silabs.com
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#if defined TARGET_EFM32GG_STK3700 || \
-    defined TARGET_EFM32LG_STK3600 || \
-    defined TARGET_EFM32WG_STK3800 || \
-    defined TARGET_EFM32HG_STK3400
-
-#include "USBHAL.h"
-#include "em_usb.h"
-#include "em_usbtypes.h"
-#include "em_usbhal.h"
-#include "em_usbd.h"
-
-#include "sleepmodes.h"
-
-enum USBISRCommand {
-    CMD_HANDLED = 0,
-    CMD_EP0SETUP,
-    CMD_EP0IN,
-    CMD_EP0OUT,
-    CMD_EP_XFER_COMPLETED,
-    CMD_SOF,
-    CMD_BUSRESET,
-    CMD_SUSPEND_STATE_CHANGED,
-    CMD_ENUM_END_MARKER
-};
-
-enum IEPStatus {
-    NOT_CONFIGURED = 0,
-    IDLE = 1,
-    READ_PENDING = 2,
-    WRITE_PENDING = 3,
-    READ_COMPLETE = 4,
-    WRITE_COMPLETE = 5,
-    FAILED_INVALID = 6,
-    FAILED_STALLED = 7
-};
-
-typedef struct {
-    IEPStatus status;
-    uint32_t byte_count;
-    uint32_t max_packet;
-    USB_XferCompleteCb_TypeDef intern_cb;
-    uint8_t *data_buf;
-} ep_state_t;
-
-USBHAL * USBHAL::instance;
-static uint8_t ep0setupdata[8];
-static ep_state_t ep_state[NUMBER_OF_ENDPOINTS];
-#ifdef USB_USE_DYNAMIC_MEMORY
-static uint8_t ep0in_data_buf[MAX_PACKET_SIZE_EP0] __attribute__ ((aligned (4)));
-static uint8_t ep0out_data_buf[MAX_PACKET_SIZE_EP0]; // FIXME: does this need to be this big?
-#else
-static uint8_t ep_data_buf[NUMBER_OF_ENDPOINTS][64] __attribute__ ((aligned (4)));
-#endif
-
-static void run_cmd(USBISRCommand cmd, uint32_t param);
-static void (*isrptr)() = NULL;
-static USBISRCommand usb_isrcmd = CMD_HANDLED;
-static uint32_t usb_isrcmd_param = 0;
-
-extern "C" void usbhal_allow_em2(bool allow_em2);
-
-#ifdef DEBUG_USB_API
-#define TRACE(fmt,...)            printf("USB:   %s: " fmt "\n", __func__, __VA_ARGS__);
-#define TRACE_FUNC_IN             printf("USB: > %s\n",__func__);
-#define TRACE_FUNC_IN_P(fmt, ...) printf("USB: > %s: " fmt "\n", __func__, __VA_ARGS__);
-#else
-#define TRACE(fmt,...)
-#define TRACE_FUNC_IN
-#define TRACE_FUNC_IN_P(fmt, ...)
-#endif
-
-static EP_STATUS internEndpointRead(uint8_t ep, uint32_t maxSize);
-
-static int usbhal_xfer_complete_cb(uint8_t epaddr, USB_Status_TypeDef status,
-                                   uint32_t xferred, uint32_t remaining);
-static void usbhal_free_buffers(void);
-
-/* Internal EP transfer complete callbacks */
-#define EPCB(n) static int usbhal_xfer_complete_cb_##n(USB_Status_TypeDef status,              \
-                                                       uint32_t xferred, uint32_t remaining) { \
-        return usbhal_xfer_complete_cb(n, status, xferred, remaining);                         \
-}
-/*   ------^   */
-EPCB(EP0OUT)
-EPCB(EP0IN)
-EPCB(EP1OUT)
-EPCB(EP1IN)
-EPCB(EP2OUT)
-EPCB(EP2IN)
-EPCB(EP3OUT)
-EPCB(EP3IN)
-#ifndef TARGET_EFM32HG_STK3400
-EPCB(EP4OUT)
-EPCB(EP4IN)
-EPCB(EP5OUT)
-EPCB(EP5IN)
-EPCB(EP6OUT)
-EPCB(EP6IN)
-#endif
-
-static inline bool is_aligned(const void *pointer, size_t byte_count)
-{
-    return ((uintptr_t)pointer % byte_count == 0);
-}
-
-USBHAL::USBHAL(void)
-{
-    TRACE_FUNC_IN;
-
-    isrptr = &USBHAL::_usbisr;
-
-    if (instance) {
-        TRACE("Assert self failed! instance=%p", instance);
-        abort();
-    }
-    instance = this;
-
-    // When USB is active, we can't go below EM1. This block may
-    // be dynamically removed/reinstated to allow deeper sleep.
-    usbhal_allow_em2(false);
-
-    // When in suspend / Vbus off we can go to EM2, but never below
-    // that as long as USB is being used. Despite the name the call here
-    // blocks entering modes _below_ EM2, but allows EM2.
-    blockSleepMode(EM2);
-
-    epCallback[EP0OUT] = NULL;
-    epCallback[EP0IN ] = NULL;
-    epCallback[EP1OUT] = &USBHAL::EP1_OUT_callback;
-    epCallback[EP1IN ] = &USBHAL::EP1_IN_callback;
-    epCallback[EP2OUT] = &USBHAL::EP2_OUT_callback;
-    epCallback[EP2IN ] = &USBHAL::EP2_IN_callback;
-    epCallback[EP3OUT] = &USBHAL::EP3_OUT_callback;
-    epCallback[EP3IN ] = &USBHAL::EP3_IN_callback;
-#ifndef TARGET_EFM32HG_STK3400
-    epCallback[EP4OUT] = &USBHAL::EP4_OUT_callback;
-    epCallback[EP4IN ] = &USBHAL::EP4_IN_callback;
-    epCallback[EP5OUT] = &USBHAL::EP5_OUT_callback;
-    epCallback[EP5IN ] = &USBHAL::EP5_IN_callback;
-    epCallback[EP6OUT] = &USBHAL::EP6_OUT_callback;
-    epCallback[EP6IN ] = &USBHAL::EP6_IN_callback;
-#endif
-
-    memset(ep_state, 0, sizeof(ep_state));
-
-    ep_state[EP0OUT].intern_cb = usbhal_xfer_complete_cb_EP0OUT;
-    ep_state[EP0IN ].intern_cb = usbhal_xfer_complete_cb_EP0IN;
-    ep_state[EP1OUT].intern_cb = usbhal_xfer_complete_cb_EP1OUT;
-    ep_state[EP1IN ].intern_cb = usbhal_xfer_complete_cb_EP1IN;
-    ep_state[EP2OUT].intern_cb = usbhal_xfer_complete_cb_EP2OUT;
-    ep_state[EP2IN ].intern_cb = usbhal_xfer_complete_cb_EP2IN;
-    ep_state[EP3OUT].intern_cb = usbhal_xfer_complete_cb_EP3OUT;
-    ep_state[EP3IN ].intern_cb = usbhal_xfer_complete_cb_EP3IN;
-#ifndef TARGET_EFM32HG_STK3400
-    ep_state[EP4OUT].intern_cb = usbhal_xfer_complete_cb_EP4OUT;
-    ep_state[EP4IN ].intern_cb = usbhal_xfer_complete_cb_EP4IN;
-    ep_state[EP5OUT].intern_cb = usbhal_xfer_complete_cb_EP5OUT;
-    ep_state[EP5IN ].intern_cb = usbhal_xfer_complete_cb_EP5IN;
-    ep_state[EP6OUT].intern_cb = usbhal_xfer_complete_cb_EP6OUT;
-    ep_state[EP6IN ].intern_cb = usbhal_xfer_complete_cb_EP6IN;
-#endif
-
-#ifdef USB_USE_DYNAMIC_MEMORY
-    ep_state[EP0OUT].data_buf = ep0out_data_buf;
-    ep_state[EP0IN].data_buf = ep0in_data_buf;
-#else
-    for (int i=0 ; i<NUMBER_OF_ENDPOINTS ; i++) {
-        ep_state[i].data_buf = ep_data_buf[i];
-    }
-#endif
-}
-
-USBHAL::~USBHAL(void)
-{
-    TRACE_FUNC_IN;
-    USBD_AbortAllTransfers();
-    USBD_Disconnect();
-    usbhal_free_buffers();
-
-    usbhal_allow_em2(true);
-    unblockSleepMode(EM2);
-}
-
-extern "C" void usbhal_allow_em2(bool allow_em2)
-{
-    if (allow_em2) {
-        // unblockSleepMode is safe to call even if we would unblock
-        // an already unblocked mode, so no checks here.
-        unblockSleepMode(EM1);
-    } else {
-        blockSleepMode(EM1);
-    }
-}
-
-static void usbhal_reset_cb(void)
-{
-    TRACE_FUNC_IN;
-    run_cmd(CMD_BUSRESET, 0);
-}
-
-#ifdef DEBUG_USB_API
-static const char *usbstate[] = { "NONE", "ATTACHED", "POWERED", "DEFAULT",
-                                  "ADDRESSED", "CONFIGURED", "SUSPENDED", "???" };
-#endif
-
-static void usbhal_state_change_cb(USBD_State_TypeDef oldState,
-                                   USBD_State_TypeDef newState)
-{
-    TRACE("state changed %s -> %s", usbstate[oldState], usbstate[newState]);
-
-    if (oldState == USBD_STATE_SUSPENDED) {
-        run_cmd(CMD_SUSPEND_STATE_CHANGED, 0);
-    }
-
-    if (newState == USBD_STATE_SUSPENDED) {
-        run_cmd(CMD_SUSPEND_STATE_CHANGED, 1);
-    }
-
-    // Should call connectStateChanged from here as well but there is
-    // no documentation on when to actually do so. (And the implementation
-    // in USBDevice.cpp is a stub)
-
-    // HACK! Since connectStateChanged is not used, indicate the loss
-    // off connection by reporting a bus reset. This causes USBDevice
-    // to realise that at least it's not in CONFIGURED anymore, and
-    // stop trying to read/write in a busyloop.
-    if (newState == USBD_STATE_NONE) {
-        run_cmd(CMD_BUSRESET, 0);
-    }
-}
-
-static int usbhal_setupcmd_cb(const USB_Setup_TypeDef *setup)
-{
-    TRACE_FUNC_IN;
-    if (!setup) {
-        EFM_ASSERT(false);
-        return USB_STATUS_REQ_ERR;
-    }
-
-    memcpy(ep0setupdata, setup, 8);
-    run_cmd(CMD_EP0SETUP, 0);
-
-    return USB_STATUS_OK;
-}
-
-static void usbhal_sof_cb(uint16_t frameNum)
-{
-    run_cmd(CMD_SOF, frameNum);
-}
-
-static void usbhal_free_buffers(void)
-{
-#ifdef USB_USE_DYNAMIC_MEMORY
-    TRACE_FUNC_IN;
-
-    for (int i=EP1OUT ; i<NUMBER_OF_ENDPOINTS ; i++ ) {
-        if (ep_state[i].data_buf) {
-            free(ep_state[i].data_buf);
-            ep_state[i].data_buf = NULL;
-        }
-    }
-#endif
-}
-
-void USBHAL::connect(void)
-{
-    TRACE_FUNC_IN;
-
-    // Init datastructures must be static - driver will use these even after the init function exits!
-
-    static const uint8_t buffer_multiplier[] = { 1 }; // Mult 1 for control EP
-    static const USBD_Callbacks_TypeDef usbd_callbacks = {
-        .usbReset = usbhal_reset_cb,
-        .usbStateChange = usbhal_state_change_cb,
-        .setupCmd = usbhal_setupcmd_cb,
-        .isSelfPowered = NULL,
-        .sofInt = usbhal_sof_cb
-    };
-
-    USBD_Init_TypeDef initdata = {
-        .deviceDescriptor = NULL,
-        .configDescriptor = NULL,
-        .stringDescriptors = NULL,
-        .numberOfStrings = 0,
-        .bufferingMultiplier = buffer_multiplier,
-        .callbacks = &usbd_callbacks,
-        .reserved = 0
-    };
-
-    int ret = USBD_Init(&initdata);
-
-    TRACE("init = %d, devicedesc = %lx, configdesc = %lx", ret,
-          (uint32_t) initdata.deviceDescriptor,
-          (uint32_t) initdata.configDescriptor);
-
-    EFM_ASSERT(ret == USB_STATUS_OK);
-}
-
-void USBHAL::disconnect(void)
-{
-    TRACE_FUNC_IN;
-    USBD_Disconnect();
-}
-
-void USBHAL::configureDevice(void)
-{
-    TRACE_FUNC_IN;
-    USBD_SetUsbState(USBD_STATE_CONFIGURED);
-}
-
-void USBHAL::unconfigureDevice(void)
-{
-    TRACE_FUNC_IN;
-    USBD_SetUsbState(USBD_STATE_DEFAULT);
-    usbhal_free_buffers();
-}
-
-void USBHAL::setAddress(uint8_t address)
-{
-    TRACE_FUNC_IN_P("addr 0x%x", (unsigned)address);
-    USBD_SetAddress(address);
-}
-
-void USBHAL::remoteWakeup(void)
-{
-    TRACE_FUNC_IN;
-    USBD_RemoteWakeup();
-}
-
-void USBHAL::EP0setup(uint8_t *buffer)
-{
-    TRACE_FUNC_IN;
-    EFM_ASSERT(buffer);
-    if (buffer) {
-        memcpy(buffer, ep0setupdata, 8);
-    }
-}
-
-void USBHAL::EP0read(void)
-{
-    TRACE_FUNC_IN;
-    (void)internEndpointRead(0, MAX_PACKET_SIZE_EP0);
-}
-
-void USBHAL::EP0readStage(void)
-{
-    TRACE_FUNC_IN;
-    // Not needed
-}
-
-uint32_t USBHAL::EP0getReadResult(uint8_t *buffer)
-{
-    TRACE_FUNC_IN;
-    EFM_ASSERT(buffer);
-
-    uint32_t read = 0;
-    endpointReadResult(0, buffer, &read);
-    return read;
-}
-
-static int usbhal_xfer_complete_cb(uint8_t ep, USB_Status_TypeDef status,
-                                   uint32_t xferred, uint32_t remaining)
-{
-    TRACE_FUNC_IN_P("ep 0x%x, status %u, xferred %lu, rem %lu",
-                    ep, status, xferred, remaining);
-
-    if (ep >= NUMBER_OF_ENDPOINTS) {
-        EFM_ASSERT(false);
-        return USB_STATUS_REQ_ERR;
-    }
-
-    switch (ep) {
-        case EP0OUT:
-            if (ep_state[EP0OUT].status == READ_PENDING) {
-                ep_state[EP0OUT].status = READ_COMPLETE;
-                ep_state[EP0OUT].byte_count = xferred;
-                // drop zlp
-                if (xferred == 0) {
-                    break;
-                }
-            }
-            run_cmd(CMD_EP0OUT, 0);
-            break;
-
-        case EP0IN:
-            run_cmd(CMD_EP0IN, 0);
-            break;
-
-        default:
-            bool write = ep & 1;
-
-            if (status == USB_STATUS_OK) {
-                if (!write && ep_state[ep].status == READ_PENDING) {
-                    ep_state[ep].status = READ_COMPLETE;
-                    ep_state[ep].byte_count = xferred;
-                } else if (write && ep_state[ep].status == WRITE_PENDING) {
-                    ep_state[ep].status = WRITE_COMPLETE;
-                } else {
-                    ep_state[ep].status = FAILED_INVALID;
-                }
-            } else {
-                ep_state[ep].status = FAILED_INVALID;
-            }
-
-            if (ep_state[ep].status != FAILED_INVALID) {
-                run_cmd(CMD_EP_XFER_COMPLETED, ep);
-            }
-            break;
-    }
-
-    return USB_STATUS_OK;
-}
-
-void USBHAL::EP0write(uint8_t *buffer, uint32_t size)
-{
-    //TRACE_FUNC_IN_P("buffer %lx, size %lu", (uint32_t) buffer, size);
-
-    int ret;
-    USB_XferCompleteCb_TypeDef cb = ep_state[EP0IN].intern_cb;
-
-    EFM_ASSERT((buffer != NULL) || (size == 0));
-    EFM_ASSERT(size <= MAX_PACKET_SIZE_EP0);
-
-    if (!buffer || size == 0) {
-        // No callback after writing EP0 ZLP
-        cb = NULL;
-    }
-
-    if (buffer && !is_aligned(buffer,4)) {
-        // Copy unaligned data to write-buffer before USBD_Write
-        memcpy(ep_state[EP0IN].data_buf, buffer, size);
-        ret = USBD_Write(0, ep_state[EP0IN].data_buf, size, cb);
-    } else {
-        ret = USBD_Write(0, buffer, size, cb);
-    }
-
-    if (ret != USB_STATUS_OK) {
-        TRACE("FAILED - ret %d", ret);
-    }
-}
-
-void USBHAL::EP0stall(void)
-{
-    TRACE_FUNC_IN;
-    USBD_StallEp0();
-}
-
-static EP_STATUS internEndpointRead(uint8_t ep, uint32_t maxSize)
-{
-    //TRACE_FUNC_IN_P("endpoint 0x%x, size %ld, cb %d", (unsigned)ep, maxSize, useCallback);
-
-    if (ep >= NUMBER_OF_ENDPOINTS) {
-        EFM_ASSERT(false);
-        return EP_INVALID;
-    }
-
-    ep_state[ep].status = READ_PENDING;
-
-    int ret = USBD_Read(USB_EP_TO_ADDR(ep), ep_state[ep].data_buf, maxSize,
-                        ep_state[ep].intern_cb);
-
-    if (ret == USB_STATUS_OK) {
-        return EP_PENDING;
-    } else {
-        TRACE("FAILED - ret %d", ret);
-
-        if (ret == USB_STATUS_EP_STALLED) {
-            return EP_STALLED;
-        } else {
-            return EP_INVALID;
-        }
-    }
-}
-
-EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize)
-{
-    return internEndpointRead(endpoint, maximumSize);
-}
-
-EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t *data, uint32_t *bytesRead)
-{
-    TRACE_FUNC_IN;
-
-    if (endpoint >= NUMBER_OF_ENDPOINTS) {
-        EFM_ASSERT(false);
-        return EP_INVALID;
-    }
-
-    EFM_ASSERT(data);
-    EFM_ASSERT(bytesRead);
-    if (!data || !bytesRead) {
-        return EP_INVALID;
-    }
-
-    switch (ep_state[endpoint].status) {
-        case READ_PENDING:
-            return EP_PENDING;
-
-        case READ_COMPLETE:
-            memcpy(data, ep_state[endpoint].data_buf, ep_state[endpoint].byte_count);
-            *bytesRead = ep_state[endpoint].byte_count;
-            ep_state[endpoint].status = IDLE;
-            return EP_COMPLETED;
-
-        case FAILED_STALLED:
-            ep_state[endpoint].status = IDLE;
-            return EP_STALLED;
-
-        default:
-            ep_state[endpoint].status = IDLE;
-            return EP_INVALID;
-    }
-}
-
-EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size)
-{
-    TRACE_FUNC_IN_P("endpoint 0x%x, data 0x%lx, size %lu", (unsigned )endpoint, (uint32_t)data, size);
-
-    EFM_ASSERT(endpoint < NUMBER_OF_ENDPOINTS);
-    EFM_ASSERT(endpoint > EP0IN);
-    EFM_ASSERT(size <= ep_state[endpoint].max_packet);
-    EFM_ASSERT(data);
-
-    uint8_t ep = USB_EP_TO_INDEX(endpoint);
-
-    if (endpoint >= NUMBER_OF_ENDPOINTS || endpoint <= EP0IN) {
-        return EP_INVALID;
-    }
-
-    if (size > ep_state[endpoint].max_packet) {
-        return EP_INVALID;
-    }
-
-    if (!data) {
-        return EP_INVALID;
-    }
-
-    memcpy(ep_state[ep].data_buf, data, size);
-
-    ep_state[ep].status = WRITE_PENDING;
-    int ret = USBD_Write(USB_EP_TO_ADDR(endpoint), ep_state[ep].data_buf, size, ep_state[ep].intern_cb);
-
-    if (ret == USB_STATUS_EP_STALLED) {
-        ep_state[ep].status = IDLE;
-        return EP_STALLED;
-    } else if (ret != USB_STATUS_OK) {
-        ep_state[ep].status = IDLE;
-        return EP_INVALID;
-    }
-
-    return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint)
-{
-    if (endpoint >= NUMBER_OF_ENDPOINTS) {
-        EFM_ASSERT(false);
-        return EP_INVALID;
-    }
-
-    switch (ep_state[endpoint].status) {
-        case WRITE_PENDING:
-            return EP_PENDING;
-
-        case WRITE_COMPLETE:
-            ep_state[endpoint].status = IDLE;
-            return EP_COMPLETED;
-
-        case FAILED_STALLED:
-            ep_state[endpoint].status = IDLE;
-            return EP_STALLED;
-
-        default:
-            ep_state[endpoint].status = IDLE;
-            return EP_INVALID;
-    }
-}
-
-void USBHAL::stallEndpoint(uint8_t endpoint)
-{
-    TRACE_FUNC_IN;
-
-    EFM_ASSERT(endpoint < NUMBER_OF_ENDPOINTS);
-    EFM_ASSERT((endpoint != EP0OUT) && (endpoint != EP0IN));
-
-    USBD_StallEp(USB_EP_TO_ADDR(endpoint));
-}
-
-void USBHAL::unstallEndpoint(uint8_t endpoint)
-{
-    TRACE_FUNC_IN;
-
-    EFM_ASSERT(endpoint < NUMBER_OF_ENDPOINTS);
-    EFM_ASSERT((endpoint != EP0OUT) && (endpoint != EP0IN));
-
-    USBD_UnStallEp(USB_EP_TO_ADDR(endpoint));
-}
-
-bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t options)
-{
-    TRACE_FUNC_IN_P("endpoint %d, packetsize %ld, options 0x%lx", endpoint,
-                    maxPacket, options);
-
-    int mult = 1; // RX/TX buffer size multiplier
-    int type = USB_EPTYPE_INTR;
-
-    if (endpoint >= NUMBER_OF_ENDPOINTS) {
-        EFM_ASSERT(false);
-        return false;
-    }
-
-    if (endpoint == EP0IN || endpoint == EP0OUT) {
-        EFM_ASSERT(false);
-        return false;
-    }
-
-    ep_state[endpoint].max_packet = 0;
-
-    if (endpoint == EPISO_OUT || endpoint ==  EPISO_IN) {
-        if (maxPacket > MAX_PACKET_SIZE_EPISO) {
-            EFM_ASSERT(false);
-            return false;
-        }
-    } else if ((maxPacket > MAX_PACKET_SIZE_EPBULK) || (maxPacket > MAX_PACKET_SIZE_EPINT)) {
-        EFM_ASSERT(false);
-        return false;
-    }
-
-    // USBDevice performs a read right after creating the endpoints,
-    // before calling configureDevice. The read will fail since
-    // at that point the device state is still ADDRESSED. Workaround
-    // is to force configured state here.
-    //
-    // This relies on USBDevice to not call realiseEndpoint unless
-    // it is transitioning to the CONFIGURED state.
-    USBD_SetUsbState(USBD_STATE_CONFIGURED);
-
-    // Why doesn't this function have a type param? This is silly...
-    switch (endpoint) {
-        case EPBULK_OUT:
-        case EPBULK_IN:
-            type = USB_EPTYPE_BULK;
-            mult = 2;
-            break;
-        case EPINT_OUT:
-        case EPINT_IN:
-            type = USB_EPTYPE_INTR;
-            mult = 1;
-            break;
-        case EPISO_OUT:
-        case EPISO_IN:
-            type = USB_EPTYPE_ISOC;
-            mult = 2; // ?
-            break;
-    }
-
-    // Some options force the endpoint to a specific type
-    if( options & ISOCHRONOUS ) {
-        type = USB_EPTYPE_ISOC;
-        mult = 2; // ?
-    } else if ( options & RATE_FEEDBACK_MODE ) {
-        // No support for whatever rate feedback is, but for interrupt only
-        type = USB_EPTYPE_INTR;
-        mult = 1;
-    }
-
-#ifdef USB_USE_DYNAMIC_MEMORY
-    if (ep_state[endpoint].data_buf) {
-        free(ep_state[endpoint].data_buf);
-    }
-
-    ep_state[endpoint].data_buf = (uint8_t *)malloc(maxPacket);
-
-    if (!ep_state[endpoint].data_buf) {
-        EFM_ASSERT(false);
-        return false;
-    }
-#endif
-
-    int ret = USBD_AddEndpoint(USB_EP_TO_ADDR(endpoint), type, maxPacket, mult);
-
-    if (ret == USB_STATUS_OK) {
-        ep_state[endpoint].status = IDLE;
-        ep_state[endpoint].max_packet = maxPacket;
-        return true;
-    } else {
-        return false;
-    }
-}
-
-bool USBHAL::getEndpointStallState(unsigned char endpoint)
-{
-    TRACE_FUNC_IN;
-    if (endpoint >= NUMBER_OF_ENDPOINTS) {
-        EFM_ASSERT(false);
-        return false;
-    }
-    return USBD_EpIsStalled(USB_EP_TO_ADDR(endpoint));
-}
-
-static void run_cmd(USBISRCommand cmd, uint32_t param)
-{
-    if (usb_isrcmd != CMD_HANDLED || cmd >= CMD_ENUM_END_MARKER) {
-        EFM_ASSERT(false);
-        abort();
-    }
-
-    usb_isrcmd = cmd;
-    usb_isrcmd_param = param;
-    isrptr();
-}
-
-void USBHAL::_usbisr(void)
-{
-    EFM_ASSERT(instance);
-    instance->usbisr();
-}
-
-void USBHAL::usbisr(void)
-{
-    //TRACE_FUNC_IN;
-
-    // This "ISR" is used just to route callbacks from SiL USB driver
-    // callback context (which can not call protected/private USBHAL
-    // methods), to the actual USBHAL.
-
-    EFM_ASSERT(usb_isrcmd != CMD_HANDLED);
-    switch (usb_isrcmd) {
-        case CMD_EP0SETUP:
-            this->EP0setupCallback();
-            break;
-        case CMD_EP0IN:
-            this->EP0in();
-            break;
-        case CMD_EP0OUT:
-            this->EP0out();
-            break;
-        case CMD_BUSRESET:
-            this->busReset();
-            break;
-        case CMD_EP_XFER_COMPLETED:
-            if (epCallback[usb_isrcmd_param] && instance) {
-                (instance->*(epCallback[usb_isrcmd_param]))();
-            }
-            break;
-        case CMD_SOF:
-            this->SOF(usb_isrcmd_param);
-            break;
-        case CMD_SUSPEND_STATE_CHANGED:
-            this->suspendStateChanged(usb_isrcmd_param);
-            break;
-        default:
-            EFM_ASSERT(false);
-            break;
-    }
-    usb_isrcmd = CMD_HANDLED;
-}
-#endif
-
-// End of file
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/USBHAL_KL25Z.cpp
--- a/USBDevice/USBHAL_KL25Z.cpp	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,507 +0,0 @@
-/* Copyright (c) 2010-2011 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#if defined(TARGET_KL25Z) | defined(TARGET_KL43Z) | defined(TARGET_KL46Z) | defined(TARGET_K20D50M) | defined(TARGET_K64F) | defined(TARGET_K22F) | defined(TARGET_TEENSY3_1)
-
-#if defined(TARGET_KSDK2_MCUS)
-#include "fsl_common.h"
-#endif
-#include "USBHAL.h"
-
-USBHAL * USBHAL::instance;
-
-static volatile int epComplete = 0;
-
-// Convert physical endpoint number to register bit
-#define EP(endpoint) (1<<(endpoint))
-
-// Convert physical to logical
-#define PHY_TO_LOG(endpoint)    ((endpoint)>>1)
-
-// Get endpoint direction
-#define IN_EP(endpoint)     ((endpoint) & 1U ? true : false)
-#define OUT_EP(endpoint)    ((endpoint) & 1U ? false : true)
-
-#define BD_OWN_MASK        (1<<7)
-#define BD_DATA01_MASK     (1<<6)
-#define BD_KEEP_MASK       (1<<5)
-#define BD_NINC_MASK       (1<<4)
-#define BD_DTS_MASK        (1<<3)
-#define BD_STALL_MASK      (1<<2)
-
-#define TX    1
-#define RX    0
-#define ODD   0
-#define EVEN  1
-// this macro waits a physical endpoint number
-#define EP_BDT_IDX(ep, dir, odd) (((ep * 4) + (2 * dir) + (1 *  odd)))
-
-#define SETUP_TOKEN    0x0D
-#define IN_TOKEN       0x09
-#define OUT_TOKEN      0x01
-#define TOK_PID(idx)   ((bdt[idx].info >> 2) & 0x0F)
-
-// for each endpt: 8 bytes
-typedef struct BDT {
-    uint8_t   info;       // BD[0:7]
-    uint8_t   dummy;      // RSVD: BD[8:15]
-    uint16_t  byte_count; // BD[16:32]
-    uint32_t  address;    // Addr
-} BDT;
-
-// there are:
-//    * 4 bidirectionnal endpt -> 8 physical endpt
-//    * as there are ODD and EVEN buffer -> 8*2 bdt
-MBED_ALIGN(512) BDT bdt[NUMBER_OF_PHYSICAL_ENDPOINTS * 2];  // 512 bytes aligned!
-
-uint8_t * endpoint_buffer[NUMBER_OF_PHYSICAL_ENDPOINTS * 2];
-
-static uint8_t set_addr = 0;
-static uint8_t addr = 0;
-
-static uint32_t Data1  = 0x55555555;
-
-static uint32_t frameNumber() {
-    return((USB0->FRMNUML | (USB0->FRMNUMH << 8)) & 0x07FF);
-}
-
-uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) {
-    return 0;
-}
-
-USBHAL::USBHAL(void) {
-    // Disable IRQ
-    NVIC_DisableIRQ(USB0_IRQn);
-
-#if (defined(FSL_FEATURE_SOC_MPU_COUNT) && (FSL_FEATURE_SOC_MPU_COUNT > 0U))
-    MPU->CESR=0;
-#endif
-    // fill in callback array
-    epCallback[0] = &USBHAL::EP1_OUT_callback;
-    epCallback[1] = &USBHAL::EP1_IN_callback;
-    epCallback[2] = &USBHAL::EP2_OUT_callback;
-    epCallback[3] = &USBHAL::EP2_IN_callback;
-    epCallback[4] = &USBHAL::EP3_OUT_callback;
-    epCallback[5] = &USBHAL::EP3_IN_callback;
-    epCallback[6] = &USBHAL::EP4_OUT_callback;
-    epCallback[7] = &USBHAL::EP4_IN_callback;
-
-#if defined(TARGET_KL43Z) || defined(TARGET_K22F) || defined(TARGET_K64F)
-    // enable USBFS clock
-    CLOCK_EnableUsbfs0Clock(kCLOCK_UsbSrcIrc48M, 48000000U);
-#else
-    // choose usb src as PLL
-    SIM->SOPT2 &= ~SIM_SOPT2_PLLFLLSEL_MASK;
-    SIM->SOPT2 |= (SIM_SOPT2_USBSRC_MASK | (1 << SIM_SOPT2_PLLFLLSEL_SHIFT));
-
-    // enable OTG clock
-    SIM->SCGC4 |= SIM_SCGC4_USBOTG_MASK;
-#endif
-
-    // Attach IRQ
-    instance = this;
-    NVIC_SetVector(USB0_IRQn, (uint32_t)&_usbisr);
-    NVIC_EnableIRQ(USB0_IRQn);
-
-    // USB Module Configuration
-    // Set BDT Base Register
-    USB0->BDTPAGE1 = (uint8_t)((uint32_t)bdt>>8);
-    USB0->BDTPAGE2 = (uint8_t)((uint32_t)bdt>>16);
-    USB0->BDTPAGE3 = (uint8_t)((uint32_t)bdt>>24);
-
-    // Clear interrupt flag
-    USB0->ISTAT = 0xff;
-
-    // USB Interrupt Enablers
-    USB0->INTEN |= USB_INTEN_TOKDNEEN_MASK |
-                   USB_INTEN_SOFTOKEN_MASK |
-                   USB_INTEN_ERROREN_MASK  |
-                   USB_INTEN_USBRSTEN_MASK;
-
-    // Disable weak pull downs
-    USB0->USBCTRL &= ~(USB_USBCTRL_PDE_MASK | USB_USBCTRL_SUSP_MASK);
-
-    USB0->USBTRC0 |= 0x40;
-
-    /* Allocate control endpoint buffers */
-    endpoint_buffer[EP_BDT_IDX(0, TX, ODD)] = (uint8_t *)malloc(MAX_PACKET_SIZE_EP0);
-    endpoint_buffer[EP_BDT_IDX(0, RX, ODD)] = (uint8_t *)malloc(MAX_PACKET_SIZE_EP0);
-}
-
-USBHAL::~USBHAL(void) { }
-
-void USBHAL::connect(void) {
-    // enable USB
-    USB0->CTL |= USB_CTL_USBENSOFEN_MASK;
-    // Pull up enable
-    USB0->CONTROL |= USB_CONTROL_DPPULLUPNONOTG_MASK;
-
-    // Allocate endpoint buffers; do allocate control endpoint buffers
-    for (int i = 4; i < (NUMBER_OF_PHYSICAL_ENDPOINTS * 2); i++) {
-        if ((i == EPISO_OUT) || (i == EPISO_IN)) {
-            endpoint_buffer[i] = (uint8_t *)malloc(MAX_PACKET_SIZE_EPISO);
-        } else {
-            endpoint_buffer[i] = (uint8_t *)malloc(MAX_PACKET_SIZE_EPBULK);
-        }
-    }
-}
-
-void USBHAL::disconnect(void) {
-    // disable USB
-    USB0->CTL &= ~USB_CTL_USBENSOFEN_MASK;
-    // Pull up disable
-    USB0->CONTROL &= ~USB_CONTROL_DPPULLUPNONOTG_MASK;
-
-    //Free buffers if required; do not free the control endpoint buffers
-    for (int i = 4; i < (NUMBER_OF_PHYSICAL_ENDPOINTS * 2); i++) {
-        free(endpoint_buffer[i]);
-        endpoint_buffer[i] = NULL;
-    }
-}
-
-void USBHAL::configureDevice(void) {
-    // not needed
-}
-
-void USBHAL::unconfigureDevice(void) {
-    // not needed
-}
-
-void USBHAL::setAddress(uint8_t address) {
-    // we don't set the address now otherwise the usb controller does not ack
-    // we set a flag instead
-    // see usbisr when an IN token is received
-    set_addr = 1;
-    addr = address;
-}
-
-bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t flags) {
-    uint32_t handshake_flag = 0;
-    uint8_t * buf;
-
-    if (endpoint > NUMBER_OF_PHYSICAL_ENDPOINTS - 1) {
-        return false;
-    }
-
-    uint32_t log_endpoint = PHY_TO_LOG(endpoint);
-
-    if ((flags & ISOCHRONOUS) == 0) {
-        handshake_flag = USB_ENDPT_EPHSHK_MASK;
-    }
-
-    if (IN_EP(endpoint)) {
-        buf = &endpoint_buffer[EP_BDT_IDX(log_endpoint, TX, ODD)][0];
-    } else {
-        buf = &endpoint_buffer[EP_BDT_IDX(log_endpoint, RX, ODD)][0];
-    }
-
-    // IN endpt -> device to host (TX)
-    if (IN_EP(endpoint)) {
-        USB0->ENDPOINT[log_endpoint].ENDPT |= handshake_flag |        // ep handshaking (not if iso endpoint)
-                                              USB_ENDPT_EPTXEN_MASK;  // en TX (IN) tran
-        bdt[EP_BDT_IDX(log_endpoint, TX, ODD )].address = (uint32_t) buf;
-        bdt[EP_BDT_IDX(log_endpoint, TX, EVEN)].address = 0;
-    }
-    // OUT endpt -> host to device (RX)
-    else {
-        USB0->ENDPOINT[log_endpoint].ENDPT |= handshake_flag |        // ep handshaking (not if iso endpoint)
-                                              USB_ENDPT_EPRXEN_MASK;  // en RX (OUT) tran.
-        bdt[EP_BDT_IDX(log_endpoint, RX, ODD )].byte_count = maxPacket;
-        bdt[EP_BDT_IDX(log_endpoint, RX, ODD )].address    = (uint32_t) buf;
-        bdt[EP_BDT_IDX(log_endpoint, RX, ODD )].info       = BD_OWN_MASK | BD_DTS_MASK;
-        bdt[EP_BDT_IDX(log_endpoint, RX, EVEN)].info       = 0;
-    }
-
-    Data1 |= (1 << endpoint);
-
-    return true;
-}
-
-// read setup packet
-void USBHAL::EP0setup(uint8_t *buffer) {
-    uint32_t sz;
-    endpointReadResult(EP0OUT, buffer, &sz);
-}
-
-void USBHAL::EP0readStage(void) {
-    Data1 &= ~1UL;  // set DATA0
-    bdt[0].info = (BD_DTS_MASK | BD_OWN_MASK);
-}
-
-void USBHAL::EP0read(void) {
-    uint32_t idx = EP_BDT_IDX(PHY_TO_LOG(EP0OUT), RX, 0);
-    bdt[idx].byte_count = MAX_PACKET_SIZE_EP0;
-}
-
-uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) {
-    uint32_t sz;
-    endpointReadResult(EP0OUT, buffer, &sz);
-    return sz;
-}
-
-void USBHAL::EP0write(uint8_t *buffer, uint32_t size) {
-    endpointWrite(EP0IN, buffer, size);
-}
-
-void USBHAL::EP0getWriteResult(void) {
-}
-
-void USBHAL::EP0stall(void) {
-    stallEndpoint(EP0OUT);
-}
-
-EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) {
-    endpoint = PHY_TO_LOG(endpoint);
-    uint32_t idx = EP_BDT_IDX(endpoint, RX, 0);
-    bdt[idx].byte_count = maximumSize;
-    return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_t *bytesRead) {
-    uint32_t n, sz, idx, setup = 0;
-    uint8_t not_iso;
-    uint8_t * ep_buf;
-
-    uint32_t log_endpoint = PHY_TO_LOG(endpoint);
-
-    if (endpoint > NUMBER_OF_PHYSICAL_ENDPOINTS - 1) {
-        return EP_INVALID;
-    }
-
-    // if read on a IN endpoint -> error
-    if (IN_EP(endpoint)) {
-        return EP_INVALID;
-    }
-
-    idx = EP_BDT_IDX(log_endpoint, RX, 0);
-    sz  = bdt[idx].byte_count;
-    not_iso = USB0->ENDPOINT[log_endpoint].ENDPT & USB_ENDPT_EPHSHK_MASK;
-
-    //for isochronous endpoint, we don't wait an interrupt
-    if ((log_endpoint != 0) && not_iso && !(epComplete & EP(endpoint))) {
-        return EP_PENDING;
-    }
-
-    if ((log_endpoint == 0) && (TOK_PID(idx) == SETUP_TOKEN)) {
-        setup = 1;
-    }
-
-    ep_buf = endpoint_buffer[idx];
-
-    for (n = 0; n < sz; n++) {
-        buffer[n] = ep_buf[n];
-    }
-
-    if (((Data1 >> endpoint) & 1) == ((bdt[idx].info >> 6) & 1)) {
-        if (setup && (buffer[6] == 0))  // if no setup data stage,
-            Data1 &= ~1UL;              // set DATA0
-        else
-            Data1 ^= (1 << endpoint);
-    }
-
-    if (((Data1 >> endpoint) & 1)) {
-        bdt[idx].info = BD_DTS_MASK | BD_DATA01_MASK | BD_OWN_MASK;
-    }
-    else {
-        bdt[idx].info = BD_DTS_MASK | BD_OWN_MASK;
-    }
-
-    USB0->CTL &= ~USB_CTL_TXSUSPENDTOKENBUSY_MASK;
-    *bytesRead = sz;
-
-    epComplete &= ~EP(endpoint);
-    return EP_COMPLETED;
-}
-
-EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size) {
-    uint32_t idx, n;
-    uint8_t * ep_buf;
-
-    if (endpoint > NUMBER_OF_PHYSICAL_ENDPOINTS - 1) {
-        return EP_INVALID;
-    }
-
-    // if write on a OUT endpoint -> error
-    if (OUT_EP(endpoint)) {
-        return EP_INVALID;
-    }
-
-    idx = EP_BDT_IDX(PHY_TO_LOG(endpoint), TX, 0);
-    bdt[idx].byte_count = size;
-
-    ep_buf = endpoint_buffer[idx];
-
-    for (n = 0; n < size; n++) {
-        ep_buf[n] = data[n];
-    }
-
-    if ((Data1 >> endpoint) & 1) {
-        bdt[idx].info = BD_OWN_MASK | BD_DTS_MASK;
-    } else {
-        bdt[idx].info = BD_OWN_MASK | BD_DTS_MASK | BD_DATA01_MASK;
-    }
-
-    Data1 ^= (1 << endpoint);
-
-    return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint) {
-    if (epComplete & EP(endpoint)) {
-        epComplete &= ~EP(endpoint);
-        return EP_COMPLETED;
-    }
-
-    return EP_PENDING;
-}
-
-void USBHAL::stallEndpoint(uint8_t endpoint) {
-    USB0->ENDPOINT[PHY_TO_LOG(endpoint)].ENDPT |= USB_ENDPT_EPSTALL_MASK;
-}
-
-void USBHAL::unstallEndpoint(uint8_t endpoint) {
-    USB0->ENDPOINT[PHY_TO_LOG(endpoint)].ENDPT &= ~USB_ENDPT_EPSTALL_MASK;
-}
-
-bool USBHAL::getEndpointStallState(uint8_t endpoint) {
-    uint8_t stall = (USB0->ENDPOINT[PHY_TO_LOG(endpoint)].ENDPT & USB_ENDPT_EPSTALL_MASK);
-    return (stall) ? true : false;
-}
-
-void USBHAL::remoteWakeup(void) {
-    // [TODO]
-}
-
-
-void USBHAL::_usbisr(void) {
-    instance->usbisr();
-}
-
-
-void USBHAL::usbisr(void) {
-    uint8_t i;
-    uint8_t istat = USB0->ISTAT;
-
-    // reset interrupt
-    if (istat & USB_ISTAT_USBRST_MASK) {
-        // disable all endpt
-        for(i = 0; i < 16; i++) {
-            USB0->ENDPOINT[i].ENDPT = 0x00;
-        }
-
-        // enable control endpoint
-        realiseEndpoint(EP0OUT, MAX_PACKET_SIZE_EP0, 0);
-        realiseEndpoint(EP0IN, MAX_PACKET_SIZE_EP0, 0);
-
-        Data1 = 0x55555555;
-        USB0->CTL |=  USB_CTL_ODDRST_MASK;
-
-        USB0->ISTAT   =  0xFF;  // clear all interrupt status flags
-        USB0->ERRSTAT =  0xFF;  // clear all error flags
-        USB0->ERREN   =  0xFF;  // enable error interrupt sources
-        USB0->ADDR    =  0x00;  // set default address
-
-        // reset bus for USBDevice layer
-        busReset();
-
-        return;
-    }
-
-    // resume interrupt
-    if (istat & USB_ISTAT_RESUME_MASK) {
-        USB0->ISTAT = USB_ISTAT_RESUME_MASK;
-    }
-
-    // SOF interrupt
-    if (istat & USB_ISTAT_SOFTOK_MASK) {
-        USB0->ISTAT = USB_ISTAT_SOFTOK_MASK;
-        // SOF event, read frame number
-        SOF(frameNumber());
-    }
-
-    // stall interrupt
-    if (istat & 1<<7) {
-        if (USB0->ENDPOINT[0].ENDPT & USB_ENDPT_EPSTALL_MASK)
-            USB0->ENDPOINT[0].ENDPT &= ~USB_ENDPT_EPSTALL_MASK;
-        USB0->ISTAT |= USB_ISTAT_STALL_MASK;
-    }
-
-    // token interrupt
-    if (istat & 1<<3) {
-        uint32_t num  = (USB0->STAT >> 4) & 0x0F;
-        uint32_t dir  = (USB0->STAT >> 3) & 0x01;
-        uint32_t ev_odd = (USB0->STAT >> 2) & 0x01;
-        int endpoint = (num << 1) | dir;
-
-        // setup packet
-        if ((num == 0) && (TOK_PID((EP_BDT_IDX(num, dir, ev_odd))) == SETUP_TOKEN)) {
-            Data1 &= ~0x02;
-            bdt[EP_BDT_IDX(0, TX, EVEN)].info &= ~BD_OWN_MASK;
-            bdt[EP_BDT_IDX(0, TX, ODD)].info  &= ~BD_OWN_MASK;
-
-            // EP0 SETUP event (SETUP data received)
-            EP0setupCallback();
-
-        } else {
-            // OUT packet
-            if (TOK_PID((EP_BDT_IDX(num, dir, ev_odd))) == OUT_TOKEN) {
-                if (num == 0)
-                    EP0out();
-                else {
-                    epComplete |= EP(endpoint);
-                    if ((instance->*(epCallback[endpoint - 2]))()) {
-                        epComplete &= ~EP(endpoint);
-                    }
-                }
-            }
-
-            // IN packet
-            if (TOK_PID((EP_BDT_IDX(num, dir, ev_odd))) == IN_TOKEN) {
-                if (num == 0) {
-                    EP0in();
-                    if (set_addr == 1) {
-                        USB0->ADDR = addr & 0x7F;
-                        set_addr = 0;
-                    }
-                }
-                else {
-                    epComplete |= EP(endpoint);
-                    if ((instance->*(epCallback[endpoint - 2]))()) {
-                        epComplete &= ~EP(endpoint);
-                    }
-                }
-            }
-        }
-
-        USB0->ISTAT = USB_ISTAT_TOKDNE_MASK;
-    }
-
-    // sleep interrupt
-    if (istat & 1<<4) {
-        USB0->ISTAT |= USB_ISTAT_SLEEP_MASK;
-    }
-
-    // error interrupt
-    if (istat & USB_ISTAT_ERROR_MASK) {
-        USB0->ERRSTAT = 0xFF;
-        USB0->ISTAT |= USB_ISTAT_ERROR_MASK;
-    }
-}
-
-
-#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/USBHAL_LPC11U.cpp
--- a/USBDevice/USBHAL_LPC11U.cpp	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,738 +0,0 @@
-/* Copyright (c) 2010-2011 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#if defined(TARGET_LPC11UXX) || defined(TARGET_LPC11U6X) || defined(TARGET_LPC1347) || defined(TARGET_LPC1549)
-
-#if defined(TARGET_LPC1347) || defined(TARGET_LPC1549)
-#define USB_IRQ USB_IRQ_IRQn
-#else
-#define USB_IRQ USB_IRQn
-#endif
-
-#include "USBHAL.h"
-
-USBHAL * USBHAL::instance;
-#if defined(TARGET_LPC1549)
-static uint8_t usbmem[2048] __attribute__((aligned(2048)));
-#endif
-
-// Valid physical endpoint numbers are 0 to (NUMBER_OF_PHYSICAL_ENDPOINTS-1)
-#define LAST_PHYSICAL_ENDPOINT (NUMBER_OF_PHYSICAL_ENDPOINTS-1)
-
-// Convert physical endpoint number to register bit
-#define EP(endpoint) (1UL<<endpoint)
-
-// Convert physical to logical
-#define PHY_TO_LOG(endpoint)    ((endpoint)>>1)
-
-// Get endpoint direction
-#define IN_EP(endpoint)     ((endpoint) & 1U ? true : false)
-#define OUT_EP(endpoint)    ((endpoint) & 1U ? false : true)
-
-// USB RAM
-#if defined(TARGET_LPC1549)
-#define USB_RAM_START ((uint32_t)usbmem)
-#define USB_RAM_SIZE  sizeof(usbmem)
-#else
-#define USB_RAM_START (0x20004000)
-#define USB_RAM_SIZE  (0x00000800)
-#endif
-
-// SYSAHBCLKCTRL
-#if defined(TARGET_LPC1549)
-#define CLK_USB     (1UL<<23)
-#else
-#define CLK_USB     (1UL<<14)
-#define CLK_USBRAM  (1UL<<27)
-#endif
-
-// USB Information register
-#define FRAME_NR(a)     ((a) & 0x7ff)   // Frame number
-
-// USB Device Command/Status register
-#define DEV_ADDR_MASK   (0x7f)          // Device address
-#define DEV_ADDR(a)     ((a) & DEV_ADDR_MASK)
-#define DEV_EN          (1UL<<7)        // Device enable
-#define SETUP           (1UL<<8)        // SETUP token received
-#define PLL_ON          (1UL<<9)        // PLL enabled in suspend
-#define DCON            (1UL<<16)       // Device status - connect
-#define DSUS            (1UL<<17)       // Device status - suspend
-#define DCON_C          (1UL<<24)       // Connect change
-#define DSUS_C          (1UL<<25)       // Suspend change
-#define DRES_C          (1UL<<26)       // Reset change
-#define VBUSDEBOUNCED   (1UL<<28)       // Vbus detected
-
-// Endpoint Command/Status list
-#define CMDSTS_A                 (1UL<<31)          // Active
-#define CMDSTS_D                 (1UL<<30)          // Disable
-#define CMDSTS_S                 (1UL<<29)          // Stall
-#define CMDSTS_TR                (1UL<<28)          // Toggle Reset
-#define CMDSTS_RF                (1UL<<27)          // Rate Feedback mode
-#define CMDSTS_TV                (1UL<<27)          // Toggle Value
-#define CMDSTS_T                 (1UL<<26)          // Endpoint Type
-#define CMDSTS_NBYTES(n)         (((n)&0x3ff)<<16)  // Number of bytes
-#define CMDSTS_ADDRESS_OFFSET(a) (((a)>>6)&0xffff)  // Buffer start address
-
-#define BYTES_REMAINING(s)       (((s)>>16)&0x3ff)  // Bytes remaining after transfer
-
-// USB Non-endpoint interrupt sources
-#define FRAME_INT   (1UL<<30)
-#define DEV_INT     (1UL<<31)
-
-static volatile int epComplete = 0;
-
-// One entry for a double-buffered logical endpoint in the endpoint
-// command/status list. Endpoint 0 is single buffered, out[1] is used
-// for the SETUP packet and in[1] is not used
-typedef struct {
-    uint32_t out[2];
-    uint32_t in[2];
-} PACKED EP_COMMAND_STATUS;
-
-typedef struct {
-    uint8_t out[MAX_PACKET_SIZE_EP0];
-    uint8_t in[MAX_PACKET_SIZE_EP0];
-    uint8_t setup[SETUP_PACKET_SIZE];
-} PACKED CONTROL_TRANSFER;
-
-typedef struct {
-    uint32_t    maxPacket;
-    uint32_t    buffer[2];
-    uint32_t    options;
-} PACKED EP_STATE;
-
-static volatile EP_STATE endpointState[NUMBER_OF_PHYSICAL_ENDPOINTS];
-
-// Pointer to the endpoint command/status list
-static EP_COMMAND_STATUS *ep = NULL;
-
-// Pointer to endpoint 0 data (IN/OUT and SETUP)
-static CONTROL_TRANSFER *ct = NULL;
-
-// Shadow DEVCMDSTAT register to avoid accidentally clearing flags or
-// initiating a remote wakeup event.
-static volatile uint32_t devCmdStat;
-
-// Pointers used to allocate USB RAM
-static uint32_t usbRamPtr = USB_RAM_START;
-static uint32_t epRamPtr = 0; // Buffers for endpoints > 0 start here
-
-#define ROUND_UP_TO_MULTIPLE(x, m) ((((x)+((m)-1))/(m))*(m))
-
-void USBMemCopy(uint8_t *dst, uint8_t *src, uint32_t size);
-void USBMemCopy(uint8_t *dst, uint8_t *src, uint32_t size) {
-    if (size > 0) {
-        do {
-            *dst++ = *src++;
-        } while (--size > 0);
-    }
-}
-
-
-USBHAL::USBHAL(void) {
-    NVIC_DisableIRQ(USB_IRQ);
-
-    // fill in callback array
-    epCallback[0] = &USBHAL::EP1_OUT_callback;
-    epCallback[1] = &USBHAL::EP1_IN_callback;
-    epCallback[2] = &USBHAL::EP2_OUT_callback;
-    epCallback[3] = &USBHAL::EP2_IN_callback;
-    epCallback[4] = &USBHAL::EP3_OUT_callback;
-    epCallback[5] = &USBHAL::EP3_IN_callback;
-    epCallback[6] = &USBHAL::EP4_OUT_callback;
-    epCallback[7] = &USBHAL::EP4_IN_callback;
-
-#if defined(TARGET_LPC1549)
-    /* Set USB PLL input to system oscillator */
-    LPC_SYSCON->USBPLLCLKSEL = 0x01;
-
-    /* Setup USB PLL  (FCLKIN = 12MHz) * 4 = 48MHz
-       MSEL = 3 (this is pre-decremented), PSEL = 1 (for P = 2)
-       FCLKOUT = FCLKIN * (MSEL + 1) = 12MHz * 4 = 48MHz
-       FCCO = FCLKOUT * 2 * P = 48MHz * 2 * 2 = 192MHz (within FCCO range) */
-    LPC_SYSCON->USBPLLCTRL = (0x3 | (1UL << 6));
-
-    /* Powerup USB PLL */
-    LPC_SYSCON->PDRUNCFG &= ~(CLK_USB);
-
-    /* Wait for PLL to lock */
-    while(!(LPC_SYSCON->USBPLLSTAT & 0x01));
-
-    /* enable USB main clock */
-    LPC_SYSCON->USBCLKSEL = 0x02;
-    LPC_SYSCON->USBCLKDIV = 1;
-
-    /* Enable AHB clock to the USB block. */
-    LPC_SYSCON->SYSAHBCLKCTRL1 |= CLK_USB;
-
-    /* power UP USB Phy */
-    LPC_SYSCON->PDRUNCFG &= ~(1UL << 9);
-
-    /* Reset USB block */
-    LPC_SYSCON->PRESETCTRL1 |= (CLK_USB);
-    LPC_SYSCON->PRESETCTRL1 &= ~(CLK_USB);
-
-#else
-    #if defined(TARGET_LPC11U35_401) || defined(TARGET_LPC11U35_501)
-    // USB_VBUS input with pull-down
-    LPC_IOCON->PIO0_3 = 0x00000009;
-    #endif
-
-    // nUSB_CONNECT output
-    LPC_IOCON->PIO0_6 = 0x00000001;
-
-    // Enable clocks (USB registers, USB RAM)
-    LPC_SYSCON->SYSAHBCLKCTRL |= CLK_USB | CLK_USBRAM;
-
-    // Ensure device disconnected (DCON not set)
-    LPC_USB->DEVCMDSTAT = 0;
-#endif
-    // to ensure that the USB host sees the device as
-    // disconnected if the target CPU is reset.
-    wait(0.3);
-
-    // Reserve space in USB RAM for endpoint command/status list
-    // Must be 256 byte aligned
-    usbRamPtr = ROUND_UP_TO_MULTIPLE(usbRamPtr, 256);
-    ep = (EP_COMMAND_STATUS *)usbRamPtr;
-    usbRamPtr += (sizeof(EP_COMMAND_STATUS) * NUMBER_OF_LOGICAL_ENDPOINTS);
-    LPC_USB->EPLISTSTART = (uint32_t)(ep) & 0xffffff00;
-
-    // Reserve space in USB RAM for Endpoint 0
-    // Must be 64 byte aligned
-    usbRamPtr = ROUND_UP_TO_MULTIPLE(usbRamPtr, 64);
-    ct = (CONTROL_TRANSFER *)usbRamPtr;
-    usbRamPtr += sizeof(CONTROL_TRANSFER);
-    LPC_USB->DATABUFSTART =(uint32_t)(ct) & 0xffc00000;
-
-    // Setup command/status list for EP0
-    ep[0].out[0] = 0;
-    ep[0].in[0] =  0;
-    ep[0].out[1] = CMDSTS_ADDRESS_OFFSET((uint32_t)ct->setup);
-
-    // Route all interrupts to IRQ, some can be routed to
-    // USB_FIQ if you wish.
-    LPC_USB->INTROUTING = 0;
-
-    // Set device address 0, enable USB device, no remote wakeup
-    devCmdStat = DEV_ADDR(0) | DEV_EN | DSUS;
-    LPC_USB->DEVCMDSTAT = devCmdStat;
-
-    // Enable interrupts for device events and EP0
-    LPC_USB->INTEN = DEV_INT | EP(EP0IN) | EP(EP0OUT) | FRAME_INT;
-    instance = this;
-
-    //attach IRQ handler and enable interrupts
-    NVIC_SetVector(USB_IRQ, (uint32_t)&_usbisr);
-}
-
-USBHAL::~USBHAL(void) {
-    // Ensure device disconnected (DCON not set)
-    LPC_USB->DEVCMDSTAT = 0;
-    // Disable USB interrupts
-    NVIC_DisableIRQ(USB_IRQ);
-}
-
-void USBHAL::connect(void) {
-    NVIC_EnableIRQ(USB_IRQ);
-    devCmdStat |= DCON;
-    LPC_USB->DEVCMDSTAT = devCmdStat;
-}
-
-void USBHAL::disconnect(void) {
-    NVIC_DisableIRQ(USB_IRQ);
-    devCmdStat &= ~DCON;
-    LPC_USB->DEVCMDSTAT = devCmdStat;
-}
-
-void USBHAL::configureDevice(void) {
-    // Not required
-}
-
-void USBHAL::unconfigureDevice(void) {
-    // Not required
-}
-
-void USBHAL::EP0setup(uint8_t *buffer) {
-    // Copy setup packet data
-    USBMemCopy(buffer, ct->setup, SETUP_PACKET_SIZE);
-}
-
-void USBHAL::EP0read(void) {
-    // Start an endpoint 0 read
-
-    // The USB ISR will call USBDevice_EP0out() when a packet has been read,
-    // the USBDevice layer then calls USBBusInterface_EP0getReadResult() to
-    // read the data.
-
-    ep[0].out[0] = CMDSTS_A |CMDSTS_NBYTES(MAX_PACKET_SIZE_EP0) \
-                   | CMDSTS_ADDRESS_OFFSET((uint32_t)ct->out);
-}
-
-uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) {
-    // Complete an endpoint 0 read
-    uint32_t bytesRead;
-
-    // Find how many bytes were read
-    bytesRead = MAX_PACKET_SIZE_EP0 - BYTES_REMAINING(ep[0].out[0]);
-
-    // Copy data
-    USBMemCopy(buffer, ct->out, bytesRead);
-    return bytesRead;
-}
-
-
-void USBHAL::EP0readStage(void) {
-    // Not required
-}
-
-void USBHAL::EP0write(uint8_t *buffer, uint32_t size) {
-    // Start and endpoint 0 write
-
-    // The USB ISR will call USBDevice_EP0in() when the data has
-    // been written, the USBDevice layer then calls
-    // USBBusInterface_EP0getWriteResult() to complete the transaction.
-
-    // Copy data
-    USBMemCopy(ct->in, buffer, size);
-
-    // Start transfer
-    ep[0].in[0] = CMDSTS_A | CMDSTS_NBYTES(size) \
-                  | CMDSTS_ADDRESS_OFFSET((uint32_t)ct->in);
-}
-
-
-EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) {
-    uint8_t bf = 0;
-    uint32_t flags = 0;
-
-    //check which buffer must be filled
-    if (LPC_USB->EPBUFCFG & EP(endpoint)) {
-        // Double buffered
-        if (LPC_USB->EPINUSE & EP(endpoint)) {
-            bf = 1;
-        } else {
-            bf = 0;
-        }
-    }
-
-    // if isochronous endpoint, T = 1
-    if(endpointState[endpoint].options & ISOCHRONOUS)
-    {
-        flags |= CMDSTS_T;
-    }
-
-    //Active the endpoint for reading
-    ep[PHY_TO_LOG(endpoint)].out[bf] = CMDSTS_A | CMDSTS_NBYTES(maximumSize) \
-                                       | CMDSTS_ADDRESS_OFFSET((uint32_t)ct->out) | flags;
-    return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t *data, uint32_t *bytesRead) {
-
-    uint8_t bf = 0;
-
-    if (!(epComplete & EP(endpoint)))
-        return EP_PENDING;
-    else {
-        epComplete &= ~EP(endpoint);
-
-        //check which buffer has been filled
-        if (LPC_USB->EPBUFCFG & EP(endpoint)) {
-            // Double buffered (here we read the previous buffer which was used)
-            if (LPC_USB->EPINUSE & EP(endpoint)) {
-                bf = 0;
-            } else {
-                bf = 1;
-            }
-        }
-
-        // Find how many bytes were read
-        *bytesRead = (uint32_t) (endpointState[endpoint].maxPacket - BYTES_REMAINING(ep[PHY_TO_LOG(endpoint)].out[bf]));
-
-        // Copy data
-        USBMemCopy(data, ct->out, *bytesRead);
-        return EP_COMPLETED;
-    }
-}
-
-void USBHAL::EP0getWriteResult(void) {
-    // Not required
-}
-
-void USBHAL::EP0stall(void) {
-    ep[0].in[0] = CMDSTS_S;
-    ep[0].out[0] = CMDSTS_S;
-}
-
-void USBHAL::setAddress(uint8_t address) {
-    devCmdStat &= ~DEV_ADDR_MASK;
-    devCmdStat |= DEV_ADDR(address);
-    LPC_USB->DEVCMDSTAT = devCmdStat;
-}
-
-EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size) {
-    uint32_t flags = 0;
-    uint32_t bf;
-
-    // Validate parameters
-    if (data == NULL) {
-        return EP_INVALID;
-    }
-
-    if (endpoint > LAST_PHYSICAL_ENDPOINT) {
-        return EP_INVALID;
-    }
-
-    if ((endpoint==EP0IN) || (endpoint==EP0OUT)) {
-        return EP_INVALID;
-    }
-
-    if (size > endpointState[endpoint].maxPacket) {
-        return EP_INVALID;
-    }
-
-    if (LPC_USB->EPBUFCFG & EP(endpoint)) {
-        // Double buffered
-        if (LPC_USB->EPINUSE & EP(endpoint)) {
-            bf = 1;
-        } else {
-            bf = 0;
-        }
-    } else {
-        // Single buffered
-        bf = 0;
-    }
-
-    // Check if already active
-    if (ep[PHY_TO_LOG(endpoint)].in[bf] & CMDSTS_A) {
-        return EP_INVALID;
-    }
-
-    // Check if stalled
-    if (ep[PHY_TO_LOG(endpoint)].in[bf] & CMDSTS_S) {
-        return EP_STALLED;
-    }
-
-    // Copy data to USB RAM
-    USBMemCopy((uint8_t *)endpointState[endpoint].buffer[bf], data, size);
-
-    // Add options
-    if (endpointState[endpoint].options & RATE_FEEDBACK_MODE) {
-        flags |= CMDSTS_RF;
-    }
-
-    if (endpointState[endpoint].options & ISOCHRONOUS) {
-        flags |= CMDSTS_T;
-    }
-
-    // Add transfer
-    ep[PHY_TO_LOG(endpoint)].in[bf] = CMDSTS_ADDRESS_OFFSET( \
-                                      endpointState[endpoint].buffer[bf]) \
-                                      | CMDSTS_NBYTES(size) | CMDSTS_A | flags;
-
-    return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint) {
-    uint32_t bf;
-
-    // Validate parameters
-    if (endpoint > LAST_PHYSICAL_ENDPOINT) {
-        return EP_INVALID;
-    }
-
-    if (OUT_EP(endpoint)) {
-        return EP_INVALID;
-    }
-
-    if (LPC_USB->EPBUFCFG & EP(endpoint)) {
-        // Double buffered     // TODO: FIX THIS
-        if (LPC_USB->EPINUSE & EP(endpoint)) {
-            bf = 1;
-        } else {
-            bf = 0;
-        }
-    } else {
-        // Single buffered
-        bf = 0;
-    }
-
-    // Check if endpoint still active
-    if (ep[PHY_TO_LOG(endpoint)].in[bf] & CMDSTS_A) {
-        return EP_PENDING;
-    }
-
-    // Check if stalled
-    if (ep[PHY_TO_LOG(endpoint)].in[bf] & CMDSTS_S) {
-        return EP_STALLED;
-    }
-
-    return EP_COMPLETED;
-}
-
-void USBHAL::stallEndpoint(uint8_t endpoint) {
-
-    // FIX: should this clear active bit?
-    if (IN_EP(endpoint)) {
-        ep[PHY_TO_LOG(endpoint)].in[0] |= CMDSTS_S;
-        ep[PHY_TO_LOG(endpoint)].in[1] |= CMDSTS_S;
-    } else {
-        ep[PHY_TO_LOG(endpoint)].out[0] |= CMDSTS_S;
-        ep[PHY_TO_LOG(endpoint)].out[1] |= CMDSTS_S;
-    }
-}
-
-void USBHAL::unstallEndpoint(uint8_t endpoint) {
-    if (LPC_USB->EPBUFCFG & EP(endpoint)) {
-        // Double buffered
-        if (IN_EP(endpoint)) {
-            ep[PHY_TO_LOG(endpoint)].in[0] = 0; // S = 0
-            ep[PHY_TO_LOG(endpoint)].in[1] = 0; // S = 0
-
-            if (LPC_USB->EPINUSE & EP(endpoint)) {
-                ep[PHY_TO_LOG(endpoint)].in[1] = CMDSTS_TR; // S = 0, TR = 1, TV = 0
-            } else {
-                ep[PHY_TO_LOG(endpoint)].in[0] = CMDSTS_TR; // S = 0, TR = 1, TV = 0
-            }
-        } else {
-            ep[PHY_TO_LOG(endpoint)].out[0] = 0; // S = 0
-            ep[PHY_TO_LOG(endpoint)].out[1] = 0; // S = 0
-
-            if (LPC_USB->EPINUSE & EP(endpoint)) {
-                ep[PHY_TO_LOG(endpoint)].out[1] = CMDSTS_TR; // S = 0, TR = 1, TV = 0
-            } else {
-                ep[PHY_TO_LOG(endpoint)].out[0] = CMDSTS_TR; // S = 0, TR = 1, TV = 0
-            }
-        }
-    } else {
-        // Single buffered
-        if (IN_EP(endpoint)) {
-            ep[PHY_TO_LOG(endpoint)].in[0] = CMDSTS_TR;     // S = 0, TR = 1, TV = 0
-        } else {
-            ep[PHY_TO_LOG(endpoint)].out[0] = CMDSTS_TR;    // S = 0, TR = 1, TV = 0
-        }
-    }
-}
-
-bool USBHAL::getEndpointStallState(unsigned char endpoint) {
-    if (IN_EP(endpoint)) {
-        if (LPC_USB->EPINUSE & EP(endpoint)) {
-            if (ep[PHY_TO_LOG(endpoint)].in[1] & CMDSTS_S) {
-                return true;
-            }
-        } else {
-            if (ep[PHY_TO_LOG(endpoint)].in[0] & CMDSTS_S) {
-                return true;
-            }
-        }
-    } else {
-        if (LPC_USB->EPINUSE & EP(endpoint)) {
-            if (ep[PHY_TO_LOG(endpoint)].out[1] & CMDSTS_S) {
-                return true;
-            }
-        } else {
-            if (ep[PHY_TO_LOG(endpoint)].out[0] & CMDSTS_S) {
-                return true;
-            }
-        }
-    }
-
-    return false;
-}
-
-bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t options) {
-    uint32_t tmpEpRamPtr;
-
-    if (endpoint > LAST_PHYSICAL_ENDPOINT) {
-        return false;
-    }
-
-    // Not applicable to the control endpoints
-    if ((endpoint==EP0IN) || (endpoint==EP0OUT)) {
-        return false;
-    }
-
-    // Allocate buffers in USB RAM
-    tmpEpRamPtr = epRamPtr;
-
-    // Must be 64 byte aligned
-    tmpEpRamPtr = ROUND_UP_TO_MULTIPLE(tmpEpRamPtr, 64);
-
-    if ((tmpEpRamPtr + maxPacket) > (USB_RAM_START + USB_RAM_SIZE)) {
-        // Out of memory
-        return false;
-    }
-
-    // Allocate first buffer
-    endpointState[endpoint].buffer[0] = tmpEpRamPtr;
-    tmpEpRamPtr += maxPacket;
-
-    if (!(options & SINGLE_BUFFERED)) {
-        // Must be 64 byte aligned
-        tmpEpRamPtr = ROUND_UP_TO_MULTIPLE(tmpEpRamPtr, 64);
-
-        if ((tmpEpRamPtr + maxPacket) > (USB_RAM_START + USB_RAM_SIZE)) {
-            // Out of memory
-            return false;
-        }
-
-        // Allocate second buffer
-        endpointState[endpoint].buffer[1] = tmpEpRamPtr;
-        tmpEpRamPtr += maxPacket;
-    }
-
-    // Commit to this USB RAM allocation
-    epRamPtr = tmpEpRamPtr;
-
-    // Remaining endpoint state values
-    endpointState[endpoint].maxPacket = maxPacket;
-    endpointState[endpoint].options = options;
-
-    // Enable double buffering if required
-    if (options & SINGLE_BUFFERED) {
-        LPC_USB->EPBUFCFG &= ~EP(endpoint);
-    } else {
-        // Double buffered
-        LPC_USB->EPBUFCFG |= EP(endpoint);
-    }
-
-    // Enable interrupt
-    LPC_USB->INTEN |= EP(endpoint);
-
-    // Enable endpoint
-    unstallEndpoint(endpoint);
-    return true;
-}
-
-void USBHAL::remoteWakeup(void) {
-    // Clearing DSUS bit initiates a remote wakeup if the
-    // device is currently enabled and suspended - otherwise
-    // it has no effect.
-    LPC_USB->DEVCMDSTAT = devCmdStat & ~DSUS;
-}
-
-
-static void disableEndpoints(void) {
-    uint32_t logEp;
-
-    // Ref. Table 158 "When a bus reset is received, software
-    // must set the disable bit of all endpoints to 1".
-
-    for (logEp = 1; logEp < NUMBER_OF_LOGICAL_ENDPOINTS; logEp++) {
-        ep[logEp].out[0] = CMDSTS_D;
-        ep[logEp].out[1] = CMDSTS_D;
-        ep[logEp].in[0] =  CMDSTS_D;
-        ep[logEp].in[1] =  CMDSTS_D;
-    }
-
-    // Start of USB RAM for endpoints > 0
-    epRamPtr = usbRamPtr;
-}
-
-
-
-void USBHAL::_usbisr(void) {
-    instance->usbisr();
-}
-
-void USBHAL::usbisr(void) {
-    // Start of frame
-    if (LPC_USB->INTSTAT & FRAME_INT) {
-        // Clear SOF interrupt
-        LPC_USB->INTSTAT = FRAME_INT;
-
-        // SOF event, read frame number
-        SOF(FRAME_NR(LPC_USB->INFO));
-    }
-
-    // Device state
-    if (LPC_USB->INTSTAT & DEV_INT) {
-        LPC_USB->INTSTAT = DEV_INT;
-
-        if (LPC_USB->DEVCMDSTAT & DSUS_C) {
-            // Suspend status changed
-            LPC_USB->DEVCMDSTAT = devCmdStat | DSUS_C;
-            if (LPC_USB->DEVCMDSTAT & DSUS) {
-                suspendStateChanged(1);
-            } else {
-                suspendStateChanged(0);
-            }
-        }
-
-        if (LPC_USB->DEVCMDSTAT & DRES_C) {
-            // Bus reset
-            LPC_USB->DEVCMDSTAT = devCmdStat | DRES_C;
-
-            // Disable endpoints > 0
-            disableEndpoints();
-
-            // Bus reset event
-            busReset();
-        }
-    }
-
-    // Endpoint 0
-    if (LPC_USB->INTSTAT & EP(EP0OUT)) {
-        // Clear EP0OUT/SETUP interrupt
-        LPC_USB->INTSTAT = EP(EP0OUT);
-
-        // Check if SETUP
-        if (LPC_USB->DEVCMDSTAT & SETUP) {
-            // Clear Active and Stall bits for EP0
-            // Documentation does not make it clear if we must use the
-            // EPSKIP register to achieve this, Fig. 16 and NXP reference
-            // code suggests we can just clear the Active bits - check with
-            // NXP to be sure.
-            ep[0].in[0] = 0;
-            ep[0].out[0] = 0;
-
-            // Clear EP0IN interrupt
-            LPC_USB->INTSTAT = EP(EP0IN);
-
-            // Clear SETUP (and INTONNAK_CI/O) in device status register
-            LPC_USB->DEVCMDSTAT = devCmdStat | SETUP;
-
-            // EP0 SETUP event (SETUP data received)
-            EP0setupCallback();
-        } else {
-            // EP0OUT ACK event (OUT data received)
-            EP0out();
-        }
-    }
-
-    if (LPC_USB->INTSTAT & EP(EP0IN)) {
-        // Clear EP0IN interrupt
-        LPC_USB->INTSTAT = EP(EP0IN);
-
-        // EP0IN ACK event (IN data sent)
-        EP0in();
-    }
-
-    for (uint8_t num = 2; num < 5*2; num++) {
-        if (LPC_USB->INTSTAT & EP(num)) {
-            LPC_USB->INTSTAT = EP(num);
-            epComplete |= EP(num);
-            if ((instance->*(epCallback[num - 2]))()) {
-                epComplete &= ~EP(num);
-            }
-        }
-    }
-}
-
-#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/USBHAL_LPC17.cpp
--- a/USBDevice/USBHAL_LPC17.cpp	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,623 +0,0 @@
-/* Copyright (c) 2010-2011 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) || defined(TARGET_LPC2460)
-
-#include "USBHAL.h"
-
-
-// Get endpoint direction
-#define IN_EP(endpoint)     ((endpoint) & 1U ? true : false)
-#define OUT_EP(endpoint)    ((endpoint) & 1U ? false : true)
-
-// Convert physical endpoint number to register bit
-#define EP(endpoint) (1UL<<endpoint)
-
-// Power Control for Peripherals register
-#define PCUSB      (1UL<<31)
-
-// USB Clock Control register
-#define DEV_CLK_EN (1UL<<1)
-#define AHB_CLK_EN (1UL<<4)
-
-// USB Clock Status register
-#define DEV_CLK_ON (1UL<<1)
-#define AHB_CLK_ON (1UL<<4)
-
-// USB Device Interupt registers
-#define FRAME      (1UL<<0)
-#define EP_FAST    (1UL<<1)
-#define EP_SLOW    (1UL<<2)
-#define DEV_STAT   (1UL<<3)
-#define CCEMPTY    (1UL<<4)
-#define CDFULL     (1UL<<5)
-#define RxENDPKT   (1UL<<6)
-#define TxENDPKT   (1UL<<7)
-#define EP_RLZED   (1UL<<8)
-#define ERR_INT    (1UL<<9)
-
-// USB Control register
-#define RD_EN (1<<0)
-#define WR_EN (1<<1)
-#define LOG_ENDPOINT(endpoint) ((endpoint>>1)<<2)
-
-// USB Receive Packet Length register
-#define DV      (1UL<<10)
-#define PKT_RDY (1UL<<11)
-#define PKT_LNGTH_MASK (0x3ff)
-
-// Serial Interface Engine (SIE)
-#define SIE_WRITE   (0x01)
-#define SIE_READ    (0x02)
-#define SIE_COMMAND (0x05)
-#define SIE_CMD_CODE(phase, data) ((phase<<8)|(data<<16))
-
-// SIE Command codes
-#define SIE_CMD_SET_ADDRESS        (0xD0)
-#define SIE_CMD_CONFIGURE_DEVICE   (0xD8)
-#define SIE_CMD_SET_MODE           (0xF3)
-#define SIE_CMD_READ_FRAME_NUMBER  (0xF5)
-#define SIE_CMD_READ_TEST_REGISTER (0xFD)
-#define SIE_CMD_SET_DEVICE_STATUS  (0xFE)
-#define SIE_CMD_GET_DEVICE_STATUS  (0xFE)
-#define SIE_CMD_GET_ERROR_CODE     (0xFF)
-#define SIE_CMD_READ_ERROR_STATUS  (0xFB)
-
-#define SIE_CMD_SELECT_ENDPOINT(endpoint)                 (0x00+endpoint)
-#define SIE_CMD_SELECT_ENDPOINT_CLEAR_INTERRUPT(endpoint) (0x40+endpoint)
-#define SIE_CMD_SET_ENDPOINT_STATUS(endpoint)             (0x40+endpoint)
-
-#define SIE_CMD_CLEAR_BUFFER    (0xF2)
-#define SIE_CMD_VALIDATE_BUFFER (0xFA)
-
-// SIE Device Status register
-#define SIE_DS_CON    (1<<0)
-#define SIE_DS_CON_CH (1<<1)
-#define SIE_DS_SUS    (1<<2)
-#define SIE_DS_SUS_CH (1<<3)
-#define SIE_DS_RST    (1<<4)
-
-// SIE Device Set Address register
-#define SIE_DSA_DEV_EN  (1<<7)
-
-// SIE Configue Device register
-#define SIE_CONF_DEVICE (1<<0)
-
-// Select Endpoint register
-#define SIE_SE_FE       (1<<0)
-#define SIE_SE_ST       (1<<1)
-#define SIE_SE_STP      (1<<2)
-#define SIE_SE_PO       (1<<3)
-#define SIE_SE_EPN      (1<<4)
-#define SIE_SE_B_1_FULL (1<<5)
-#define SIE_SE_B_2_FULL (1<<6)
-
-// Set Endpoint Status command
-#define SIE_SES_ST      (1<<0)
-#define SIE_SES_DA      (1<<5)
-#define SIE_SES_RF_MO   (1<<6)
-#define SIE_SES_CND_ST  (1<<7)
-
-
-USBHAL * USBHAL::instance;
-
-static volatile int epComplete;
-static uint32_t endpointStallState;
-
-static void SIECommand(uint32_t command) {
-    // The command phase of a SIE transaction
-    LPC_USB->USBDevIntClr = CCEMPTY;
-    LPC_USB->USBCmdCode = SIE_CMD_CODE(SIE_COMMAND, command);
-    while (!(LPC_USB->USBDevIntSt & CCEMPTY));
-}
-
-static void SIEWriteData(uint8_t data) {
-    // The data write phase of a SIE transaction
-    LPC_USB->USBDevIntClr = CCEMPTY;
-    LPC_USB->USBCmdCode = SIE_CMD_CODE(SIE_WRITE, data);
-    while (!(LPC_USB->USBDevIntSt & CCEMPTY));
-}
-
-static uint8_t SIEReadData(uint32_t command) {
-    // The data read phase of a SIE transaction
-    LPC_USB->USBDevIntClr = CDFULL;
-    LPC_USB->USBCmdCode = SIE_CMD_CODE(SIE_READ, command);
-    while (!(LPC_USB->USBDevIntSt & CDFULL));
-    return (uint8_t)LPC_USB->USBCmdData;
-}
-
-static void SIEsetDeviceStatus(uint8_t status) {
-    // Write SIE device status register
-    SIECommand(SIE_CMD_SET_DEVICE_STATUS);
-    SIEWriteData(status);
-}
-
-static uint8_t SIEgetDeviceStatus(void) {
-    // Read SIE device status register
-    SIECommand(SIE_CMD_GET_DEVICE_STATUS);
-    return SIEReadData(SIE_CMD_GET_DEVICE_STATUS);
-}
-
-void SIEsetAddress(uint8_t address) {
-    // Write SIE device address register
-    SIECommand(SIE_CMD_SET_ADDRESS);
-    SIEWriteData((address & 0x7f) | SIE_DSA_DEV_EN);
-}
-
-static uint8_t SIEselectEndpoint(uint8_t endpoint) {
-    // SIE select endpoint command
-    SIECommand(SIE_CMD_SELECT_ENDPOINT(endpoint));
-    return SIEReadData(SIE_CMD_SELECT_ENDPOINT(endpoint));
-}
-
-static uint8_t SIEclearBuffer(void) {
-    // SIE clear buffer command
-    SIECommand(SIE_CMD_CLEAR_BUFFER);
-    return SIEReadData(SIE_CMD_CLEAR_BUFFER);
-}
-
-static void SIEvalidateBuffer(void) {
-    // SIE validate buffer command
-    SIECommand(SIE_CMD_VALIDATE_BUFFER);
-}
-
-static void SIEsetEndpointStatus(uint8_t endpoint, uint8_t status) {
-    // SIE set endpoint status command
-    SIECommand(SIE_CMD_SET_ENDPOINT_STATUS(endpoint));
-    SIEWriteData(status);
-}
-
-static uint16_t SIEgetFrameNumber(void) __attribute__ ((unused));
-static uint16_t SIEgetFrameNumber(void) {
-    // Read current frame number
-    uint16_t lowByte;
-    uint16_t highByte;
-
-    SIECommand(SIE_CMD_READ_FRAME_NUMBER);
-    lowByte = SIEReadData(SIE_CMD_READ_FRAME_NUMBER);
-    highByte = SIEReadData(SIE_CMD_READ_FRAME_NUMBER);
-
-    return (highByte << 8) | lowByte;
-}
-
-static void SIEconfigureDevice(void) {
-    // SIE Configure device command
-    SIECommand(SIE_CMD_CONFIGURE_DEVICE);
-    SIEWriteData(SIE_CONF_DEVICE);
-}
-
-static void SIEunconfigureDevice(void) {
-    // SIE Configure device command
-    SIECommand(SIE_CMD_CONFIGURE_DEVICE);
-    SIEWriteData(0);
-}
-
-static void SIEconnect(void) {
-    // Connect USB device
-    uint8_t status = SIEgetDeviceStatus();
-    SIEsetDeviceStatus(status | SIE_DS_CON);
-}
-
-
-static void SIEdisconnect(void) {
-    // Disconnect USB device
-    uint8_t status = SIEgetDeviceStatus();
-    SIEsetDeviceStatus(status & ~SIE_DS_CON);
-}
-
-
-static uint8_t selectEndpointClearInterrupt(uint8_t endpoint) {
-    // Implemented using using EP_INT_CLR.
-    LPC_USB->USBEpIntClr = EP(endpoint);
-    while (!(LPC_USB->USBDevIntSt & CDFULL));
-    return (uint8_t)LPC_USB->USBCmdData;
-}
-
-
-static void enableEndpointEvent(uint8_t endpoint) {
-    // Enable an endpoint interrupt
-    LPC_USB->USBEpIntEn |= EP(endpoint);
-}
-
-static void disableEndpointEvent(uint8_t endpoint) __attribute__ ((unused));
-static void disableEndpointEvent(uint8_t endpoint) {
-    // Disable an endpoint interrupt
-    LPC_USB->USBEpIntEn &= ~EP(endpoint);
-}
-
-static volatile uint32_t __attribute__((used)) dummyRead;
-uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) {
-    // Read from an OUT endpoint
-    uint32_t size;
-    uint32_t i;
-    uint32_t data = 0;
-    uint8_t offset;
-
-    LPC_USB->USBCtrl = LOG_ENDPOINT(endpoint) | RD_EN;
-    while (!(LPC_USB->USBRxPLen & PKT_RDY));
-
-    size = LPC_USB->USBRxPLen & PKT_LNGTH_MASK;
-
-    offset = 0;
-
-    if (size > 0) {
-        for (i=0; i<size; i++) {
-            if (offset==0) {
-                // Fetch up to four bytes of data as a word
-                data = LPC_USB->USBRxData;
-            }
-
-            // extract a byte
-            *buffer = (data>>offset) & 0xff;
-            buffer++;
-
-            // move on to the next byte
-            offset = (offset + 8) % 32;
-        }
-    } else {
-        dummyRead = LPC_USB->USBRxData;
-    }
-
-    LPC_USB->USBCtrl = 0;
-
-    if ((endpoint >> 1) % 3 || (endpoint >> 1) == 0) {
-        SIEselectEndpoint(endpoint);
-        SIEclearBuffer();
-    }
-
-    return size;
-}
-
-static void endpointWritecore(uint8_t endpoint, uint8_t *buffer, uint32_t size) {
-    // Write to an IN endpoint
-    uint32_t temp, data;
-    uint8_t offset;
-
-    LPC_USB->USBCtrl = LOG_ENDPOINT(endpoint) | WR_EN;
-
-    LPC_USB->USBTxPLen = size;
-    offset = 0;
-    data = 0;
-
-    if (size>0) {
-        do {
-            // Fetch next data byte into a word-sized temporary variable
-            temp = *buffer++;
-
-            // Add to current data word
-            temp = temp << offset;
-            data = data | temp;
-
-            // move on to the next byte
-            offset = (offset + 8) % 32;
-            size--;
-
-            if ((offset==0) || (size==0)) {
-                // Write the word to the endpoint
-                LPC_USB->USBTxData = data;
-                data = 0;
-            }
-        } while (size>0);
-    } else {
-        LPC_USB->USBTxData = 0;
-    }
-
-    // Clear WR_EN to cover zero length packet case
-    LPC_USB->USBCtrl=0;
-
-    SIEselectEndpoint(endpoint);
-    SIEvalidateBuffer();
-}
-
-USBHAL::USBHAL(void) {
-    // Disable IRQ
-    NVIC_DisableIRQ(USB_IRQn);
-
-    // fill in callback array
-    epCallback[0] = &USBHAL::EP1_OUT_callback;
-    epCallback[1] = &USBHAL::EP1_IN_callback;
-    epCallback[2] = &USBHAL::EP2_OUT_callback;
-    epCallback[3] = &USBHAL::EP2_IN_callback;
-    epCallback[4] = &USBHAL::EP3_OUT_callback;
-    epCallback[5] = &USBHAL::EP3_IN_callback;
-    epCallback[6] = &USBHAL::EP4_OUT_callback;
-    epCallback[7] = &USBHAL::EP4_IN_callback;
-    epCallback[8] = &USBHAL::EP5_OUT_callback;
-    epCallback[9] = &USBHAL::EP5_IN_callback;
-    epCallback[10] = &USBHAL::EP6_OUT_callback;
-    epCallback[11] = &USBHAL::EP6_IN_callback;
-    epCallback[12] = &USBHAL::EP7_OUT_callback;
-    epCallback[13] = &USBHAL::EP7_IN_callback;
-    epCallback[14] = &USBHAL::EP8_OUT_callback;
-    epCallback[15] = &USBHAL::EP8_IN_callback;
-    epCallback[16] = &USBHAL::EP9_OUT_callback;
-    epCallback[17] = &USBHAL::EP9_IN_callback;
-    epCallback[18] = &USBHAL::EP10_OUT_callback;
-    epCallback[19] = &USBHAL::EP10_IN_callback;
-    epCallback[20] = &USBHAL::EP11_OUT_callback;
-    epCallback[21] = &USBHAL::EP11_IN_callback;
-    epCallback[22] = &USBHAL::EP12_OUT_callback;
-    epCallback[23] = &USBHAL::EP12_IN_callback;
-    epCallback[24] = &USBHAL::EP13_OUT_callback;
-    epCallback[25] = &USBHAL::EP13_IN_callback;
-    epCallback[26] = &USBHAL::EP14_OUT_callback;
-    epCallback[27] = &USBHAL::EP14_IN_callback;
-    epCallback[28] = &USBHAL::EP15_OUT_callback;
-    epCallback[29] = &USBHAL::EP15_IN_callback;
-
-    // Enable power to USB device controller
-    LPC_SC->PCONP |= PCUSB;
-
-    // Enable USB clocks
-    LPC_USB->USBClkCtrl |= DEV_CLK_EN | AHB_CLK_EN;
-    while (LPC_USB->USBClkSt != (DEV_CLK_ON | AHB_CLK_ON));
-
-    // Configure pins P0.29 and P0.30 to be USB D+ and USB D-
-    LPC_PINCON->PINSEL1 &= 0xc3ffffff;
-    LPC_PINCON->PINSEL1 |= 0x14000000;
-
-    // Disconnect USB device
-    SIEdisconnect();
-
-    // Configure pin P2.9 to be Connect
-    LPC_PINCON->PINSEL4 &= 0xfffcffff;
-    LPC_PINCON->PINSEL4 |= 0x00040000;
-
-    // Connect must be low for at least 2.5uS
-    wait(0.3);
-
-    // Set the maximum packet size for the control endpoints
-    realiseEndpoint(EP0IN, MAX_PACKET_SIZE_EP0, 0);
-    realiseEndpoint(EP0OUT, MAX_PACKET_SIZE_EP0, 0);
-
-    // Attach IRQ
-    instance = this;
-    NVIC_SetVector(USB_IRQn, (uint32_t)&_usbisr);
-
-    // Enable interrupts for device events and EP0
-    LPC_USB->USBDevIntEn = EP_SLOW | DEV_STAT | FRAME;
-    enableEndpointEvent(EP0IN);
-    enableEndpointEvent(EP0OUT);
-}
-
-USBHAL::~USBHAL(void) {
-    // Ensure device disconnected
-    SIEdisconnect();
-    // Disable USB interrupts
-    NVIC_DisableIRQ(USB_IRQn);
-}
-
-void USBHAL::connect(void) {
-    NVIC_EnableIRQ(USB_IRQn);
-    // Connect USB device
-    SIEconnect();
-}
-
-void USBHAL::disconnect(void) {
-    NVIC_DisableIRQ(USB_IRQn);
-    // Disconnect USB device
-    SIEdisconnect();
-}
-
-void USBHAL::configureDevice(void) {
-    SIEconfigureDevice();
-}
-
-void USBHAL::unconfigureDevice(void) {
-    SIEunconfigureDevice();
-}
-
-void USBHAL::setAddress(uint8_t address) {
-    SIEsetAddress(address);
-}
-
-void USBHAL::EP0setup(uint8_t *buffer) {
-    endpointReadcore(EP0OUT, buffer);
-}
-
-void USBHAL::EP0read(void) {
-    // Not required
-}
-
-void USBHAL::EP0readStage(void) {
-    // Not required
-}
-
-uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) {
-    return endpointReadcore(EP0OUT, buffer);
-}
-
-void USBHAL::EP0write(uint8_t *buffer, uint32_t size) {
-    endpointWritecore(EP0IN, buffer, size);
-}
-
-void USBHAL::EP0getWriteResult(void) {
-    // Not required
-}
-
-void USBHAL::EP0stall(void) {
-    // This will stall both control endpoints
-    stallEndpoint(EP0OUT);
-}
-
-EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) {
-    return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_t *bytesRead) {
-
-    //for isochronous endpoint, we don't wait an interrupt
-    if ((endpoint >> 1) % 3 || (endpoint >> 1) == 0) {
-        if (!(epComplete & EP(endpoint)))
-            return EP_PENDING;
-    }
-
-    *bytesRead = endpointReadcore(endpoint, buffer);
-    epComplete &= ~EP(endpoint);
-    return EP_COMPLETED;
-}
-
-EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size) {
-    if (getEndpointStallState(endpoint)) {
-        return EP_STALLED;
-    }
-
-    epComplete &= ~EP(endpoint);
-
-    endpointWritecore(endpoint, data, size);
-    return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint) {
-    if (epComplete & EP(endpoint)) {
-        epComplete &= ~EP(endpoint);
-        return EP_COMPLETED;
-    }
-
-    return EP_PENDING;
-}
-
-bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t flags) {
-    // Realise an endpoint
-    LPC_USB->USBDevIntClr = EP_RLZED;
-    LPC_USB->USBReEp |= EP(endpoint);
-    LPC_USB->USBEpInd = endpoint;
-    LPC_USB->USBMaxPSize = maxPacket;
-
-    while (!(LPC_USB->USBDevIntSt & EP_RLZED));
-    LPC_USB->USBDevIntClr = EP_RLZED;
-
-    // Clear stall state
-    endpointStallState &= ~EP(endpoint);
-
-    enableEndpointEvent(endpoint);
-    return true;
-}
-
-void USBHAL::stallEndpoint(uint8_t endpoint) {
-    // Stall an endpoint
-    if ( (endpoint==EP0IN) || (endpoint==EP0OUT) ) {
-        // Conditionally stall both control endpoints
-        SIEsetEndpointStatus(EP0OUT, SIE_SES_CND_ST);
-    } else {
-        SIEsetEndpointStatus(endpoint, SIE_SES_ST);
-
-        // Update stall state
-        endpointStallState |= EP(endpoint);
-    }
-}
-
-void USBHAL::unstallEndpoint(uint8_t endpoint) {
-    // Unstall an endpoint. The endpoint will also be reinitialised
-    SIEsetEndpointStatus(endpoint, 0);
-
-    // Update stall state
-    endpointStallState &= ~EP(endpoint);
-}
-
-bool USBHAL::getEndpointStallState(uint8_t endpoint) {
-    // Returns true if endpoint stalled
-    return endpointStallState & EP(endpoint);
-}
-
-void USBHAL::remoteWakeup(void) {
-    // Remote wakeup
-    uint8_t status;
-
-    // Enable USB clocks
-    LPC_USB->USBClkCtrl |= DEV_CLK_EN | AHB_CLK_EN;
-    while (LPC_USB->USBClkSt != (DEV_CLK_ON | AHB_CLK_ON));
-
-    status = SIEgetDeviceStatus();
-    SIEsetDeviceStatus(status & ~SIE_DS_SUS);
-}
-
-void USBHAL::_usbisr(void) {
-    instance->usbisr();
-}
-
-
-void USBHAL::usbisr(void) {
-    uint8_t devStat;
-
-    if (LPC_USB->USBDevIntSt & FRAME) {
-        // Start of frame event
-        SOF(SIEgetFrameNumber());
-        // Clear interrupt status flag
-        LPC_USB->USBDevIntClr = FRAME;
-    }
-
-    if (LPC_USB->USBDevIntSt & DEV_STAT) {
-        // Device Status interrupt
-        // Must clear the interrupt status flag before reading the device status from the SIE
-        LPC_USB->USBDevIntClr = DEV_STAT;
-
-        // Read device status from SIE
-        devStat = SIEgetDeviceStatus();
-        //printf("devStat: %d\r\n", devStat);
-
-        if (devStat & SIE_DS_SUS_CH) {
-            // Suspend status changed
-            if((devStat & SIE_DS_SUS) != 0) {
-                suspendStateChanged(0);
-            }
-        }
-
-        if (devStat & SIE_DS_RST) {
-            // Bus reset
-            if((devStat & SIE_DS_SUS) == 0) {
-                suspendStateChanged(1);
-            }
-            busReset();
-        }
-    }
-
-    if (LPC_USB->USBDevIntSt & EP_SLOW) {
-        // (Slow) Endpoint Interrupt
-
-        // Process each endpoint interrupt
-        if (LPC_USB->USBEpIntSt & EP(EP0OUT)) {
-            if (selectEndpointClearInterrupt(EP0OUT) & SIE_SE_STP) {
-                // this is a setup packet
-                EP0setupCallback();
-            } else {
-                EP0out();
-            }
-            LPC_USB->USBDevIntClr = EP_SLOW;
-        }
-
-        if (LPC_USB->USBEpIntSt & EP(EP0IN)) {
-            selectEndpointClearInterrupt(EP0IN);
-            LPC_USB->USBDevIntClr = EP_SLOW;
-            EP0in();
-        }
-
-        for (uint8_t num = 2; num < 16*2; num++) {
-            if (LPC_USB->USBEpIntSt & EP(num)) {
-                selectEndpointClearInterrupt(num);
-                epComplete |= EP(num);
-                LPC_USB->USBDevIntClr = EP_SLOW;
-                if ((instance->*(epCallback[num - 2]))()) {
-                    epComplete &= ~EP(num);
-                }
-            }
-        }
-    }
-}
-
-#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/USBHAL_LPC40.cpp
--- a/USBDevice/USBHAL_LPC40.cpp	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,628 +0,0 @@
-/* Copyright (c) 2010-2011 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#if defined(TARGET_LPC4088) || defined(TARGET_LPC4088_DM)
-
-#include "USBHAL.h"
-
-
-// Get endpoint direction
-#define IN_EP(endpoint)     ((endpoint) & 1U ? true : false)
-#define OUT_EP(endpoint)    ((endpoint) & 1U ? false : true)
-
-// Convert physical endpoint number to register bit
-#define EP(endpoint) (1UL<<endpoint)
-
-// Power Control for Peripherals register
-#define PCUSB      (1UL<<31)
-
-// USB Clock Control register
-#define DEV_CLK_EN  (1UL<<1)
-#define PORT_CLK_EN (1UL<<3)
-#define AHB_CLK_EN  (1UL<<4)
-
-// USB Clock Status register
-#define DEV_CLK_ON (1UL<<1)
-#define AHB_CLK_ON (1UL<<4)
-
-// USB Device Interupt registers
-#define FRAME      (1UL<<0)
-#define EP_FAST    (1UL<<1)
-#define EP_SLOW    (1UL<<2)
-#define DEV_STAT   (1UL<<3)
-#define CCEMPTY    (1UL<<4)
-#define CDFULL     (1UL<<5)
-#define RxENDPKT   (1UL<<6)
-#define TxENDPKT   (1UL<<7)
-#define EP_RLZED   (1UL<<8)
-#define ERR_INT    (1UL<<9)
-
-// USB Control register
-#define RD_EN (1<<0)
-#define WR_EN (1<<1)
-#define LOG_ENDPOINT(endpoint) ((endpoint>>1)<<2)
-
-// USB Receive Packet Length register
-#define DV      (1UL<<10)
-#define PKT_RDY (1UL<<11)
-#define PKT_LNGTH_MASK (0x3ff)
-
-// Serial Interface Engine (SIE)
-#define SIE_WRITE   (0x01)
-#define SIE_READ    (0x02)
-#define SIE_COMMAND (0x05)
-#define SIE_CMD_CODE(phase, data) ((phase<<8)|(data<<16))
-
-// SIE Command codes
-#define SIE_CMD_SET_ADDRESS        (0xD0)
-#define SIE_CMD_CONFIGURE_DEVICE   (0xD8)
-#define SIE_CMD_SET_MODE           (0xF3)
-#define SIE_CMD_READ_FRAME_NUMBER  (0xF5)
-#define SIE_CMD_READ_TEST_REGISTER (0xFD)
-#define SIE_CMD_SET_DEVICE_STATUS  (0xFE)
-#define SIE_CMD_GET_DEVICE_STATUS  (0xFE)
-#define SIE_CMD_GET_ERROR_CODE     (0xFF)
-#define SIE_CMD_READ_ERROR_STATUS  (0xFB)
-
-#define SIE_CMD_SELECT_ENDPOINT(endpoint)                 (0x00+endpoint)
-#define SIE_CMD_SELECT_ENDPOINT_CLEAR_INTERRUPT(endpoint) (0x40+endpoint)
-#define SIE_CMD_SET_ENDPOINT_STATUS(endpoint)             (0x40+endpoint)
-
-#define SIE_CMD_CLEAR_BUFFER    (0xF2)
-#define SIE_CMD_VALIDATE_BUFFER (0xFA)
-
-// SIE Device Status register
-#define SIE_DS_CON    (1<<0)
-#define SIE_DS_CON_CH (1<<1)
-#define SIE_DS_SUS    (1<<2)
-#define SIE_DS_SUS_CH (1<<3)
-#define SIE_DS_RST    (1<<4)
-
-// SIE Device Set Address register
-#define SIE_DSA_DEV_EN  (1<<7)
-
-// SIE Configue Device register
-#define SIE_CONF_DEVICE (1<<0)
-
-// Select Endpoint register
-#define SIE_SE_FE       (1<<0)
-#define SIE_SE_ST       (1<<1)
-#define SIE_SE_STP      (1<<2)
-#define SIE_SE_PO       (1<<3)
-#define SIE_SE_EPN      (1<<4)
-#define SIE_SE_B_1_FULL (1<<5)
-#define SIE_SE_B_2_FULL (1<<6)
-
-// Set Endpoint Status command
-#define SIE_SES_ST      (1<<0)
-#define SIE_SES_DA      (1<<5)
-#define SIE_SES_RF_MO   (1<<6)
-#define SIE_SES_CND_ST  (1<<7)
-
-
-USBHAL * USBHAL::instance;
-
-static volatile int epComplete;
-static uint32_t endpointStallState;
-
-static void SIECommand(uint32_t command) {
-    // The command phase of a SIE transaction
-    LPC_USB->DevIntClr = CCEMPTY;
-    LPC_USB->CmdCode = SIE_CMD_CODE(SIE_COMMAND, command);
-    while (!(LPC_USB->DevIntSt & CCEMPTY));
-}
-
-static void SIEWriteData(uint8_t data) {
-    // The data write phase of a SIE transaction
-    LPC_USB->DevIntClr = CCEMPTY;
-    LPC_USB->CmdCode = SIE_CMD_CODE(SIE_WRITE, data);
-    while (!(LPC_USB->DevIntSt & CCEMPTY));
-}
-
-static uint8_t SIEReadData(uint32_t command) {
-    // The data read phase of a SIE transaction
-    LPC_USB->DevIntClr = CDFULL;
-    LPC_USB->CmdCode = SIE_CMD_CODE(SIE_READ, command);
-    while (!(LPC_USB->DevIntSt & CDFULL));
-    return (uint8_t)LPC_USB->CmdData;
-}
-
-static void SIEsetDeviceStatus(uint8_t status) {
-    // Write SIE device status register
-    SIECommand(SIE_CMD_SET_DEVICE_STATUS);
-    SIEWriteData(status);
-}
-
-static uint8_t SIEgetDeviceStatus(void) {
-    // Read SIE device status register
-    SIECommand(SIE_CMD_GET_DEVICE_STATUS);
-    return SIEReadData(SIE_CMD_GET_DEVICE_STATUS);
-}
-
-void SIEsetAddress(uint8_t address) {
-    // Write SIE device address register
-    SIECommand(SIE_CMD_SET_ADDRESS);
-    SIEWriteData((address & 0x7f) | SIE_DSA_DEV_EN);
-}
-
-static uint8_t SIEselectEndpoint(uint8_t endpoint) {
-    // SIE select endpoint command
-    SIECommand(SIE_CMD_SELECT_ENDPOINT(endpoint));
-    return SIEReadData(SIE_CMD_SELECT_ENDPOINT(endpoint));
-}
-
-static uint8_t SIEclearBuffer(void) {
-    // SIE clear buffer command
-    SIECommand(SIE_CMD_CLEAR_BUFFER);
-    return SIEReadData(SIE_CMD_CLEAR_BUFFER);
-}
-
-static void SIEvalidateBuffer(void) {
-    // SIE validate buffer command
-    SIECommand(SIE_CMD_VALIDATE_BUFFER);
-}
-
-static void SIEsetEndpointStatus(uint8_t endpoint, uint8_t status) {
-    // SIE set endpoint status command
-    SIECommand(SIE_CMD_SET_ENDPOINT_STATUS(endpoint));
-    SIEWriteData(status);
-}
-
-static uint16_t SIEgetFrameNumber(void) __attribute__ ((unused));
-static uint16_t SIEgetFrameNumber(void) {
-    // Read current frame number
-    uint16_t lowByte;
-    uint16_t highByte;
-
-    SIECommand(SIE_CMD_READ_FRAME_NUMBER);
-    lowByte = SIEReadData(SIE_CMD_READ_FRAME_NUMBER);
-    highByte = SIEReadData(SIE_CMD_READ_FRAME_NUMBER);
-
-    return (highByte << 8) | lowByte;
-}
-
-static void SIEconfigureDevice(void) {
-    // SIE Configure device command
-    SIECommand(SIE_CMD_CONFIGURE_DEVICE);
-    SIEWriteData(SIE_CONF_DEVICE);
-}
-
-static void SIEunconfigureDevice(void) {
-    // SIE Configure device command
-    SIECommand(SIE_CMD_CONFIGURE_DEVICE);
-    SIEWriteData(0);
-}
-
-static void SIEconnect(void) {
-    // Connect USB device
-    uint8_t status = SIEgetDeviceStatus();
-    SIEsetDeviceStatus(status | SIE_DS_CON);
-}
-
-
-static void SIEdisconnect(void) {
-    // Disconnect USB device
-    uint8_t status = SIEgetDeviceStatus();
-    SIEsetDeviceStatus(status & ~SIE_DS_CON);
-}
-
-
-static uint8_t selectEndpointClearInterrupt(uint8_t endpoint) {
-    // Implemented using using EP_INT_CLR.
-    LPC_USB->EpIntClr = EP(endpoint);
-    while (!(LPC_USB->DevIntSt & CDFULL));
-    return (uint8_t)LPC_USB->CmdData;
-}
-
-
-static void enableEndpointEvent(uint8_t endpoint) {
-    // Enable an endpoint interrupt
-    LPC_USB->EpIntEn |= EP(endpoint);
-}
-
-static void disableEndpointEvent(uint8_t endpoint) __attribute__ ((unused));
-static void disableEndpointEvent(uint8_t endpoint) {
-    // Disable an endpoint interrupt
-    LPC_USB->EpIntEn &= ~EP(endpoint);
-}
-
-static volatile uint32_t __attribute__((used)) dummyRead;
-uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) {
-    // Read from an OUT endpoint
-    uint32_t size;
-    uint32_t i;
-    uint32_t data = 0;
-    uint8_t offset;
-
-    LPC_USB->Ctrl = LOG_ENDPOINT(endpoint) | RD_EN;
-    while (!(LPC_USB->RxPLen & PKT_RDY));
-
-    size = LPC_USB->RxPLen & PKT_LNGTH_MASK;
-
-    offset = 0;
-
-    if (size > 0) {
-        for (i=0; i<size; i++) {
-            if (offset==0) {
-                // Fetch up to four bytes of data as a word
-                data = LPC_USB->RxData;
-            }
-
-            // extract a byte
-            *buffer = (data>>offset) & 0xff;
-            buffer++;
-
-            // move on to the next byte
-            offset = (offset + 8) % 32;
-        }
-    } else {
-        dummyRead = LPC_USB->RxData;
-    }
-
-    LPC_USB->Ctrl = 0;
-
-    if ((endpoint >> 1) % 3 || (endpoint >> 1) == 0) {
-        SIEselectEndpoint(endpoint);
-        SIEclearBuffer();
-    }
-
-    return size;
-}
-
-static void endpointWritecore(uint8_t endpoint, uint8_t *buffer, uint32_t size) {
-    // Write to an IN endpoint
-    uint32_t temp, data;
-    uint8_t offset;
-
-    LPC_USB->Ctrl = LOG_ENDPOINT(endpoint) | WR_EN;
-
-    LPC_USB->TxPLen = size;
-    offset = 0;
-    data = 0;
-
-    if (size>0) {
-        do {
-            // Fetch next data byte into a word-sized temporary variable
-            temp = *buffer++;
-
-            // Add to current data word
-            temp = temp << offset;
-            data = data | temp;
-
-            // move on to the next byte
-            offset = (offset + 8) % 32;
-            size--;
-
-            if ((offset==0) || (size==0)) {
-                // Write the word to the endpoint
-                LPC_USB->TxData = data;
-                data = 0;
-            }
-        } while (size>0);
-    } else {
-        LPC_USB->TxData = 0;
-    }
-
-    // Clear WR_EN to cover zero length packet case
-    LPC_USB->Ctrl=0;
-
-    SIEselectEndpoint(endpoint);
-    SIEvalidateBuffer();
-}
-
-USBHAL::USBHAL(void) {
-    // Disable IRQ
-    NVIC_DisableIRQ(USB_IRQn);
-
-    // fill in callback array
-    epCallback[0] = &USBHAL::EP1_OUT_callback;
-    epCallback[1] = &USBHAL::EP1_IN_callback;
-    epCallback[2] = &USBHAL::EP2_OUT_callback;
-    epCallback[3] = &USBHAL::EP2_IN_callback;
-    epCallback[4] = &USBHAL::EP3_OUT_callback;
-    epCallback[5] = &USBHAL::EP3_IN_callback;
-    epCallback[6] = &USBHAL::EP4_OUT_callback;
-    epCallback[7] = &USBHAL::EP4_IN_callback;
-    epCallback[8] = &USBHAL::EP5_OUT_callback;
-    epCallback[9] = &USBHAL::EP5_IN_callback;
-    epCallback[10] = &USBHAL::EP6_OUT_callback;
-    epCallback[11] = &USBHAL::EP6_IN_callback;
-    epCallback[12] = &USBHAL::EP7_OUT_callback;
-    epCallback[13] = &USBHAL::EP7_IN_callback;
-    epCallback[14] = &USBHAL::EP8_OUT_callback;
-    epCallback[15] = &USBHAL::EP8_IN_callback;
-    epCallback[16] = &USBHAL::EP9_OUT_callback;
-    epCallback[17] = &USBHAL::EP9_IN_callback;
-    epCallback[18] = &USBHAL::EP10_OUT_callback;
-    epCallback[19] = &USBHAL::EP10_IN_callback;
-    epCallback[20] = &USBHAL::EP11_OUT_callback;
-    epCallback[21] = &USBHAL::EP11_IN_callback;
-    epCallback[22] = &USBHAL::EP12_OUT_callback;
-    epCallback[23] = &USBHAL::EP12_IN_callback;
-    epCallback[24] = &USBHAL::EP13_OUT_callback;
-    epCallback[25] = &USBHAL::EP13_IN_callback;
-    epCallback[26] = &USBHAL::EP14_OUT_callback;
-    epCallback[27] = &USBHAL::EP14_IN_callback;
-    epCallback[28] = &USBHAL::EP15_OUT_callback;
-    epCallback[29] = &USBHAL::EP15_IN_callback;
-
-    // Enable power to USB device controller
-    LPC_SC->PCONP |= PCUSB;
-
-    // Enable USB clocks
-    LPC_USB->USBClkCtrl |= DEV_CLK_EN | AHB_CLK_EN | PORT_CLK_EN;
-    while ((LPC_USB->USBClkSt & (DEV_CLK_EN | AHB_CLK_EN | PORT_CLK_EN)) != (DEV_CLK_ON | AHB_CLK_ON | PORT_CLK_EN));
-
-    // Select port USB2
-    LPC_USB->StCtrl |= 3;
-
-
-    // Configure pin P0.31 to be USB2
-    LPC_IOCON->P0_31 &= ~0x07;
-    LPC_IOCON->P0_31 |= 0x01;
-
-    // Disconnect USB device
-    SIEdisconnect();
-
-    // Configure pin P0.14 to be Connect
-    LPC_IOCON->P0_14 &= ~0x07;
-    LPC_IOCON->P0_14 |= 0x03;
-
-    // Connect must be low for at least 2.5uS
-    wait(0.3);
-
-    // Set the maximum packet size for the control endpoints
-    realiseEndpoint(EP0IN, MAX_PACKET_SIZE_EP0, 0);
-    realiseEndpoint(EP0OUT, MAX_PACKET_SIZE_EP0, 0);
-
-    // Attach IRQ
-    instance = this;
-    NVIC_SetVector(USB_IRQn, (uint32_t)&_usbisr);
-
-    // Enable interrupts for device events and EP0
-    LPC_USB->DevIntEn = EP_SLOW | DEV_STAT | FRAME;
-    enableEndpointEvent(EP0IN);
-    enableEndpointEvent(EP0OUT);
-}
-
-USBHAL::~USBHAL(void) {
-    // Ensure device disconnected
-    SIEdisconnect();
-    // Disable USB interrupts
-    NVIC_DisableIRQ(USB_IRQn);
-}
-
-void USBHAL::connect(void) {
-    NVIC_EnableIRQ(USB_IRQn);
-    // Connect USB device
-    SIEconnect();
-}
-
-void USBHAL::disconnect(void) {
-    NVIC_DisableIRQ(USB_IRQn);
-    // Disconnect USB device
-    SIEdisconnect();
-}
-
-void USBHAL::configureDevice(void) {
-    SIEconfigureDevice();
-}
-
-void USBHAL::unconfigureDevice(void) {
-    SIEunconfigureDevice();
-}
-
-void USBHAL::setAddress(uint8_t address) {
-    SIEsetAddress(address);
-}
-
-void USBHAL::EP0setup(uint8_t *buffer) {
-    endpointReadcore(EP0OUT, buffer);
-}
-
-void USBHAL::EP0read(void) {
-    // Not required
-}
-
-void USBHAL::EP0readStage(void) {
-    // Not required
-}
-
-uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) {
-    return endpointReadcore(EP0OUT, buffer);
-}
-
-void USBHAL::EP0write(uint8_t *buffer, uint32_t size) {
-    endpointWritecore(EP0IN, buffer, size);
-}
-
-void USBHAL::EP0getWriteResult(void) {
-    // Not required
-}
-
-void USBHAL::EP0stall(void) {
-    // This will stall both control endpoints
-    stallEndpoint(EP0OUT);
-}
-
-EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) {
-    return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_t *bytesRead) {
-
-    //for isochronous endpoint, we don't wait an interrupt
-    if ((endpoint >> 1) % 3 || (endpoint >> 1) == 0) {
-        if (!(epComplete & EP(endpoint)))
-            return EP_PENDING;
-    }
-
-    *bytesRead = endpointReadcore(endpoint, buffer);
-    epComplete &= ~EP(endpoint);
-    return EP_COMPLETED;
-}
-
-EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size) {
-    if (getEndpointStallState(endpoint)) {
-        return EP_STALLED;
-    }
-
-    epComplete &= ~EP(endpoint);
-
-    endpointWritecore(endpoint, data, size);
-    return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint) {
-    if (epComplete & EP(endpoint)) {
-        epComplete &= ~EP(endpoint);
-        return EP_COMPLETED;
-    }
-
-    return EP_PENDING;
-}
-
-bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t flags) {
-    // Realise an endpoint
-    LPC_USB->DevIntClr = EP_RLZED;
-    LPC_USB->ReEp |= EP(endpoint);
-    LPC_USB->EpInd = endpoint;
-    LPC_USB->MaxPSize = maxPacket;
-
-    while (!(LPC_USB->DevIntSt & EP_RLZED));
-    LPC_USB->DevIntClr = EP_RLZED;
-
-    // Clear stall state
-    endpointStallState &= ~EP(endpoint);
-
-    enableEndpointEvent(endpoint);
-    return true;
-}
-
-void USBHAL::stallEndpoint(uint8_t endpoint) {
-    // Stall an endpoint
-    if ( (endpoint==EP0IN) || (endpoint==EP0OUT) ) {
-        // Conditionally stall both control endpoints
-        SIEsetEndpointStatus(EP0OUT, SIE_SES_CND_ST);
-    } else {
-        SIEsetEndpointStatus(endpoint, SIE_SES_ST);
-
-        // Update stall state
-        endpointStallState |= EP(endpoint);
-    }
-}
-
-void USBHAL::unstallEndpoint(uint8_t endpoint) {
-    // Unstall an endpoint. The endpoint will also be reinitialised
-    SIEsetEndpointStatus(endpoint, 0);
-
-    // Update stall state
-    endpointStallState &= ~EP(endpoint);
-}
-
-bool USBHAL::getEndpointStallState(uint8_t endpoint) {
-    // Returns true if endpoint stalled
-    return endpointStallState & EP(endpoint);
-}
-
-void USBHAL::remoteWakeup(void) {
-    // Remote wakeup
-    uint8_t status;
-
-    // Enable USB clocks
-    LPC_USB->USBClkCtrl |= DEV_CLK_EN | AHB_CLK_EN;
-    while (LPC_USB->USBClkSt != (DEV_CLK_ON | AHB_CLK_ON));
-
-    status = SIEgetDeviceStatus();
-    SIEsetDeviceStatus(status & ~SIE_DS_SUS);
-}
-
-void USBHAL::_usbisr(void) {
-    instance->usbisr();
-}
-
-
-void USBHAL::usbisr(void) {
-    uint8_t devStat;
-
-    if (LPC_USB->DevIntSt & FRAME) {
-        // Start of frame event
-        SOF(SIEgetFrameNumber());
-        // Clear interrupt status flag
-        LPC_USB->DevIntClr = FRAME;
-    }
-
-    if (LPC_USB->DevIntSt & DEV_STAT) {
-        // Device Status interrupt
-        // Must clear the interrupt status flag before reading the device status from the SIE
-        LPC_USB->DevIntClr = DEV_STAT;
-
-        // Read device status from SIE
-        devStat = SIEgetDeviceStatus();
-        //printf("devStat: %d\r\n", devStat);
-
-        if (devStat & SIE_DS_SUS_CH) {
-            // Suspend status changed
-            if((devStat & SIE_DS_SUS) != 0) {
-                suspendStateChanged(0);
-            }
-        }
-
-        if (devStat & SIE_DS_RST) {
-            // Bus reset
-            if((devStat & SIE_DS_SUS) == 0) {
-                suspendStateChanged(1);
-            }
-            busReset();
-        }
-    }
-
-    if (LPC_USB->DevIntSt & EP_SLOW) {
-        // (Slow) Endpoint Interrupt
-
-        // Process each endpoint interrupt
-        if (LPC_USB->EpIntSt & EP(EP0OUT)) {
-            if (selectEndpointClearInterrupt(EP0OUT) & SIE_SE_STP) {
-                // this is a setup packet
-                EP0setupCallback();
-            } else {
-                EP0out();
-            }
-            LPC_USB->DevIntClr = EP_SLOW;
-        }
-
-        if (LPC_USB->EpIntSt & EP(EP0IN)) {
-            selectEndpointClearInterrupt(EP0IN);
-            LPC_USB->DevIntClr = EP_SLOW;
-            EP0in();
-        }
-
-        for (uint8_t num = 2; num < 16*2; num++) {
-            if (LPC_USB->EpIntSt & EP(num)) {
-                selectEndpointClearInterrupt(num);
-                epComplete |= EP(num);
-                LPC_USB->DevIntClr = EP_SLOW;
-                if ((instance->*(epCallback[num - 2]))()) {
-                    epComplete &= ~EP(num);
-                }
-            }
-        }
-    }
-}
-
-#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/USBHAL_M453.cpp
--- a/USBDevice/USBHAL_M453.cpp	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,465 +0,0 @@
-/* mbed Microcontroller Library
- * Copyright (c) 2015-2016 Nuvoton
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#if defined(TARGET_NUMAKER_PFM_M453)
-
-#include "USBHAL.h"
-#include "M451Series.h"
-#include "pinmap.h"
-
-/**
- * EP: mbed USBD defined endpoint, e.g. EP0OUT/IN, EP1OUT/IN, EP2OUT/IN.
- * EPX: BSP defined endpoint, e.g. CEP, EPA, EPB, EPC.
- */
-
-USBHAL * USBHAL::instance;
-
-/* Global variables for Control Pipe */
-extern uint8_t g_usbd_SetupPacket[];        /*!< Setup packet buffer */
-
-static volatile uint32_t s_ep_compl = 0;
-static volatile uint32_t s_ep_buf_ind = 8;
-static volatile uint8_t s_usb_addr = 0;
-static volatile uint8_t s_ep_data_bit[NUMBER_OF_PHYSICAL_ENDPOINTS] = {1};
-static volatile uint8_t s_ep_mxp[NUMBER_OF_PHYSICAL_ENDPOINTS] = {0};
-
-extern volatile uint8_t *g_usbd_CtrlInPointer;
-extern volatile uint32_t g_usbd_CtrlInSize;
-extern volatile uint8_t *g_usbd_CtrlOutPointer;
-extern volatile uint32_t g_usbd_CtrlOutSize;
-extern volatile uint32_t g_usbd_CtrlOutSizeLimit;
-extern volatile uint32_t g_usbd_UsbConfig;
-extern volatile uint32_t g_usbd_CtrlMaxPktSize;
-extern volatile uint32_t g_usbd_UsbAltInterface;
-volatile uint32_t g_usbd_CepTransferLen = 0;
-volatile uint32_t frame_cnt = 0;
-USBHAL::USBHAL(void)
-{
-    SYS_UnlockReg();
-
-    s_ep_buf_ind = 8;
-
-    memset(epCallback, 0x00, sizeof (epCallback));
-    epCallback[0] = &USBHAL::EP1_OUT_callback;
-    epCallback[1] = &USBHAL::EP2_IN_callback;
-    epCallback[2] = &USBHAL::EP3_OUT_callback;
-    epCallback[3] = &USBHAL::EP4_IN_callback;
-    epCallback[4] = &USBHAL::EP5_OUT_callback;
-    epCallback[5] = &USBHAL::EP6_IN_callback;
-
-    instance = this;
-    /* Enable USBD module clock */
-    CLK_EnableModuleClock(USBD_MODULE);
-
-    CLK_SetModuleClock(USBD_MODULE, 0, CLK_CLKDIV0_USB(3));
-
-    /* Enable USB LDO33 */
-    SYS->USBPHY = SYS_USBPHY_LDO33EN_Msk;
-
-    /* Initial USB engine */
-    USBD->ATTR = 0x7D0;
-
-    /* Set SE0 (disconnect) */
-    USBD_SET_SE0();
-
-    //NVIC_SetVector(OTG_FS_IRQn, (uint32_t) &_usbisr);
-    NVIC_SetVector(USBD_IRQn, (uint32_t) &_usbisr);
-    NVIC_EnableIRQ(USBD_IRQn);
-}
-
-USBHAL::~USBHAL(void)
-{
-    NVIC_DisableIRQ(USBD_IRQn);
-    USBD_SET_SE0();
-    USBD_DISABLE_PHY();
-}
-
-void USBHAL::connect(void)
-{
-    USBD->STBUFSEG = 0;
-    frame_cnt = 0;
-    /* EP0 ==> control IN endpoint, address 0 */
-    USBD_CONFIG_EP(EP0, USBD_CFG_CSTALL | USBD_CFG_EPMODE_IN | 0);
-    /* Buffer range for EP0 */
-    USBD_SET_EP_BUF_ADDR(EP0, s_ep_buf_ind);
-
-    /* EP1 ==> control OUT endpoint, address 0 */
-    USBD_CONFIG_EP(EP1, USBD_CFG_CSTALL | USBD_CFG_EPMODE_OUT | 0);
-    /* Buffer range for EP1 */
-    USBD_SET_EP_BUF_ADDR(EP1, s_ep_buf_ind);
-
-    s_ep_buf_ind += MAX_PACKET_SIZE_EP0;
-
-    /* Disable software-disconnect function */
-    USBD_CLR_SE0();
-
-    /* Clear USB-related interrupts before enable interrupt */
-    USBD_CLR_INT_FLAG(USBD_INT_BUS | USBD_INT_USB | USBD_INT_FLDET | USBD_INT_WAKEUP);
-
-    /* Enable USB-related interrupts. */
-    USBD_ENABLE_INT(USBD_INT_BUS | USBD_INT_USB | USBD_INT_FLDET | USBD_INT_WAKEUP);
-}
-
-void USBHAL::disconnect(void)
-{
-    /* Set SE0 (disconnect) */
-    USBD_SET_SE0();
-}
-
-void USBHAL::configureDevice(void)
-{
-    /**
-     * In USBDevice.cpp > USBDevice::requestSetConfiguration, configureDevice() is called after realiseEndpoint() (in USBCallback_setConfiguration()).
-     * So we have the following USB buffer management policy:
-     *  1. Allocate for CEP on connect().
-     *  2. Allocate for EPX in realiseEndpoint().
-     *  3. Deallocate all except for CEP in unconfigureDevice().
-     */
-}
-
-void USBHAL::unconfigureDevice(void)
-{
-    s_ep_buf_ind = 8;
-}
-
-void USBHAL::setAddress(uint8_t address)
-{
-    // NOTE: Delay address setting; otherwise, USB controller won't ack.
-    s_usb_addr = address;
-}
-
-void USBHAL::remoteWakeup(void)
-{
-#if 0
-    USBD->OPER |= USBD_OPER_RESUMEEN_Msk;
-#endif
-}
-
-bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t options)
-{
-    uint32_t ep_type = 0;
-    uint32_t ep_hw_index = NU_EP2EPH(endpoint);
-    uint32_t ep_logic_index = NU_EP2EPL(endpoint);
-    uint32_t ep_dir = (NU_EP_DIR(endpoint) == NU_EP_DIR_IN) ? USBD_CFG_EPMODE_IN : USBD_CFG_EPMODE_OUT;
-
-    if (ep_logic_index == 3 || ep_logic_index == 4)
-        ep_type = USBD_CFG_TYPE_ISO;
-
-    USBD_CONFIG_EP(ep_hw_index, ep_dir | ep_type | ep_logic_index);
-    /* Buffer range */
-    USBD_SET_EP_BUF_ADDR(ep_hw_index, s_ep_buf_ind);
-
-    if (ep_dir == USBD_CFG_EPMODE_OUT)
-        USBD_SET_PAYLOAD_LEN(ep_hw_index, maxPacket);
-
-    s_ep_mxp[ep_logic_index] = maxPacket;
-
-    s_ep_buf_ind += maxPacket;
-
-    return true;
-}
-
-void USBHAL::EP0setup(uint8_t *buffer)
-{
-    uint32_t sz;
-    endpointReadResult(EP0OUT, buffer, &sz);
-}
-
-void USBHAL::EP0read(void)
-{
-
-
-}
-
-void USBHAL::EP0readStage(void)
-{
-    // N/A
-
-    USBD_PrepareCtrlOut(0,0);
-}
-
-uint32_t USBHAL::EP0getReadResult(uint8_t *buffer)
-{
-    uint32_t i;
-    uint8_t *buf = (uint8_t *)(USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(EP1));
-    uint32_t ceprxcnt = USBD_GET_PAYLOAD_LEN(EP1);
-    for (i = 0; i < ceprxcnt; i ++)
-        buffer[i] = buf[i];
-    USBD_SET_PAYLOAD_LEN(EP1, MAX_PACKET_SIZE_EP0);
-    return ceprxcnt;
-}
-
-void USBHAL::EP0write(uint8_t *buffer, uint32_t size)
-{
-    if (buffer && size)
-    {
-        if (s_ep_data_bit[0] & 1)
-            USBD_SET_DATA1(EP0);
-        else
-            USBD_SET_DATA0(EP0);
-        s_ep_data_bit[0]++;
-
-        USBD_MemCopy((uint8_t *)USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(EP0), buffer, size);
-        USBD_SET_PAYLOAD_LEN(EP0, size);
-        if (size < MAX_PACKET_SIZE_EP0)
-            s_ep_data_bit[0] = 1;
-
-    }
-    else
-    {
-        if (g_usbd_SetupPacket[0] & 0x80)   //Device to Host
-        {
-            // Status stage
-            //          USBD_PrepareCtrlOut(0,0);
-        } else
-        {
-            USBD_SET_DATA1(EP0);
-            USBD_SET_PAYLOAD_LEN(EP0, 0);
-        }
-    }
-}
-
-void USBHAL::EP0getWriteResult(void)
-{
-    // N/A
-}
-
-void USBHAL::EP0stall(void)
-{
-    stallEndpoint(EP0OUT);
-}
-
-EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize)
-{
-    return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_t *bytesRead) //spcheng
-{
-    if (endpoint == EP0OUT)
-    {
-        USBD_MemCopy(g_usbd_SetupPacket, (uint8_t *)USBD_BUF_BASE, 8);
-        if (buffer) {
-            USBD_MemCopy(buffer, g_usbd_SetupPacket, 8);
-        }
-        USBD_SET_PAYLOAD_LEN(EP1, MAX_PACKET_SIZE_EP0);
-    }
-    else
-    {
-        uint32_t i;
-        uint8_t *buf = (uint8_t *)(USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(NU_EP2EPH(endpoint)));
-        uint32_t eprxcnt = USBD_GET_PAYLOAD_LEN(NU_EP2EPH(endpoint));
-        for (i = 0; i < eprxcnt; i ++)
-            buffer[i] = buf[i];
-
-        *bytesRead = eprxcnt;
-
-        USBD_SET_PAYLOAD_LEN(NU_EP2EPH(endpoint),s_ep_mxp[NU_EPH2EPL(NU_EP2EPL(endpoint))]);
-    }
-    return EP_COMPLETED;
-}
-
-
-uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer)
-{
-    return 0;
-}
-
-EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size)
-{
-    uint32_t ep_logic_index = NU_EP2EPL(endpoint);
-    if (ep_logic_index == 0)
-        return EP_INVALID;
-    else
-    {
-        uint8_t *buf;
-        uint32_t i=0;
-        uint32_t ep_hw_index = NU_EP2EPH(endpoint);
-        s_ep_compl |= (1 << ep_logic_index);
-        buf = (uint8_t *)(USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(ep_hw_index));
-        for (i=0;i<size;i++)
-            buf[i] = data[i];
-
-        /* Set transfer length and trigger IN transfer */
-        USBD_SET_PAYLOAD_LEN(ep_hw_index, size);
-
-    }
-    return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint)
-{
-    if (!(s_ep_compl & (1 << NU_EP2EPL(endpoint))))
-        return EP_COMPLETED;
-    return EP_PENDING;
-}
-
-void USBHAL::stallEndpoint(uint8_t endpoint)
-{
-    uint32_t ep_hw_index = NU_EP2EPH(endpoint);
-    if (ep_hw_index >= NUMBER_OF_PHYSICAL_ENDPOINTS)
-        return;
-
-    USBD_SetStall(NU_EPH2EPL(ep_hw_index));
-
-}
-
-void USBHAL::unstallEndpoint(uint8_t endpoint)
-{
-    uint32_t ep_hw_index = NU_EP2EPH(endpoint);
-    if (ep_hw_index >= NUMBER_OF_PHYSICAL_ENDPOINTS)
-        return;
-    USBD_ClearStall(NU_EPH2EPL(ep_hw_index));
-}
-
-bool USBHAL::getEndpointStallState(uint8_t endpoint)
-{
-    uint32_t ep_hw_index = NU_EP2EPH(endpoint);
-    if (ep_hw_index >= NUMBER_OF_PHYSICAL_ENDPOINTS)
-        return false;
-
-    return USBD_GetStall(NU_EPH2EPL(ep_hw_index)) ? 1 : 0;
-}
-
-void USBHAL::_usbisr(void)
-{
-    MBED_ASSERT(instance);
-    instance->usbisr();
-}
-
-void USBHAL::usbisr(void)
-{
-    uint32_t u32IntSts = USBD_GET_INT_FLAG();
-    uint32_t u32State = USBD_GET_BUS_STATE();
-
-//------------------------------------------------------------------
-    if (u32IntSts & USBD_INTSTS_VBDETIF_Msk)
-    {
-        // Floating detect
-        USBD_CLR_INT_FLAG(USBD_INTSTS_VBDETIF_Msk);
-
-        if (USBD_IS_ATTACHED())
-        {
-            /* USB Plug In */
-            USBD_ENABLE_USB();
-        }
-        else
-        {
-            /* USB Un-plug */
-            USBD_DISABLE_USB();
-        }
-    }
-
-//------------------------------------------------------------------
-    if (u32IntSts & USBD_INTSTS_BUSIF_Msk)
-    {
-        /* Clear event flag */
-        USBD_CLR_INT_FLAG(USBD_INTSTS_BUSIF_Msk);
-
-        if (u32State & USBD_ATTR_USBRST_Msk)
-        {
-            /* Bus reset */
-            USBD_ENABLE_USB();
-            USBD_SwReset();
-        }
-        if (u32State & USBD_ATTR_SUSPEND_Msk)
-        {
-            /* Enable USB but disable PHY */
-            USBD_DISABLE_PHY();
-        }
-        if (u32State & USBD_ATTR_RESUME_Msk)
-        {
-            /* Enable USB and enable PHY */
-            USBD_ENABLE_USB();
-        }
-    }
-
-    if (u32IntSts & USBD_INTSTS_USBIF_Msk)
-    {
-        // USB event
-        if (u32IntSts & USBD_INTSTS_SETUP_Msk)
-        {
-            // Setup packet
-            /* Clear event flag */
-            USBD_CLR_INT_FLAG(USBD_INTSTS_SETUP_Msk);
-
-            /* Clear the data IN/OUT ready flag of control end-points */
-            USBD_STOP_TRANSACTION(EP0);
-            USBD_STOP_TRANSACTION(EP1);
-            EP0setupCallback();
-        }
-
-        // EP events
-        if (u32IntSts & USBD_INTSTS_EP0)
-        {
-            /* Clear event flag */
-            USBD_CLR_INT_FLAG(USBD_INTSTS_EP0);
-            // control IN
-            EP0in();
-
-            // In ACK for Set address
-            if ((g_usbd_SetupPacket[0] == REQ_STANDARD) && (g_usbd_SetupPacket[1] == USBD_SET_ADDRESS))
-            {
-                if ((USBD_GET_ADDR() != s_usb_addr) && (USBD_GET_ADDR() == 0))
-                {
-                    USBD_SET_ADDR(s_usb_addr);
-                }
-            }
-        }
-        if (u32IntSts & USBD_INTSTS_EP1)
-        {
-            /* Clear event flag */
-            USBD_CLR_INT_FLAG(USBD_INTSTS_EP1);
-
-            // control OUT
-            EP0out();
-        }
-
-        uint32_t gintsts_epx = (u32IntSts >> 18) & 0x3F;
-        uint32_t ep_hw_index = 2;
-        while (gintsts_epx) {
-            if (gintsts_epx & 0x01)
-            {
-                uint32_t ep_status = (USBD_GET_EP_FLAG() >> (ep_hw_index * 3 + 8)) & 0x7;
-                /* Clear event flag */
-                USBD_CLR_INT_FLAG(1 << (ep_hw_index + 16));
-
-                if (ep_status == 0x02 || ep_status == 0x06 || (ep_status == 0x07 && NU_EPH2EPL(ep_hw_index) == 3))  //RX
-                {
-                    if (ep_status == 0x07)
-                        SOF(frame_cnt++);
-                    if ((instance->*(epCallback[ep_hw_index-2]))())
-                    {
-
-                    }
-                    USBD_SET_PAYLOAD_LEN(ep_hw_index,s_ep_mxp[NU_EPH2EPL(ep_hw_index)]);
-                }
-                else if (ep_status == 0x00 || ep_status == 0x07)    //TX
-                {
-                    s_ep_compl &= ~(1 << (NU_EPH2EPL(ep_hw_index)));
-                    if ((instance->*(epCallback[ep_hw_index-2]))())
-                    {
-                    }
-                }
-            }
-
-            gintsts_epx = gintsts_epx >> 1;
-            ep_hw_index++;
-        }
-    }
-}
-#endif
-
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/USBHAL_Maxim.cpp
--- a/USBDevice/USBHAL_Maxim.cpp	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,492 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
- * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name of Maxim Integrated
- * Products, Inc. shall not be used except as stated in the Maxim Integrated
- * Products, Inc. Branding Policy.
- *
- * The mere transfer of this software does not imply any licenses
- * of trade secrets, proprietary technology, copyrights, patents,
- * trademarks, maskwork rights, or any other form of intellectual
- * property whatsoever. Maxim Integrated Products, Inc. retains all
- * ownership rights.
- *******************************************************************************
- */
-
-#if defined(TARGET_Maxim)
-
-#include "USBHAL.h"
-#include "usb_regs.h"
-#include "clkman_regs.h"
-
-#if defined(TARGET_MAX32625) || defined(TARGET_MAX32630)
-#include "pwrman_regs.h"
-#endif
-
-#define CONNECT_INTS    (MXC_F_USB_DEV_INTEN_BRST | MXC_F_USB_DEV_INTEN_SETUP | MXC_F_USB_DEV_INTEN_EP_IN | MXC_F_USB_DEV_INTEN_EP_OUT | MXC_F_USB_DEV_INTEN_DMA_ERR)
-
-USBHAL *USBHAL::instance;
-
-typedef struct {
-    volatile uint32_t buf0_desc;
-    volatile uint32_t buf0_address;
-    volatile uint32_t buf1_desc;
-    volatile uint32_t buf1_address;
-} ep_buffer_t;
-
-typedef struct {
-    ep_buffer_t out_buffer;
-    ep_buffer_t in_buffer;
-} ep0_buffer_t;
-
-typedef struct {
-    ep0_buffer_t ep0;
-    ep_buffer_t ep[MXC_USB_NUM_EP - 1];
-} ep_buffer_descriptor_t;
-
-// Static storage for endpoint buffer descriptor table. Must be 512 byte aligned for DMA.
-#ifdef __IAR_SYSTEMS_ICC__
-#pragma data_alignment = 512
-#else
-__attribute__ ((aligned (512))) 
-#endif
-ep_buffer_descriptor_t ep_buffer_descriptor;
-
-// static storage for temporary data buffers. Must be 32 byte aligned.
-#ifdef __IAR_SYSTEMS_ICC__
-#pragma data_alignment = 4
-#else
-__attribute__ ((aligned (4))) 
-#endif
-static uint8_t aligned_buffer[NUMBER_OF_LOGICAL_ENDPOINTS][MXC_USB_MAX_PACKET];
-
-// control packet state
-static enum {
-    CTRL_NONE = 0,
-    CTRL_SETUP,
-    CTRL_OUT,
-    CTRL_IN,
-} control_state;
-
-USBHAL::USBHAL(void)
-{
-    NVIC_DisableIRQ(USB_IRQn);
-
-#if defined(TARGET_MAX32600)
-    // The PLL must be enabled for USB
-    MBED_ASSERT(MXC_CLKMAN->clk_config & MXC_F_CLKMAN_CLK_CONFIG_PLL_ENABLE);
-
-    // Enable the USB clock
-    MXC_CLKMAN->clk_ctrl |= MXC_F_CLKMAN_CLK_CTRL_USB_GATE_N;
-#elif defined(TARGET_MAX32620)
-    // Enable the USB clock
-    MXC_CLKMAN->clk_ctrl |= MXC_F_CLKMAN_CLK_CTRL_USB_CLOCK_ENABLE;
-#elif defined(TARGET_MAX32625) || defined(TARGET_MAX32630)
-    MXC_PWRMAN->pwr_rst_ctrl |= MXC_F_PWRMAN_PWR_RST_CTRL_USB_POWERED;
-    MXC_CLKMAN->clk_ctrl |= MXC_F_CLKMAN_CLK_CTRL_USB_CLOCK_ENABLE;
-#endif
-
-    // reset the device
-    MXC_USB->cn = 0;
-    MXC_USB->cn = MXC_F_USB_CN_USB_EN;
-    MXC_USB->dev_inten = 0;
-    MXC_USB->dev_cn = 0;
-    MXC_USB->dev_cn = MXC_F_USB_DEV_CN_URST;
-    MXC_USB->dev_cn = 0;
-
-    // fill in callback arrays
-    epCallback[EP0OUT] = NULL;
-    epCallback[EP0IN]  = NULL;
-    epCallback[EP1OUT] = &USBHAL::EP1_OUT_callback;
-    epCallback[EP1IN ] = &USBHAL::EP1_IN_callback;
-    epCallback[EP2OUT] = &USBHAL::EP2_OUT_callback;
-    epCallback[EP2IN ] = &USBHAL::EP2_IN_callback;
-    epCallback[EP3OUT] = &USBHAL::EP3_OUT_callback;
-    epCallback[EP3IN ] = &USBHAL::EP3_IN_callback;
-    epCallback[EP4OUT] = &USBHAL::EP4_OUT_callback;
-    epCallback[EP4IN ] = &USBHAL::EP4_IN_callback;
-    epCallback[EP5OUT] = &USBHAL::EP5_OUT_callback;
-    epCallback[EP5IN ] = &USBHAL::EP5_IN_callback;
-    epCallback[EP6OUT] = &USBHAL::EP6_OUT_callback;
-    epCallback[EP6IN ] = &USBHAL::EP6_IN_callback;
-    epCallback[EP7OUT] = &USBHAL::EP7_OUT_callback;
-    epCallback[EP7IN ] = &USBHAL::EP7_IN_callback;
-
-    // clear driver state
-    control_state = CTRL_NONE;
-
-    // set the descriptor location
-    MXC_USB->ep_base = (uint32_t)&ep_buffer_descriptor;
-
-    // enable VBUS interrupts
-    MXC_USB->dev_inten = MXC_F_USB_DEV_INTEN_NO_VBUS | MXC_F_USB_DEV_INTEN_VBUS;
-
-    // attach IRQ handler and enable interrupts
-    instance = this;
-    NVIC_SetVector(USB_IRQn, &_usbisr);
-    NVIC_EnableIRQ(USB_IRQn);
-}
-
-USBHAL::~USBHAL(void)
-{
-    MXC_USB->dev_cn = MXC_F_USB_DEV_CN_URST;
-    MXC_USB->dev_cn = 0;
-    MXC_USB->cn = 0;
-}
-
-void USBHAL::connect(void)
-{
-    // enable interrupts
-    MXC_USB->dev_inten |= CONNECT_INTS;
-
-    // allow interrupts on ep0
-    MXC_USB->ep[0] |= MXC_F_USB_EP_INT_EN;
-
-    // pullup enable
-    MXC_USB->dev_cn |= (MXC_F_USB_DEV_CN_CONNECT | MXC_F_USB_DEV_CN_FIFO_MODE);
-}
-
-void USBHAL::disconnect(void)
-{
-    // disable interrupts
-    MXC_USB->dev_inten &= ~CONNECT_INTS;
-
-    // disable pullup
-    MXC_USB->dev_cn &= ~MXC_F_USB_DEV_CN_CONNECT;
-}
-
-void USBHAL::configureDevice(void)
-{
-    // do nothing
-}
-
-void USBHAL::unconfigureDevice(void)
-{
-    // reset endpoints
-    for (int i = 0; i < MXC_USB_NUM_EP; i++) {
-        // Disable endpoint and clear the data toggle
-        MXC_USB->ep[i] &= ~MXC_F_USB_EP_DIR;
-        MXC_USB->ep[i] |= MXC_F_USB_EP_DT;
-    }
-}
-
-void USBHAL::setAddress(uint8_t address)
-{
-    // do nothing
-}
-
-void USBHAL::remoteWakeup(void)
-{
-    // do nothing
-}
-
-static ep_buffer_t *get_desc(uint8_t endpoint)
-{
-    uint8_t epnum = EP_NUM(endpoint);
-    ep_buffer_t *desc;
-
-    if (epnum == 0) {
-        if (IN_EP(endpoint)) {
-            desc = &ep_buffer_descriptor.ep0.in_buffer;
-        } else {
-            desc = &ep_buffer_descriptor.ep0.out_buffer;
-        }
-    } else {
-        desc = &ep_buffer_descriptor.ep[epnum - 1];
-    }
-
-    return desc;
-}
-
-void USBHAL::EP0setup(uint8_t *buffer)
-{
-    // Setup packet is fixed at 8 bytes
-    // Setup registers cannot be read in byte mode
-    uint32_t *ptr32 = (uint32_t*)buffer;
-    ptr32[0] = (uint32_t)MXC_USB->setup0;
-    ptr32[1] = (uint32_t)MXC_USB->setup1;
-}
-
-void USBHAL::EP0read(void)
-{
-    if (control_state == CTRL_IN) {
-        // This is the status stage. ACK.
-        MXC_USB->ep[0] |= MXC_F_USB_EP_ST_ACK;
-        control_state = CTRL_NONE;
-        return;
-    }
-
-    control_state = CTRL_OUT;
-
-    endpointRead(EP0OUT, MAX_PACKET_SIZE_EP0);
-}
-
-void USBHAL::EP0readStage(void)
-{
-    // do nothing
-}
-
-uint32_t USBHAL::EP0getReadResult(uint8_t *buffer)
-{
-    uint32_t size;
-
-    if (MXC_USB->out_owner & 1) {
-        return 0;
-    }
-
-    // get the packet length and contents
-    ep_buffer_t *desc = get_desc(EP0OUT);
-    size = desc->buf0_desc;
-    memcpy(buffer, aligned_buffer[0], size);
-
-    return size;
-}
-
-void USBHAL::EP0write(uint8_t *buffer, uint32_t size)
-{
-    if ((size == 0) && (control_state != CTRL_IN)) {
-        // This is a status stage ACK. Handle in hardware.
-        MXC_USB->ep[0] |= MXC_F_USB_EP_ST_ACK;
-        control_state = CTRL_NONE;
-        return;
-    }
-
-    control_state = CTRL_IN;
-
-    endpointWrite(EP0IN, buffer, size);
-}
-
-void USBHAL::EP0stall(void)
-{
-    stallEndpoint(0);
-}
-
-EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize)
-{
-    uint8_t epnum = EP_NUM(endpoint);
-
-    if ((endpoint >= NUMBER_OF_PHYSICAL_ENDPOINTS) || IN_EP(endpoint)) {
-        return EP_INVALID;
-    }
-
-    if (maximumSize > MXC_USB_MAX_PACKET) {
-        return EP_INVALID;
-    }
-    
-    uint32_t mask = (1 << epnum);
-    if (MXC_USB->out_owner & mask) {
-        return EP_INVALID;
-    }
-
-    ep_buffer_t *desc = get_desc(endpoint);
-    desc->buf0_desc = maximumSize;
-    desc->buf0_address = (uint32_t)aligned_buffer[epnum];
-
-    MXC_USB->out_owner = mask;
-
-    return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t *data, uint32_t *bytesRead)
-{
-    if ((endpoint >= NUMBER_OF_PHYSICAL_ENDPOINTS) || IN_EP(endpoint)) {
-        return EP_INVALID;
-    }
-
-    uint32_t mask = (1 << EP_NUM(endpoint));
-    if (MXC_USB->out_owner & mask) {
-        return EP_PENDING;
-    }
-
-    // get the packet length and contents
-    ep_buffer_t *desc = get_desc(endpoint);
-    *bytesRead = desc->buf0_desc;
-    memcpy(data, aligned_buffer[EP_NUM(endpoint)], *bytesRead);
-
-    return EP_COMPLETED;
-}
-
-EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size)
-{
-    uint8_t epnum = EP_NUM(endpoint);
-
-    if ((endpoint >= NUMBER_OF_PHYSICAL_ENDPOINTS) || OUT_EP(endpoint)) {
-        return EP_INVALID;
-    }
-
-    if (size > MXC_USB_MAX_PACKET) {
-        return EP_INVALID;
-    }
-
-    uint32_t mask = (1 << epnum);
-    if (MXC_USB->in_owner & mask) {
-        return EP_INVALID;
-    }
-
-    memcpy(aligned_buffer[epnum], data, size);
-
-    ep_buffer_t *desc = get_desc(endpoint);
-    desc->buf0_desc = size;
-    desc->buf0_address = (uint32_t)aligned_buffer[epnum];
-
-    // start the DMA
-    MXC_USB->in_owner = mask;
-
-    return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint)
-{
-    uint32_t mask = (1 << EP_NUM(endpoint));
-    if (MXC_USB->in_owner & mask) {
-        return EP_PENDING;
-    }
-
-    return EP_COMPLETED;
-}
-
-void USBHAL::stallEndpoint(uint8_t endpoint)
-{
-    uint8_t epnum = EP_NUM(endpoint);
-
-    if (epnum == 0) {
-        MXC_USB->ep[epnum] |= MXC_F_USB_EP_ST_STALL;
-    }
-
-    MXC_USB->ep[epnum] |= MXC_F_USB_EP_STALL;
-}
-
-void USBHAL::unstallEndpoint(uint8_t endpoint)
-{
-    MXC_USB->ep[EP_NUM(endpoint)] &= ~MXC_F_USB_EP_STALL;
-}
-
-bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t options)
-{
-    uint8_t epnum = EP_NUM(endpoint);
-    uint32_t ep_ctrl;
-
-    if (epnum >= NUMBER_OF_PHYSICAL_ENDPOINTS) {
-        return false;
-    }
-
-    if (IN_EP(endpoint)) {
-        ep_ctrl = (MXC_V_USB_EP_DIR_IN << MXC_F_USB_EP_DIR_POS);
-    } else {
-        ep_ctrl = (MXC_S_USB_EP_DIR_OUT << MXC_F_USB_EP_DIR_POS);
-    }
-
-    ep_ctrl |= (MXC_F_USB_EP_DT | MXC_F_USB_EP_INT_EN);
-
-    MXC_USB->ep[epnum] = ep_ctrl;
-
-    return true;
-}
-
-bool USBHAL::getEndpointStallState(unsigned char endpoint)
-{
-    return !!(MXC_USB->ep[endpoint] & MXC_F_USB_EP_STALL);
-}
-
-void USBHAL::_usbisr(void)
-{
-    instance->usbisr();
-}
-
-void USBHAL::usbisr(void)
-{
-    // get and clear irqs
-    uint32_t irq_flags = MXC_USB->dev_intfl;
-    MXC_USB->dev_intfl = irq_flags;
-
-    // process only enabled interrupts
-    irq_flags &= MXC_USB->dev_inten;
-
-    // suspend 
-    if (irq_flags & MXC_F_USB_DEV_INTFL_SUSP) {
-        suspendStateChanged(1);
-    }
-
-    // bus reset
-    if (irq_flags & MXC_F_USB_DEV_INTFL_BRST) {
-
-        // reset endpoints
-        for (int i = 0; i < MXC_USB_NUM_EP; i++) {
-            // Disable endpoint and clear the data toggle
-            MXC_USB->ep[i] &= ~MXC_F_USB_EP_DIR;
-            MXC_USB->ep[i] |= MXC_F_USB_EP_DT;
-        }
-
-        // clear driver state
-        control_state = CTRL_NONE;
-
-        busReset();
-
-        // no need to process events after reset
-        return;
-    }
-
-    // Setup packet
-    if (irq_flags & MXC_F_USB_DEV_INTFL_SETUP) {
-        control_state = CTRL_SETUP;
-        EP0setupCallback();
-    }
-
-    // IN packets
-    if (irq_flags & MXC_F_USB_DEV_INTFL_EP_IN) {
-        // get and clear IN irqs
-        uint32_t in_irqs = MXC_USB->in_int;
-        MXC_USB->in_int = in_irqs;
-
-        if (in_irqs & 1) {
-            EP0in();
-        }
-
-        for (uint8_t epnum = 1; epnum < NUMBER_OF_LOGICAL_ENDPOINTS; epnum++) {
-            uint32_t irq_mask = (1 << epnum);
-            if (in_irqs & irq_mask) {
-                uint8_t endpoint = (epnum << 1) | DIR_IN;
-                (instance->*(epCallback[endpoint]))();
-            }
-        }
-    }
-
-    // OUT packets
-    if (irq_flags & MXC_F_USB_DEV_INTFL_EP_OUT) {
-        // get and clear OUT irqs
-        uint32_t out_irqs = MXC_USB->out_int;
-        MXC_USB->out_int = out_irqs;
-
-        if (out_irqs & 1) {
-            EP0out();
-        }
-
-        for (uint8_t epnum = 1; epnum < NUMBER_OF_LOGICAL_ENDPOINTS; epnum++) {
-            uint32_t irq_mask = (1 << epnum);
-            if (out_irqs & irq_mask) {
-                uint8_t endpoint = (epnum << 1) | DIR_OUT;
-                (instance->*(epCallback[endpoint]))();
-            }
-        }
-    }
-}
-
-#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/USBHAL_NUC472.cpp
--- a/USBDevice/USBHAL_NUC472.cpp	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,730 +0,0 @@
-/* mbed Microcontroller Library
- * Copyright (c) 2015-2016 Nuvoton
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#if defined(TARGET_NUMAKER_PFM_NUC472)
-
-#include "USBHAL.h"
-#include "NUC472_442.h"
-#include "pinmap.h"
-
-/**
- * EP: mbed USBD defined endpoint, e.g. EP0OUT/IN, EP1OUT/IN, EP2OUT/IN.
- * EPX: BSP defined endpoint, e.g. CEP, EPA, EPB, EPC.
- */
-
-USBHAL * USBHAL::instance;
-
-static volatile uint32_t s_ep_compl = 0;
-static volatile uint32_t s_ep_buf_ind = 0;
-static volatile uint8_t s_usb_addr = 0;
-static volatile S_USBD_CMD_T s_setup;
-static volatile uint16_t s_ctrlin_packetsize;
-static uint8_t *g_usbd_CtrlInPointer = 0;
-static uint32_t g_usbd_CtrlMaxPktSize = 64;
-static uint32_t g_usbd_ShortPkt = 0;
-static uint32_t gEpRead = 0;
-static uint32_t gEpReadCnt = 0;
-
-void USBD_CtrlInput(void)
-{
-    int volatile i;
-    uint32_t volatile count;
-
-    // Process remained data
-    if (g_usbd_CtrlInSize >= g_usbd_CtrlMaxPktSize)
-    {
-        // Data size > MXPLD
-        for (i=0; i<(g_usbd_CtrlMaxPktSize >> 2); i++, g_usbd_CtrlInPointer+=4)
-            USBD->CEPDAT = *(uint32_t *)g_usbd_CtrlInPointer;
-        USBD_START_CEP_IN(g_usbd_CtrlMaxPktSize);
-        g_usbd_CtrlInSize -= g_usbd_CtrlMaxPktSize;
-    }
-    else
-    {
-        // Data size <= MXPLD
-        for (i=0; i<(g_usbd_CtrlInSize >> 2); i++, g_usbd_CtrlInPointer+=4)
-            USBD->CEPDAT = *(uint32_t *)g_usbd_CtrlInPointer;
-
-        count = g_usbd_CtrlInSize % 4;
-        for (i=0; i<count; i++)
-            USBD->CEPDAT_BYTE = *(uint8_t *)(g_usbd_CtrlInPointer + i);
-
-        USBD_START_CEP_IN(g_usbd_CtrlInSize);
-        g_usbd_CtrlInPointer = 0;
-        g_usbd_CtrlInSize = 0;
-    }
-}
-
-USBHAL::USBHAL(void)
-{
-    SYS_UnlockReg();
-
-    s_ep_buf_ind = 0;
-
-    memset(epCallback, 0x00, sizeof (epCallback));
-    epCallback[0] = &USBHAL::EP1_OUT_callback;
-    epCallback[1] = &USBHAL::EP2_IN_callback;
-    epCallback[2] = &USBHAL::EP3_OUT_callback;
-    epCallback[3] = &USBHAL::EP4_IN_callback;
-    epCallback[4] = &USBHAL::EP5_OUT_callback;
-    epCallback[5] = &USBHAL::EP6_IN_callback;
-    epCallback[6] = &USBHAL::EP7_OUT_callback;
-    epCallback[7] = &USBHAL::EP8_IN_callback;
-    epCallback[8] = &USBHAL::EP9_OUT_callback;
-    epCallback[9] = &USBHAL::EP10_IN_callback;
-    epCallback[10] = &USBHAL::EP11_OUT_callback;
-    epCallback[11] = &USBHAL::EP12_IN_callback;
-
-    instance = this;
-
-    /* Enable USBD module clock */
-    CLK_EnableModuleClock(USBD_MODULE);
-
-    /* Enable USB PHY's LDO33. Run as USB device. */
-    SYS->USBPHY = SYS_USBPHY_USBROLE_OTG_V33_EN | SYS_USBPHY_USBROLE_STD_USBD;
-
-    /* Enable USB PHY and wait for it ready */
-    USBD_ENABLE_PHY();
-    while (1)
-    {
-        USBD->EPAMPS = 0x20;
-        if (USBD->EPAMPS == 0x20)
-            break;
-    }
-
-    /* Force to full-speed */
-    USBD->OPER = 0;//USBD_OPER_HISPDEN_Msk;
-
-    /* Set SE0 (disconnect) */
-    USBD_SET_SE0();
-
-    NVIC_SetVector(USBD_IRQn, (uint32_t) &_usbisr);
-    NVIC_EnableIRQ(USBD_IRQn);
-}
-
-USBHAL::~USBHAL(void)
-{
-    NVIC_DisableIRQ(USBD_IRQn);
-    USBD_SET_SE0();
-    USBD_DISABLE_PHY();
-}
-
-void USBHAL::connect(void)
-{
-    USBD_ResetDMA();
-    USBD_SET_ADDR(0);
-
-    /**
-      * Control Transfer Packet Size Constraints
-      * low-speed: 8
-      * full-speed: 8, 16, 32, 64
-      * high-speed: 64
-      */
-    /* Control endpoint */
-    USBD_SetEpBufAddr(CEP, s_ep_buf_ind, MAX_PACKET_SIZE_EP0);
-    s_ep_buf_ind = MAX_PACKET_SIZE_EP0;
-
-    /* Enable USB/CEP interrupt */
-    USBD_ENABLE_USB_INT(USBD_GINTEN_USBIE_Msk | USBD_GINTEN_CEPIE_Msk);
-    USBD_ENABLE_CEP_INT(USBD_CEPINTEN_SETUPPKIEN_Msk|USBD_CEPINTEN_STSDONEIEN_Msk);
-
-    /* Enable BUS interrupt */
-    USBD_ENABLE_BUS_INT(
-        USBD_BUSINTEN_DMADONEIEN_Msk |
-        USBD_BUSINTEN_RESUMEIEN_Msk |
-        USBD_BUSINTEN_RSTIEN_Msk |
-        USBD_BUSINTEN_VBUSDETIEN_Msk |
-        USBD_BUSINTEN_SOFIEN_Msk
-    );
-
-    /* Clear SE0 (connect) */
-    USBD_CLR_SE0();
-}
-
-void USBHAL::disconnect(void)
-{
-    /* Set SE0 (disconnect) */
-    USBD_SET_SE0();
-}
-
-void USBHAL::configureDevice(void)
-{
-    /**
-     * In USBDevice.cpp > USBDevice::requestSetConfiguration, configureDevice() is called after realiseEndpoint() (in USBCallback_setConfiguration()).
-     * So we have the following USB buffer management policy:
-     *  1. Allocate for CEP on connect().
-     *  2. Allocate for EPX in realiseEndpoint().
-     *  3. Deallocate all except for CEP in unconfigureDevice().
-     */
-}
-
-void USBHAL::unconfigureDevice(void)
-{
-    s_ep_buf_ind = MAX_PACKET_SIZE_EP0;
-}
-
-void USBHAL::setAddress(uint8_t address)
-{
-    // NOTE: Delay address setting; otherwise, USB controller won't ack.
-    s_usb_addr = address;
-}
-
-void USBHAL::remoteWakeup(void)
-{
-    USBD->OPER |= USBD_OPER_RESUMEEN_Msk;
-}
-
-bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t options)
-{
-    uint32_t ep_type;
-    uint32_t ep_hw_index = NU_EP2EPH(endpoint);
-
-    USBD_SetEpBufAddr(ep_hw_index, s_ep_buf_ind, maxPacket);
-    s_ep_buf_ind += maxPacket;
-    USBD_SET_MAX_PAYLOAD(ep_hw_index, maxPacket);
-
-    switch (NU_EP2EPL(endpoint))
-    {
-    case 1:    case 2:
-        ep_type = USB_EP_CFG_TYPE_INT;
-        break;
-
-    case 3:    case 4:
-        ep_type = USB_EP_CFG_TYPE_ISO;
-        break;
-
-    default:
-        ep_type = USB_EP_CFG_TYPE_BULK;
-    }
-    uint32_t ep_dir = (NU_EP_DIR(endpoint) == NU_EP_DIR_IN) ? USB_EP_CFG_DIR_IN : USB_EP_CFG_DIR_OUT;
-    USBD_ConfigEp(ep_hw_index, NU_EP2EPL(endpoint), ep_type, ep_dir);
-
-    /* Enable USB/EPX interrupt */
-    // NOTE: Require USBD_GINTEN_EPAIE_Pos, USBD_GINTEN_EPBIE_Pos, ... USBD_GINTEN_EPLIE_Pos to be consecutive.
-    USBD_ENABLE_USB_INT(USBD->GINTEN | USBD_GINTEN_USBIE_Msk |
-                        USBD_GINTEN_CEPIE_Msk |
-                        1 << (ep_hw_index + USBD_GINTEN_EPAIE_Pos));  // Added USB/EPX interrupt
-
-    if (ep_dir == 0)
-        USBD_ENABLE_EP_INT(ep_hw_index, USBD_EPINTEN_RXPKIEN_Msk);
-    else
-        USBD_ENABLE_EP_INT(ep_hw_index, USBD_EPINTEN_TXPKIEN_Msk);
-    return true;
-}
-
-void USBHAL::EP0setup(uint8_t *buffer)
-{
-    uint32_t sz;
-    endpointReadResult(EP0OUT, buffer, &sz);
-}
-
-void USBHAL::EP0read(void)
-{
-    if (s_setup.wLength && ! (s_setup.bmRequestType & 0x80))
-    {
-        // Control OUT
-        USBD_ENABLE_CEP_INT(USBD_CEPINTEN_SETUPPKIEN_Msk | USBD_CEPINTEN_RXPKIEN_Msk);
-    }
-    else
-    {
-        // Status stage
-        USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_STSDONEIF_Msk);
-        USBD_SET_CEP_STATE(USB_CEPCTL_NAKCLR);
-        USBD_ENABLE_CEP_INT(USBD_CEPINTEN_STSDONEIEN_Msk);
-    }
-}
-
-void USBHAL::EP0readStage(void)
-{
-    // N/A
-}
-
-uint32_t USBHAL::EP0getReadResult(uint8_t *buffer)
-{
-    uint32_t i;
-    uint32_t ceprxcnt = USBD->CEPRXCNT;
-    for (i = 0; i < ceprxcnt; i ++)
-        *buffer ++ = USBD->CEPDAT_BYTE;
-    return ceprxcnt;
-}
-
-void USBHAL::EP0write(uint8_t *buffer, uint32_t size)
-{
-    if (buffer && size)
-    {
-        g_usbd_CtrlInPointer = buffer;
-        g_usbd_CtrlInSize = size;
-        USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_INTKIF_Msk);
-        USBD_ENABLE_CEP_INT(USBD_CEPINTEN_INTKIEN_Msk);
-    }
-    else
-    {
-        /* Status stage */
-        s_ctrlin_packetsize = 0;
-        USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_STSDONEIF_Msk);
-        USBD_SET_CEP_STATE(USB_CEPCTL_NAKCLR);
-        USBD_ENABLE_CEP_INT(USBD_CEPINTEN_STSDONEIEN_Msk);
-    }
-}
-
-void USBHAL::EP0getWriteResult(void)
-{
-    // N/A
-}
-
-void USBHAL::EP0stall(void)
-{
-    stallEndpoint(EP0OUT);
-}
-
-EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize)
-{
-    return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_t *bytesRead) //spcheng
-{
-    if (endpoint == EP0OUT)
-    {
-        if (buffer) {
-            *((uint16_t *) (buffer + 0)) = (uint16_t) USBD->SETUP1_0;
-            *((uint16_t *) (buffer + 2)) = (uint16_t) USBD->SETUP3_2;
-            *((uint16_t *) (buffer + 4)) = (uint16_t) USBD->SETUP5_4;
-            *((uint16_t *) (buffer + 6)) = (uint16_t) USBD->SETUP7_6;
-        }
-
-        s_setup.bmRequestType = (uint8_t) (USBD->SETUP1_0 & 0xff);
-        s_setup.bRequest = (int8_t) (USBD->SETUP1_0 >> 8) & 0xff;
-        s_setup.wValue = (uint16_t) USBD->SETUP3_2;
-        s_setup.wIndex = (uint16_t) USBD->SETUP5_4;
-        s_setup.wLength = (uint16_t) USBD->SETUP7_6;
-    }
-    else
-    {
-        if (!(s_ep_compl & (1 << NU_EP2EPL(endpoint))))
-        {
-            while (1)
-            {
-                if (!(USBD->DMACTL & USBD_DMACTL_DMAEN_Msk))
-                    break;
-                else
-                    if (!USBD_IS_ATTACHED())
-                        break;
-            }
-            gEpReadCnt = USBD_GET_EP_DATA_COUNT(NU_EP2EPH(endpoint));
-            if (gEpReadCnt == 0)
-            {
-                *bytesRead = 0;
-                return EP_COMPLETED;
-            }
-            s_ep_compl |= (1 << NU_EP2EPL(endpoint));
-            USBD_SET_DMA_LEN(gEpReadCnt);
-            USBD_SET_DMA_ADDR((uint32_t)buffer);
-            USBD_SET_DMA_WRITE(NU_EP2EPL(endpoint));
-            USBD_ENABLE_DMA();
-            return EP_PENDING;;
-
-        }
-        else
-        {
-            if ((USBD->DMACTL & USBD_DMACTL_DMAEN_Msk))
-                return EP_PENDING;;
-
-            USBD_CLR_BUS_INT_FLAG(USBD_BUSINTSTS_DMADONEIF_Msk);
-            s_ep_compl &= ~(1 << NU_EP2EPL(endpoint));
-            *bytesRead = gEpReadCnt;
-        }
-    }
-    return EP_COMPLETED;
-}
-
-
-uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer)
-{
-    return 0;
-}
-
-EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size)
-{
-    uint32_t ep_logic_index = NU_EP2EPL(endpoint);
-    if (ep_logic_index == 0)
-        return EP_INVALID;
-    else
-    {
-        uint32_t ep_hw_index = NU_EP2EPH(endpoint);
-        uint32_t mps = USBD_GET_EP_MAX_PAYLOAD(ep_hw_index);
-        if (size > mps) {
-            return EP_INVALID;
-        }
-        if (size < mps)
-            g_usbd_ShortPkt = 1;
-        if (!(s_ep_compl & (1 << NU_EP2EPL(endpoint))))
-        {
-            s_ep_compl |= (1 << ep_logic_index);
-
-            while (1)
-            {
-                if (!(USBD->DMACTL & USBD_DMACTL_DMAEN_Msk))
-                    break;
-                else
-                    if (!USBD_IS_ATTACHED())
-                        break;
-            }
-            USBD_SET_DMA_LEN(size);
-            USBD_SET_DMA_ADDR((uint32_t)data);
-            USBD_SET_DMA_READ(ep_logic_index);
-            USBD_ENABLE_DMA();
-        }
-    }
-    return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint)
-{
-    if (!(s_ep_compl & (1 << NU_EP2EPL(endpoint))))
-        return EP_COMPLETED;
-    else
-    {
-        if ((USBD_GET_EP_DATA_COUNT(NU_EP2EPH(endpoint))) == 0 && !(USBD->DMACTL & USBD_DMACTL_DMAEN_Msk))
-        {
-            s_ep_compl &= ~(s_ep_compl & (1 << NU_EP2EPL(endpoint)));
-            return EP_COMPLETED;
-        }
-    }
-    return EP_PENDING;
-}
-
-void USBHAL::stallEndpoint(uint8_t endpoint)
-{
-    uint32_t ep_hw_index = NU_EP2EPH(endpoint);
-    if (ep_hw_index >= NUMBER_OF_PHYSICAL_ENDPOINTS)
-        return;
-    USBD_SetStall(ep_hw_index);
-}
-
-void USBHAL::unstallEndpoint(uint8_t endpoint)
-{
-    uint32_t ep_hw_index = NU_EP2EPH(endpoint);
-    if (ep_hw_index >= NUMBER_OF_PHYSICAL_ENDPOINTS)
-        return;
-    USBD_ClearStall(ep_hw_index);
-}
-
-bool USBHAL::getEndpointStallState(uint8_t endpoint)
-{
-    uint32_t ep_hw_index = NU_EP2EPH(endpoint);
-    if (ep_hw_index >= NUMBER_OF_PHYSICAL_ENDPOINTS)
-        return false;
-    return USBD_GetStall(ep_hw_index) ? 1 : 0;
-}
-
-void USBHAL::_usbisr(void)
-{
-    MBED_ASSERT(instance);
-    instance->usbisr();
-}
-
-void USBHAL::usbisr(void)
-{
-    uint32_t gintsts = USBD->GINTSTS & USBD->GINTEN;
-    if (! gintsts)
-        return;
-
-    if (gintsts & USBD_GINTSTS_USBIF_Msk)
-    {
-        uint32_t busintsts = USBD->BUSINTSTS & USBD->BUSINTEN;
-
-        /* SOF */
-        if (busintsts & USBD_BUSINTSTS_SOFIF_Msk)
-        {
-            USBD_CLR_BUS_INT_FLAG(USBD_BUSINTSTS_SOFIF_Msk);
-            // TODO
-            SOF(USBD->FRAMECNT >> 3);
-        }
-
-        /* Reset */
-        if (busintsts & USBD_BUSINTSTS_RSTIF_Msk)
-        {
-            connect();
-            USBD_CLR_BUS_INT_FLAG(USBD_BUSINTSTS_RSTIF_Msk);
-            USBD_CLR_CEP_INT_FLAG(0x1ffc);
-        }
-
-        /* Resume */
-        if (busintsts & USBD_BUSINTSTS_RESUMEIF_Msk)
-        {
-            USBD_ENABLE_BUS_INT(USBD_BUSINTEN_RSTIEN_Msk|USBD_BUSINTEN_SUSPENDIEN_Msk | USBD_BUSINTEN_SOFIEN_Msk | USBD_BUSINTEN_SOFIEN_Msk);
-            USBD_CLR_BUS_INT_FLAG(USBD_BUSINTSTS_RESUMEIF_Msk);
-        }
-
-        /* Suspend */
-        if (busintsts & USBD_BUSINTSTS_SUSPENDIF_Msk)
-        {
-            USBD_ENABLE_BUS_INT(USBD_BUSINTEN_RSTIEN_Msk | USBD_BUSINTEN_RESUMEIEN_Msk |USBD_BUSINTEN_SOFIEN_Msk);
-            USBD_CLR_BUS_INT_FLAG(USBD_BUSINTSTS_SUSPENDIF_Msk);
-        }
-
-        /* High-speed */
-        if (busintsts & USBD_BUSINTSTS_HISPDIF_Msk)
-        {
-            USBD_ENABLE_CEP_INT(USBD_CEPINTEN_SETUPPKIEN_Msk);
-            USBD_CLR_BUS_INT_FLAG(USBD_BUSINTSTS_HISPDIF_Msk);
-        }
-
-        /* DMA */
-        if (busintsts & USBD_BUSINTSTS_DMADONEIF_Msk)
-        {
-            if (USBD->DMACTL & 0x10) /* IN - Read */
-            {
-                if (g_usbd_ShortPkt)
-                {
-                    uint32_t ep_hw_index = NU_EPL2EPH((USBD->DMACTL & 0xF));
-                    USBD_SET_EP_SHORT_PACKET(ep_hw_index);
-                    g_usbd_ShortPkt = 0;
-                }
-            }
-            USBD_CLR_BUS_INT_FLAG(USBD_BUSINTSTS_DMADONEIF_Msk);
-        }
-
-        /* PHY clock available */
-        if (busintsts & USBD_BUSINTSTS_PHYCLKVLDIF_Msk)
-        {
-            USBD_CLR_BUS_INT_FLAG(USBD_BUSINTSTS_PHYCLKVLDIF_Msk);
-        }
-
-        /* VBUS plug-in */
-        if (busintsts & USBD_BUSINTSTS_VBUSDETIF_Msk)
-        {
-            if (USBD_IS_ATTACHED())
-            {
-                // USB plug-in
-                USBD_ENABLE_USB();
-            }
-            else
-            {
-                // USB unplug-out
-                USBD_DISABLE_USB();
-            }
-            USBD_CLR_BUS_INT_FLAG(USBD_BUSINTSTS_VBUSDETIF_Msk);
-        }
-    }
-
-    /* CEP interrupts */
-    if (gintsts & USBD_GINTSTS_CEPIF_Msk)
-    {
-        uint32_t cepintsts =  USBD->CEPINTSTS & USBD->CEPINTEN;
-
-        /* SETUP token packet */
-        if (cepintsts & USBD_CEPINTSTS_SETUPTKIF_Msk)
-        {
-            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_SETUPTKIF_Msk);
-            return;
-        }
-
-        /* SETUP transaction */
-        if (cepintsts & USBD_CEPINTSTS_SETUPPKIF_Msk)
-        {
-            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_SETUPPKIF_Msk);
-            EP0setupCallback();
-            return;
-        }
-
-        /* OUT token packet */
-        if (cepintsts & USBD_CEPINTSTS_OUTTKIF_Msk)
-        {
-            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_OUTTKIF_Msk);
-            USBD_ENABLE_CEP_INT(USBD_CEPINTEN_STSDONEIEN_Msk);
-            return;
-        }
-
-        /* IN token packet */
-        if (cepintsts & USBD_CEPINTSTS_INTKIF_Msk)
-        {
-            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_INTKIF_Msk);
-            if (!(cepintsts & USBD_CEPINTSTS_STSDONEIF_Msk))
-            {
-                USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_TXPKIF_Msk);
-                USBD_ENABLE_CEP_INT(USBD_CEPINTEN_TXPKIEN_Msk);
-                USBD_CtrlInput();
-            }
-            else
-            {
-                USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_TXPKIF_Msk);
-                USBD_ENABLE_CEP_INT(USBD_CEPINTEN_TXPKIEN_Msk|USBD_CEPINTEN_STSDONEIEN_Msk);
-            }
-            return;
-        }
-
-        /* PING packet */
-        if (cepintsts & USBD_CEPINTSTS_PINGIF_Msk)
-        {
-            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_PINGIF_Msk);
-            return;
-        }
-
-        /* IN transaction */
-        if (cepintsts & USBD_CEPINTSTS_TXPKIF_Msk)
-        {
-            EP0in();
-            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_TXPKIF_Msk);
-            return;
-        }
-
-        /* OUT transaction */
-        if (cepintsts & USBD_CEPINTSTS_RXPKIF_Msk)
-        {
-            EP0out();
-            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_RXPKIF_Msk);
-            return;
-        }
-
-        /* NAK handshake packet */
-        if (cepintsts & USBD_CEPINTSTS_NAKIF_Msk)
-        {
-            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_NAKIF_Msk);
-            return;
-        }
-
-        /* STALL handshake packet */
-        if (cepintsts & USBD_CEPINTSTS_STALLIF_Msk)
-        {
-            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_STALLIF_Msk);
-            return;
-        }
-
-        /* ERR special packet */
-        if (cepintsts & USBD_CEPINTSTS_ERRIF_Msk)
-        {
-            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_ERRIF_Msk);
-            return;
-        }
-
-        /* Status stage transaction */
-        if (cepintsts & USBD_CEPINTSTS_STSDONEIF_Msk)
-        {
-            if (s_usb_addr)
-            {
-                USBD_SET_ADDR(s_usb_addr);
-                s_usb_addr = 0;
-            }
-            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_STSDONEIF_Msk);
-            USBD_ENABLE_CEP_INT(USBD_CEPINTEN_SETUPPKIEN_Msk);
-            return;
-        }
-
-        /* Buffer Full */
-        if (cepintsts & USBD_CEPINTSTS_BUFFULLIF_Msk)
-        {
-            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_BUFFULLIF_Msk);
-            return;
-        }
-
-        /* Buffer Empty */
-        if (cepintsts & USBD_CEPINTSTS_BUFEMPTYIF_Msk)
-        {
-            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_BUFEMPTYIF_Msk);
-            return;
-        }
-    }
-    /* EPA, EPB, EPC, ... EPL interrupts */
-    uint32_t gintsts_epx = gintsts >> 2;
-    uint32_t ep_hw_index = 0;
-    while (gintsts_epx) {
-        if (gintsts_epx & 0x01)
-        {
-            uint32_t epxintsts = USBD_GET_EP_INT_FLAG(ep_hw_index) & USBD_GET_EP_INT_EN(ep_hw_index);
-
-            USBD_CLR_EP_INT_FLAG(ep_hw_index, epxintsts);
-
-            /* Buffer Full */
-            if (epxintsts & USBD_EPINTSTS_BUFFULLIF_Msk)
-            {
-            }
-
-            /* Buffer Empty */
-            if (epxintsts & USBD_EPINTSTS_BUFEMPTYIF_Msk)
-            {
-            }
-
-            /* Short Packet Transferred */
-            if (epxintsts & USBD_EPINTSTS_SHORTTXIF_Msk)
-            {
-            }
-
-            /* Data Packet Transmitted */
-            if (epxintsts & USBD_EPINTSTS_TXPKIF_Msk)
-            {
-                s_ep_compl &= ~(1 << (NU_EPH2EPL(ep_hw_index)));
-                if ((instance->*(epCallback[ep_hw_index]))())
-                {
-                }
-            }
-
-            /* Data Packet Received */
-            if (epxintsts & USBD_EPINTSTS_RXPKIF_Msk)
-            {
-                if ((instance->*(epCallback[ep_hw_index]))())
-                {
-
-                }
-            }
-
-            /* OUT token packet */
-            if (epxintsts & USBD_EPINTSTS_OUTTKIF_Msk)
-            {
-            }
-
-            /* IN token packet */
-            if (epxintsts & USBD_EPINTSTS_INTKIF_Msk)
-            {
-            }
-
-            /* PING packet */
-            if (epxintsts & USBD_EPINTSTS_PINGIF_Msk)
-            {
-            }
-
-            /* NAK handshake packet sent to Host */
-            if (epxintsts & USBD_EPINTSTS_NAKIF_Msk)
-            {
-            }
-
-            /* STALL handshake packet sent to Host */
-            if (epxintsts & USBD_EPINTSTS_STALLIF_Msk)
-            {
-            }
-
-            /* NYET handshake packet sent to Host */
-            if (epxintsts & USBD_EPINTSTS_NYETIF_Msk)
-            {
-            }
-
-            /* ERR packet sent to Host */
-            if (epxintsts & USBD_EPINTSTS_ERRIF_Msk)
-            {
-            }
-
-            /* Bulk Out Short Packet Received */
-            if (epxintsts & USBD_EPINTSTS_SHORTRXIF_Msk)
-            {
-            }
-        }
-        gintsts_epx = gintsts_epx >> 1;
-        ep_hw_index++;
-    }
-}
-#endif
-
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/USBHAL_RZ_A1H.cpp
--- a/USBDevice/USBHAL_RZ_A1H.cpp	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1497 +0,0 @@
-/* Copyright (c) 2010-2011 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or
-* sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the
-* Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-* KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-* WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-* PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#if defined(TARGET_RZ_A1H) || defined(TARGET_VK_RZ_A1H)
-
-/*
-  This class can use the pipe1, pipe3 and pipe6 only. You should
-  re-program this class if you wanted to use other pipe.
- */
-
-/*************************************************************************/
-extern "C"
-{
-#include "r_typedefs.h"
-#include "iodefine.h"
-}
-#include "USBHAL.h"
-#include "devdrv_usb_function_api.h"
-#include "usb_iobitmask.h"
-#include "rza_io_regrw.h"
-#include "USBDevice_Types.h"
-#include "usb_function_setting.h"
-
-
-/*************************************************************************/
-/* constants */
-const struct PIPECFGREC {
-    uint16_t    endpoint;
-    uint16_t    pipesel;
-    uint16_t    pipecfg;
-    uint16_t    pipebuf;
-    uint16_t    pipemaxp;
-    uint16_t    pipeperi;
-} def_pipecfg[] = {
-    /*EP0OUT and EP0IN are configured by USB IP*/
-    {
-        EP1OUT, /*EP1: Host -> Func, INT*/
-        6 | USB_FUNCTION_D0FIFO_USE,
-        USB_FUNCTION_INTERRUPT |
-        USB_FUNCTION_BFREOFF   |
-        USB_FUNCTION_DBLBOFF   |
-        USB_FUNCTION_CNTMDON   |
-        USB_FUNCTION_SHTNAKOFF |
-        USB_FUNCTION_DIR_P_OUT |
-        USB_FUNCTION_EP1,
-        ( ( (  64) / 64 - 1 ) << 10 ) | 0x04u,
-        MAX_PACKET_SIZE_EP1,
-        DEVDRV_USBF_OFF |
-        ( 3 << USB_PIPEPERI_IITV_SHIFT ),
-    },
-    {
-        EP1IN,  /*EP1: Host <- Func, INT*/
-        7 | USB_FUNCTION_D1FIFO_USE,
-        USB_FUNCTION_INTERRUPT |
-        USB_FUNCTION_BFREOFF   |
-        USB_FUNCTION_DBLBOFF   |
-        USB_FUNCTION_CNTMDOFF  |
-        USB_FUNCTION_SHTNAKOFF |
-        USB_FUNCTION_DIR_P_IN  |
-        USB_FUNCTION_EP1,
-        ( ( (  64) / 64 - 1 ) << 10 ) | 0x05u,
-        MAX_PACKET_SIZE_EP1,
-        DEVDRV_USBF_OFF |
-        ( 3 << USB_PIPEPERI_IITV_SHIFT ),
-    },
-    {
-        EP2OUT, /*EP2: Host -> Func, BULK*/
-        3 | USB_FUNCTION_D0FIFO_USE,
-        USB_FUNCTION_BULK      |
-        USB_FUNCTION_BFREOFF   |
-        USB_FUNCTION_DBLBON    |
-        USB_FUNCTION_CNTMDON   |
-        USB_FUNCTION_SHTNAKON  |
-        USB_FUNCTION_DIR_P_OUT |
-        USB_FUNCTION_EP2,
-        ( ( (2048) / 64 - 1 ) << 10 ) | 0x30u,
-        MAX_PACKET_SIZE_EP2,
-        DEVDRV_USBF_OFF |
-        ( 0 << USB_PIPEPERI_IITV_SHIFT ),
-    },
-    {
-        EP2IN,  /*EP2: Host <- Func, BULK*/
-        4 | USB_FUNCTION_D1FIFO_USE,
-        USB_FUNCTION_BULK      |
-        USB_FUNCTION_BFREOFF   |
-        USB_FUNCTION_DBLBOFF   |
-        USB_FUNCTION_CNTMDON   |
-        USB_FUNCTION_SHTNAKOFF |
-        USB_FUNCTION_DIR_P_IN  |
-        USB_FUNCTION_EP2,
-        ( ( (2048) / 64 - 1 ) << 10 ) | 0x50u,
-        MAX_PACKET_SIZE_EP2,
-        DEVDRV_USBF_OFF |
-        ( 0 << USB_PIPEPERI_IITV_SHIFT ),
-    },
-    {
-        EP3OUT, /*EP3: Host -> Func, ISO*/
-        1 | USB_FUNCTION_D0FIFO_USE,
-        USB_FUNCTION_ISO       |
-        USB_FUNCTION_BFREOFF   |
-        USB_FUNCTION_DBLBON    |
-        USB_FUNCTION_CNTMDOFF  |
-        USB_FUNCTION_SHTNAKON  |
-        USB_FUNCTION_DIR_P_OUT |
-        USB_FUNCTION_EP3,
-        ( ( ( 512) / 64 - 1 ) << 10 ) | 0x10u,
-        MAX_PACKET_SIZE_EP3,
-        DEVDRV_USBF_OFF |
-        ( 0 << USB_PIPEPERI_IITV_SHIFT ),
-    },
-    {
-        EP3IN,  /*EP3: Host <- Func, ISO*/
-        2 | USB_FUNCTION_D1FIFO_USE,
-        USB_FUNCTION_ISO       |
-        USB_FUNCTION_BFREOFF   |
-        USB_FUNCTION_DBLBON    |
-        USB_FUNCTION_CNTMDOFF  |
-        USB_FUNCTION_SHTNAKOFF |
-        USB_FUNCTION_DIR_P_IN  |
-        USB_FUNCTION_EP3,
-        ( ( ( 512) / 64 - 1 ) << 10 ) | 0x20u,
-        MAX_PACKET_SIZE_EP3,
-        DEVDRV_USBF_OFF |
-        ( 0 << USB_PIPEPERI_IITV_SHIFT ),
-    },
-    { /*terminator*/
-        0, 0, 0, 0, 0,
-    },
-};
-
-
-/*************************************************************************/
-/* workareas */
-USBHAL * USBHAL::instance;
-
-static IRQn_Type    int_id;         /* interrupt ID          */
-static uint16_t     int_level;      /* initerrupt level      */
-static uint16_t     clock_mode;     /* input clock selector  */
-static uint16_t     mode;           /* USB speed (HIGH/FULL) */
-
-//static DigitalOut *usbx_en;
-
-static uint16_t     EP0_read_status;
-static uint16_t     EPx_read_status;
-
-static uint16_t setup_buffer[MAX_PACKET_SIZE_EP0 / 2];
-
-/* 0: not used / other: a pipe number to use recv_buffer*/
-static uint8_t  recv_buffer[MAX_PACKET_SIZE_EPBULK];
-volatile static uint16_t    recv_error;
-
-
-/*************************************************************************/
-/* prototypes for C */
-extern "C" {
-    void usbx_function_BRDYInterruptPIPE0 (uint16_t status, uint16_t intenb,
-        USBHAL *object, void (USBHAL::*EP0func)(void));
-
-    void usbx_function_BRDYInterrupt (uint16_t status, uint16_t intenb,
-        USBHAL *object, bool (USBHAL::*epCallback[])(void));
-
-    void usbx_function_NRDYInterruptPIPE0(uint16_t status, uint16_t intenb,
-        USBHAL *object, void (USBHAL::*EP0func)(void));
-
-    void usbx_function_NRDYInterrupt (uint16_t status, uint16_t intenb,
-        USBHAL *object, bool (USBHAL::*epCallback[])(void));
-
-    void usbx_function_BEMPInterruptPIPE0(uint16_t status, uint16_t intenb,
-        USBHAL *object, void (USBHAL::*EP0func)(void));
-
-    void usbx_function_BEMPInterrupt (uint16_t status, uint16_t intenb,
-        USBHAL *object, bool (USBHAL::*epCallback[])(void));
-}
-
-
-/*************************************************************************/
-/* macros */
-
-/******************************************************************************
- * Function Name: usbx_function_BRDYInterruptPIPE0
- * Description  : Executes BRDY interrupt for pipe0.
- * Arguments    : uint16_t status       ; BRDYSTS Register Value
- *              : uint16_t intenb       ; BRDYENB Register Value
- * Return Value : none
- *****************************************************************************/
-extern "C" {
-    void usbx_function_BRDYInterruptPIPE0 (
-        uint16_t status,
-        uint16_t intenb,
-        USBHAL *object,
-        void (USBHAL::*EP0func)(void)
-    )
-    {
-        volatile uint16_t dumy_sts;
-        uint16_t read_status;
-
-        USB20X.BRDYSTS =
-            (uint16_t)~g_usbx_function_bit_set[USB_FUNCTION_PIPE0];
-        RZA_IO_RegWrite_16(
-            &USB20X.CFIFOSEL, USB_FUNCTION_PIPE0,
-            USB_CFIFOSEL_CURPIPE_SHIFT, USB_CFIFOSEL_CURPIPE);
-
-        g_usbx_function_PipeDataSize[USB_FUNCTION_PIPE0] =
-            g_usbx_function_data_count[USB_FUNCTION_PIPE0];
-
-        read_status = usbx_function_read_buffer_c(USB_FUNCTION_PIPE0);
-
-        g_usbx_function_PipeDataSize[USB_FUNCTION_PIPE0] -=
-            g_usbx_function_data_count[USB_FUNCTION_PIPE0];
-
-        switch (read_status) {
-            case USB_FUNCTION_READING:      /* Continue of data read */
-            case USB_FUNCTION_READEND:      /* End of data read */
-                /* PID = BUF */
-                usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);
-
-                /*callback*/
-                (object->*EP0func)();
-                break;
-
-            case USB_FUNCTION_READSHRT:     /* End of data read */
-                usbx_function_disable_brdy_int(USB_FUNCTION_PIPE0);
-                /* PID = BUF */
-                usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);
-
-                /*callback*/
-                (object->*EP0func)();
-                break;
-
-            case USB_FUNCTION_READOVER:     /* FIFO access error */
-                /* Buffer Clear */
-                USB20X.CFIFOCTR = USB_FUNCTION_BITBCLR;
-                usbx_function_disable_brdy_int(USB_FUNCTION_PIPE0);
-                /* Req Error */
-                usbx_function_set_pid_stall(USB_FUNCTION_PIPE0);
-
-                /*callback*/
-                (object->*EP0func)();
-                break;
-
-            case DEVDRV_USBF_FIFOERROR:     /* FIFO access error */
-            default:
-                usbx_function_disable_brdy_int(USB_FUNCTION_PIPE0);
-                /* Req Error */
-                usbx_function_set_pid_stall(USB_FUNCTION_PIPE0);
-                break;
-        }
-        /* Three dummy reads for clearing interrupt requests */
-        dumy_sts = USB20X.BRDYSTS;
-    }
-}
-
-
-/******************************************************************************
- * Function Name: usbx_function_BRDYInterrupt
- * Description  : Executes BRDY interrupt uxclude pipe0.
- * Arguments    : uint16_t status       ; BRDYSTS Register Value
- *              : uint16_t intenb       ; BRDYENB Register Value
- * Return Value : none
- *****************************************************************************/
-extern "C" {
-    void usbx_function_BRDYInterrupt(
-        uint16_t status,
-        uint16_t intenb,
-        USBHAL *object,
-        bool (USBHAL::*epCallback[])(void)
-    )
-    {
-        volatile uint16_t dumy_sts;
-
-        /**************************************************************
-         * Function Name: usbx_function_brdy_int
-         * Description  : Executes BRDY interrupt(USB_FUNCTION_PIPE1-9).
-         *              : According to the pipe that interrupt is generated in,
-         *              : reads/writes buffer allocated in the pipe.
-         *              : This function is executed in the BRDY
-         *              : interrupt handler.  This function
-         *              : clears BRDY interrupt status and BEMP
-         *              : interrupt status.
-         * Arguments    : uint16_t Status    ; BRDYSTS Register Value
-         *              : uint16_t Int_enbl  ; BRDYENB Register Value
-         * Return Value : none
-         *************************************************************/
-        /* copied from usbx_function_intrn.c */
-        uint32_t int_sense = 0;
-        uint16_t pipe;
-        uint16_t pipebit;
-        uint16_t ep;
-
-        for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++) {
-            pipebit = g_usbx_function_bit_set[pipe];
-
-            if ((status & pipebit) && (intenb & pipebit)) {
-                USB20X.BRDYSTS = (uint16_t)~pipebit;
-                USB20X.BEMPSTS = (uint16_t)~pipebit;
-
-                switch (g_usbx_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) {
-                    case USB_FUNCTION_D0FIFO_DMA:
-                        if (g_usbx_function_DmaStatus[USB_FUNCTION_D0FIFO] != USB_FUNCTION_DMA_READY) {
-                            /*now, DMA is not supported*/
-                            usbx_function_dma_interrupt_d0fifo(int_sense);
-                        }
-
-                        if (RZA_IO_RegRead_16(
-                                &g_usbx_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0) {
-                            /*now, DMA is not supported*/
-                            usbx_function_read_dma(pipe);
-                            usbx_function_disable_brdy_int(pipe);
-                        } else {
-                            USB20X.D0FIFOCTR = USB_FUNCTION_BITBCLR;
-                            g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                        }
-                        break;
-
-                    case USB_FUNCTION_D1FIFO_DMA:
-                        if (g_usbx_function_DmaStatus[USB_FUNCTION_D1FIFO] != USB_FUNCTION_DMA_READY) {
-                            /*now, DMA is not supported*/
-                            usbx_function_dma_interrupt_d1fifo(int_sense);
-                        }
-
-                        if (RZA_IO_RegRead_16(
-                                &g_usbx_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0) {
-                            /*now, DMA is not supported*/
-                            usbx_function_read_dma(pipe);
-                            usbx_function_disable_brdy_int(pipe);
-                        } else {
-                            USB20X.D1FIFOCTR = USB_FUNCTION_BITBCLR;
-                            g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-                        }
-                        break;
-
-                    default:
-                        ep = (g_usbx_function_pipecfg[pipe] & USB_PIPECFG_EPNUM) >> USB_PIPECFG_EPNUM_SHIFT;
-                        ep <<= 1;
-                        if (RZA_IO_RegRead_16(
-                                &g_usbx_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0) {
-                            /* read */
-                            EPx_read_status = DEVDRV_USBF_PIPE_WAIT;
-                            (object->*(epCallback[ep - 2])) ();
-                            EPx_read_status = DEVDRV_USBF_PIPE_DONE;
-                        } else {
-                            /* write */
-                            EPx_read_status = DEVDRV_USBF_PIPE_WAIT;
-                            (object->*(epCallback[ep - 2 + 1])) ();
-                            EPx_read_status = DEVDRV_USBF_PIPE_DONE;
-                            usbx_function_write_buffer(pipe);
-                        }
-                }
-            }
-        }
-        /* Three dummy reads for clearing interrupt requests */
-        dumy_sts = USB20X.BRDYSTS;
-    }
-}
-
-
-/******************************************************************************
- * Function Name: usbx_function_NRDYInterruptPIPE0
- * Description  : Executes NRDY interrupt for pipe0.
- * Arguments    : uint16_t status       ; NRDYSTS Register Value
- *              : uint16_t intenb       ; NRDYENB Register Value
- * Return Value : none
- *****************************************************************************/
-extern "C" {
-    void usbx_function_NRDYInterruptPIPE0(
-        uint16_t status,
-        uint16_t intenb,
-        USBHAL *object,
-        void (USBHAL::*EP0func)(void)
-    )
-    {
-        volatile uint16_t dumy_sts;
-
-        USB20X.NRDYSTS =
-            (uint16_t)~g_usbx_function_bit_set[USB_FUNCTION_PIPE0];
-
-        /* Three dummy reads for clearing interrupt requests */
-        dumy_sts = USB20X.NRDYSTS;
-    }
-}
-
-
-/******************************************************************************
- * Function Name: usbx_function_NRDYInterrupt
- * Description  : Executes NRDY interrupt exclude pipe0.
- * Arguments    : uint16_t status       ; NRDYSTS Register Value
- *              : uint16_t intenb       ; NRDYENB Register Value
- * Return Value : none
- *****************************************************************************/
-extern "C" {
-    void usbx_function_NRDYInterrupt(
-        uint16_t status,
-        uint16_t intenb,
-        USBHAL *object,
-        bool (USBHAL::*epCallback[])(void)
-    )
-    {
-        volatile uint16_t dumy_sts;
-
-        /**************************************************************
-         * Function Name: usbx_function_nrdy_int
-         * Description  : Executes NRDY interrupt(USB_FUNCTION_PIPE1-9).
-         *              : Checks NRDY interrupt cause by PID. When the cause if STALL,
-         *              : regards the pipe state as STALL and ends the processing.
-         *              : Then the cause is not STALL, increments the error count to
-         *              : communicate again. When the error count is 3, determines
-         *              : the pipe state as DEVDRV_USBF_PIPE_NORES and ends the processing.
-         *              : This function is executed in the NRDY interrupt handler.
-         *              : This function clears NRDY interrupt status.
-         * Arguments    : uint16_t status       ; NRDYSTS Register Value
-         *              : uint16_t int_enb      ; NRDYENB Register Value
-         * Return Value : none
-         *************************************************************/
-        /* copied from usbx_function_intrn.c */
-#if 0
-        uint16_t usefifo;
-#endif
-        uint16_t pid;
-        uint16_t pipe;
-        uint16_t bitcheck;
-#if 0
-        uint16_t mbw;
-        uint32_t size;
-#endif
-        uint16_t ep;
-
-        bitcheck = (uint16_t)(status & intenb);
-
-        USB20X.NRDYSTS = (uint16_t)~status;
-
-
-        if (RZA_IO_RegRead_16(&USB20X.SYSCFG0, USB_SYSCFG_DCFM_SHIFT, USB_SYSCFG_DCFM) == 1) {
-            /* USB HOST */
-            /* not support */
-
-        } else {
-            /* USB Function */
-            for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++) {
-                if ((bitcheck&g_usbx_function_bit_set[pipe]) != g_usbx_function_bit_set[pipe]) {
-                    continue;
-                }
-
-                if (g_usbx_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_WAIT) {
-                    continue;
-                }
-
-#if 0
-                usbx_function_set_pid_nak(pipe);
-
-                size = (uint32_t)g_usbx_function_data_count[pipe];
-                mbw = usbx_function_get_mbw(
-                    size, (uint32_t)g_usbx_function_data_pointer[pipe]);
-
-                usefifo = (uint16_t)(g_usbx_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-                switch (usefifo) {
-
-                    case USB_FUNCTION_D0FIFO_USE:
-                        usbx_function_set_curpipe(
-                            pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
-                        USB20X.D0FIFOCTR = USB_FUNCTION_BITBCLR;
-                        break;
-
-                    case USB_FUNCTION_D1FIFO_USE:
-                        usbx_function_set_curpipe(
-                            pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
-                        USB20X.D1FIFOCTR = USB_FUNCTION_BITBCLR;
-                        break;
-
-                    default:
-                        usbx_function_set_curpipe(
-                            pipe, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_READ, mbw);
-                        USB20X.CFIFOCTR = USB_FUNCTION_BITBCLR;
-                        break;
-                }
-
-                usbx_function_aclrm(pipe);
-
-                usbx_function_enable_nrdy_int(pipe);
-                usbx_function_enable_brdy_int(pipe);
-
-                usbx_function_set_pid_buf(pipe);
-#endif
-
-                pid = usbx_function_get_pid(pipe);
-                if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2)) {
-                    g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
-                } else {
-                    usbx_function_set_pid_buf(pipe);
-                }
-
-                ep = (g_usbx_function_pipecfg[pipe] & USB_PIPECFG_EPNUM) >> USB_PIPECFG_EPNUM_SHIFT;
-                ep <<= 1;
-                if (RZA_IO_RegRead_16(
-                        &g_usbx_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0) {
-                    /* read */
-                    __NOP();
-                } else {
-                    /* write */
-                    __NOP();
-                }
-            }
-        }
-
-        /* Three dummy reads for clearing interrupt requests */
-        dumy_sts = USB20X.NRDYSTS;
-    }
-}
-
-/******************************************************************************
- * Function Name: usbx_function_BEMPInterruptPIPE0
- * Description  : Executes BEMP interrupt for pipe0.
- * Arguments    : uint16_t status       ; BEMPSTS Register Value
- *              : uint16_t intenb       ; BEMPENB Register Value
- * Return Value : none
- *****************************************************************************/
-extern "C" {
-    void usbx_function_BEMPInterruptPIPE0(
-        uint16_t status,
-        uint16_t intenb,
-        USBHAL *object,
-        void (USBHAL::*EP0func)(void)
-    )
-    {
-        volatile uint16_t dumy_sts;
-
-        USB20X.BEMPSTS =
-            (uint16_t)~g_usbx_function_bit_set[USB_FUNCTION_PIPE0];
-        RZA_IO_RegWrite_16(
-            &USB20X.CFIFOSEL, USB_FUNCTION_PIPE0,
-            USB_CFIFOSEL_CURPIPE_SHIFT, USB_CFIFOSEL_CURPIPE);
-
-        /*usbx_function_write_buffer_c(USB_FUNCTION_PIPE0);*/
-        (object->*EP0func)();
-
-        /* Three dummy reads for clearing interrupt requests */
-        dumy_sts = USB20X.BEMPSTS;
-    }
-}
-
-
-/******************************************************************************
- * Function Name: usbx_function_BEMPInterrupt
- * Description  : Executes BEMP interrupt exclude pipe0.
- * Arguments    : uint16_t status       ; BEMPSTS Register Value
- *              : uint16_t intenb       ; BEMPENB Register Value
- * Return Value : none
- *****************************************************************************/
-extern "C" {
-    void usbx_function_BEMPInterrupt(
-        uint16_t status,
-        uint16_t intenb,
-        USBHAL *object,
-        bool (USBHAL::*epCallback[])(void)
-    )
-    {
-        volatile uint16_t dumy_sts;
-
-        /**************************************************************
-         * Function Name: usbx_function_bemp_int
-         * Description  : Executes BEMP interrupt(USB_FUNCTION_PIPE1-9).
-         * Arguments    : uint16_t status       ; BEMPSTS Register Value
-         *              : uint16_t intenb      ; BEMPENB Register Value
-         * Return Value : none
-         *************************************************************/
-        /* copied from usbx_function_intrn.c */
-        uint16_t pid;
-        uint16_t pipe;
-        uint16_t bitcheck;
-        uint16_t inbuf;
-        uint16_t ep;
-
-        bitcheck = (uint16_t)(status & intenb);
-
-        USB20X.BEMPSTS = (uint16_t)~status;
-
-        for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++) {
-            if ((bitcheck&g_usbx_function_bit_set[pipe]) != g_usbx_function_bit_set[pipe]) {
-                continue;
-            }
-
-            pid = usbx_function_get_pid(pipe);
-
-            if ((pid == DEVDRV_USBF_PID_STALL) ||
-                (pid == DEVDRV_USBF_PID_STALL2)) {
-                g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
-
-            } else {
-                inbuf = usbx_function_get_inbuf(pipe);
-
-                if (inbuf == 0) {
-                    usbx_function_disable_bemp_int(pipe);
-                    usbx_function_set_pid_nak(pipe);
-                    g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-
-                    switch (g_usbx_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) {
-                        case USB_FUNCTION_D0FIFO_DMA:
-                            /*now, DMA is not supported*/
-                            break;
-
-                        case USB_FUNCTION_D1FIFO_DMA:
-                            /*now, DMA is not supported*/
-                            break;
-
-                        default:
-                            ep = (g_usbx_function_pipecfg[pipe] & USB_PIPECFG_EPNUM) >> USB_PIPECFG_EPNUM_SHIFT;
-                            ep <<= 1;
-                            if (RZA_IO_RegRead_16(
-                                    &g_usbx_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0) {
-                                /* read */
-                                __NOP();
-                            } else {
-                                /* write */
-                                EPx_read_status = DEVDRV_USBF_PIPE_WAIT;
-                                (object->*(epCallback[ep - 2 + 1])) ();
-                                EPx_read_status = DEVDRV_USBF_PIPE_DONE;
-                            }
-                    }
-                }
-            }
-        }
-
-        /* Three dummy reads for clearing interrupt requests */
-        dumy_sts = USB20X.BEMPSTS;
-    }
-}
-
-/******************************************************************************
- * Function Name: EP2PIPE
- * Description  : Converts from endpoint to pipe
- * Arguments    : number of endpoint
- * Return Value : number of pipe
- *****************************************************************************/
-/*EP2PIPE converter is for pipe1, pipe3 and pipe6 only.*/
-#define EP2PIPE(endpoint)   ((uint32_t)usbx_function_EpToPipe(endpoint))
-
-
-/******************************************************************************
- * Function Name: usbx_function_save_request
- * Description  : Retains the USB request information in variables.
- * Arguments    : none
- * Return Value : none
- *****************************************************************************/
-#define  usbx_function_save_request()                       \
-    {                                                       \
-        uint16_t *bufO = &setup_buffer[0];                  \
-                                                            \
-        USB20X.INTSTS0 = (uint16_t)~USB_FUNCTION_BITVALID;  \
-        /*data[0] <= bmRequest, data[1] <= bmRequestType */ \
-        *bufO++ = USB20X.USBREQ;                            \
-        /*data[2] data[3] <= wValue*/                       \
-        *bufO++ = USB20X.USBVAL;                            \
-        /*data[4] data[5] <= wIndex*/                       \
-        *bufO++ = USB20X.USBINDX;                           \
-        /*data[6] data[6] <= wIndex*/                       \
-        *bufO++ = USB20X.USBLENG;                           \
-    }
-
-
-/*************************************************************************/
-/*************************************************************************/
-/*************************************************************************/
-
-/*************************************************************************/
-/* constructor */
-USBHAL::USBHAL(void)
-{
-    /* ---- P4_1 : P4_1 (USB0_EN for GR-PEACH) ---- */
-    //usbx_en = new DigitalOut(P4_1, 1);
-
-    /* some constants */
-    int_id          = USBIX_IRQn;
-    int_level       = ( 2 << 3 );
-    clock_mode      = USBFCLOCK_X1_48MHZ;
-#if (USB_FUNCTION_HISPEED == 0)
-    mode            = USB_FUNCTION_FULL_SPEED;
-#else
-    mode            = USB_FUNCTION_HIGH_SPEED;
-#endif
-    EP0_read_status = DEVDRV_USBF_WRITEEND;
-    EPx_read_status = DEVDRV_USBF_PIPE_DONE;
-
-    /* Disables interrupt for usb */
-    GIC_DisableIRQ(int_id);
-
-    /* Setup the end point */
-    epCallback[ 0] = &USBHAL::EP1_OUT_callback;
-    epCallback[ 1] = &USBHAL::EP1_IN_callback;
-    epCallback[ 2] = &USBHAL::EP2_OUT_callback;
-    epCallback[ 3] = &USBHAL::EP2_IN_callback;
-    epCallback[ 4] = &USBHAL::EP3_OUT_callback;
-    epCallback[ 5] = &USBHAL::EP3_IN_callback;
-    epCallback[ 6] = &USBHAL::EP4_OUT_callback;
-    epCallback[ 7] = &USBHAL::EP4_IN_callback;
-    epCallback[ 8] = &USBHAL::EP5_OUT_callback;
-    epCallback[ 9] = &USBHAL::EP5_IN_callback;
-    epCallback[10] = &USBHAL::EP6_OUT_callback;
-    epCallback[11] = &USBHAL::EP6_IN_callback;
-    epCallback[12] = &USBHAL::EP7_OUT_callback;
-    epCallback[13] = &USBHAL::EP7_IN_callback;
-    epCallback[14] = &USBHAL::EP8_OUT_callback;
-    epCallback[15] = &USBHAL::EP8_IN_callback;
-    epCallback[16] = &USBHAL::EP9_OUT_callback;
-    epCallback[17] = &USBHAL::EP9_IN_callback;
-    epCallback[18] = &USBHAL::EP10_OUT_callback;
-    epCallback[19] = &USBHAL::EP10_IN_callback;
-    epCallback[20] = &USBHAL::EP11_OUT_callback;
-    epCallback[21] = &USBHAL::EP11_IN_callback;
-    epCallback[22] = &USBHAL::EP12_OUT_callback;
-    epCallback[23] = &USBHAL::EP12_IN_callback;
-    epCallback[24] = &USBHAL::EP13_OUT_callback;
-    epCallback[25] = &USBHAL::EP13_IN_callback;
-    epCallback[26] = &USBHAL::EP14_OUT_callback;
-    epCallback[27] = &USBHAL::EP14_IN_callback;
-    epCallback[28] = &USBHAL::EP15_OUT_callback;
-    epCallback[29] = &USBHAL::EP15_IN_callback;
-
-    /* registers me */
-    instance = this;
-
-    /* Clear pipe table */
-    usbx_function_clear_pipe_tbl();
-
-/******************************************************************************
- * Function Name: usbx_api_function_init
- * Description  : Initializes the USB module in the USB function mode.
- *****************************************************************************/
-    /* The clock of USB0 modules is permitted */
-#if (USB_FUNCTION_CH == 0)
-    CPG.STBCR7 &= ~(CPG_STBCR7_MSTP71);
-#else
-    CPG.STBCR7 &= ~(CPG_STBCR7_MSTP71 | CPG_STBCR7_MSTP70);
-#endif
-    volatile uint8_t    dummy8;
-    dummy8 = CPG.STBCR7;
-
-    {
-/******************************************************************************
- * Function Name: usbx_function_setting_interrupt
- * Description  : Sets the USB module interrupt level.
- *****************************************************************************/
-#if 0   /*DMA is not supported*/
-        IRQn_Type d0fifo_dmaintid;
-        IRQn_Type d1fifo_dmaintid;
-#endif
-
-        InterruptHandlerRegister(int_id, &_usbisr);
-        GIC_SetPriority(int_id, int_level);
-        GIC_EnableIRQ(int_id);
-
-#if 0   /*DMA is not supported*/
-        d0fifo_dmaintid = Userdef_USB_usbx_function_d0fifo_dmaintid();
-        if (d0fifo_dmaintid != 0xFFFF) {
-            InterruptHandlerRegister(d0fifo_dmaintid, usbx_function_dma_interrupt_d0fifo);
-            GIC_SetPriority(d0fifo_dmaintid, int_level);
-            GIC_EnableIRQ(d0fifo_dmaintid);
-        }
-#endif
-
-#if 0   /*DMA is not supported*/
-        d1fifo_dmaintid = Userdef_USB_usbx_function_d1fifo_dmaintid();
-        if (d1fifo_dmaintid != 0xFFFF) {
-            InterruptHandlerRegister(d1fifo_dmaintid, usbx_function_dma_interrupt_d1fifo);
-            GIC_SetPriority(d1fifo_dmaintid, int_level);
-            GIC_EnableIRQ(d1fifo_dmaintid);
-        }
-#endif
-/*****************************************************************************/
-    }
-
-    /* reset USB module with setting tranciever and HSE=1 */
-    usbx_function_reset_module(clock_mode);
-
-    /* clear variables */
-    usbx_function_init_status();
-
-    /* select USB Function and Interrupt Enable */
-    /* Detect USB Device to attach or detach    */
-    usbx_function_InitModule(mode);
-
-    {
-        uint16_t buf;
-        buf  = USB20X.INTENB0;
-        buf |= USB_INTENB0_SOFE;
-        USB20X.INTENB0 = buf;
-    }
-}
-
-/*************************************************************************/
-USBHAL::~USBHAL(void)
-{
-    /* Disables interrupt for usb */
-    GIC_DisableIRQ( int_id );
-    /* Unregisters interrupt function and priority */
-    InterruptHandlerRegister( int_id, (uint32_t)NULL );
-
-    //usbx_en  = NULL;
-    instance = NULL;
-}
-
-/*************************************************************************/
-void USBHAL::connect(void)
-{
-    /* Activates USB0_EN */
-    //(*usbx_en) = 0;
-}
-
-
-/*************************************************************************/
-void USBHAL::disconnect(void)
-{
-    /* Deactivates USB0_EN */
-    //(*usbx_en) = 1;
-}
-
-
-/*************************************************************************/
-void USBHAL::configureDevice(void)
-{
-    /*The pipes set up in USBHAL::realiseEndpoint*/
-    /*usbx_function_clear_alt();*/      /* Alternate setting clear */
-    /*usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);*/
-}
-
-
-/*************************************************************************/
-void USBHAL::unconfigureDevice(void)
-{
-    /* The Interface would be managed by USBDevice */
-    /*usbx_function_clear_alt();*/      /* Alternate setting clear */
-    /*usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);*/
-}
-
-
-/*************************************************************************/
-void USBHAL::setAddress(uint8_t address)
-{
-    if (address <= 127) {
-        usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);      /* OK */
-    } else {
-        usbx_function_set_pid_stall(USB_FUNCTION_PIPE0);    /* Not Spec */
-    }
-}
-
-
-/*************************************************************************/
-bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t flags)
-{
-    const struct PIPECFGREC *cfg;
-    uint16_t pipe;
-    uint16_t buf;
-
-    if ( (EP0OUT == endpoint) || (EP0IN  == endpoint) ) {
-        return true;
-    }
-
-    for (cfg = &def_pipecfg[0]; cfg->pipesel != 0; cfg++) {
-        if (cfg->endpoint == endpoint) {
-            break;
-        }
-    }
-    if (cfg->pipesel == 0) {
-        return false;
-    }
-
-    pipe = ((cfg->pipesel & USB_PIPESEL_PIPESEL) >> USB_PIPESEL_PIPESEL_SHIFT);
-
-    g_usbx_function_PipeTbl[ pipe ] = (uint16_t)(endpoint | ((cfg->pipesel & USB_FUNCTION_FIFO_USE) << 0));
-
-    /* There are maintenance routine of SHTNAK and BFRE bits
-     * in original sample program. This sample is not
-     * programmed. Do maintenance the "def_pipecfg" array if
-     * you want it. */
-
-    /* Interrupt Disable */
-    buf  = USB20X.BRDYENB;
-    buf &= (uint16_t)~g_usbx_function_bit_set[pipe];
-    USB20X.BRDYENB = buf;
-    buf  = USB20X.NRDYENB;
-    buf &= (uint16_t)~g_usbx_function_bit_set[pipe];
-    USB20X.NRDYENB = buf;
-    buf  = USB20X.BEMPENB;
-    buf &= (uint16_t)~g_usbx_function_bit_set[pipe];
-    USB20X.BEMPENB = buf;
-
-    usbx_function_set_pid_nak(pipe);
-
-    /* CurrentPIPE Clear */
-    if (RZA_IO_RegRead_16(&USB20X.CFIFOSEL, USB_CFIFOSEL_CURPIPE_SHIFT, USB_CFIFOSEL_CURPIPE) == pipe) {
-        RZA_IO_RegWrite_16(&USB20X.CFIFOSEL, 0, USB_CFIFOSEL_CURPIPE_SHIFT, USB_CFIFOSEL_CURPIPE);
-    }
-
-    if (RZA_IO_RegRead_16(&USB20X.D0FIFOSEL, USB_DnFIFOSEL_CURPIPE_SHIFT, USB_DnFIFOSEL_CURPIPE) == pipe) {
-        RZA_IO_RegWrite_16(&USB20X.D0FIFOSEL, 0, USB_DnFIFOSEL_CURPIPE_SHIFT, USB_DnFIFOSEL_CURPIPE);
-    }
-
-    if (RZA_IO_RegRead_16(&USB20X.D1FIFOSEL, USB_DnFIFOSEL_CURPIPE_SHIFT, USB_DnFIFOSEL_CURPIPE) == pipe) {
-        RZA_IO_RegWrite_16(&USB20X.D1FIFOSEL, 0, USB_DnFIFOSEL_CURPIPE_SHIFT, USB_DnFIFOSEL_CURPIPE);
-    }
-
-    /* PIPE Configuration */
-    USB20X.PIPESEL  = pipe;
-    USB20X.PIPECFG  = cfg->pipecfg;
-    USB20X.PIPEBUF  = cfg->pipebuf;
-    USB20X.PIPEMAXP = cfg->pipemaxp;
-    USB20X.PIPEPERI = cfg->pipeperi;
-
-    g_usbx_function_pipecfg[pipe]  = cfg->pipecfg;
-    g_usbx_function_pipebuf[pipe]  = cfg->pipebuf;
-    g_usbx_function_pipemaxp[pipe] = cfg->pipemaxp;
-    g_usbx_function_pipeperi[pipe] = cfg->pipeperi;
-
-    /* Buffer Clear */
-    usbx_function_set_sqclr(pipe);
-    usbx_function_aclrm(pipe);
-
-    /* init Global */
-    g_usbx_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
-    g_usbx_function_PipeDataSize[pipe] = 0;
-
-    return true;
-}
-
-
-/*************************************************************************/
-// read setup packet
-void USBHAL::EP0setup(uint8_t *buffer)
-{
-    memcpy(buffer, setup_buffer, MAX_PACKET_SIZE_EP0);
-}
-
-
-/*************************************************************************/
-void USBHAL::EP0readStage(void)
-{
-    // No implements
-}
-
-
-/*************************************************************************/
-void USBHAL::EP0read(void)
-{
-    uint8_t *buffer;
-    uint32_t size;
-
-    /* remain of last writing */
-    while (EP0_read_status != DEVDRV_USBF_WRITEEND) {
-        static uint8_t bbb[2] = { 255, 255 };
-        EP0write(&bbb[0], 0);
-    }
-
-    buffer = (uint8_t*)(&setup_buffer[4]);
-    size   = (MAX_PACKET_SIZE_EP0 / 2) - 8;
-    usbx_api_function_CtrlWriteStart(size, buffer);
-}
-
-
-/*************************************************************************/
-uint32_t USBHAL::EP0getReadResult(uint8_t *buffer)
-{
-    memcpy(buffer, (uint8_t*)(&setup_buffer[4]), g_usbx_function_PipeDataSize[USB_FUNCTION_PIPE0]);
-
-    return g_usbx_function_PipeDataSize[USB_FUNCTION_PIPE0];
-}
-
-
-/*************************************************************************/
-void USBHAL::EP0write(uint8_t *buffer, uint32_t size)
-{
-    /* zero byte writing */
-    if ( (size == 0) && (EP0_read_status == DEVDRV_USBF_WRITEEND) ) {
-        return;
-    }
-
-    if (EP0_read_status == DEVDRV_USBF_WRITEEND) {
-        /*1st block*/
-        EP0_read_status = usbx_api_function_CtrlReadStart(size, buffer);
-    } else {
-        /* waits the last transmission */
-        /*other blocks*/
-        g_usbx_function_data_count[ USB_FUNCTION_PIPE0 ]    = size;
-        g_usbx_function_data_pointer [ USB_FUNCTION_PIPE0 ] = buffer;
-        EP0_read_status = usbx_function_write_buffer_c(USB_FUNCTION_PIPE0);
-    }
-    /*max size may be deblocking outside*/
-    if (size == MAX_PACKET_SIZE_EP0) {
-        EP0_read_status = DEVDRV_USBF_WRITING;
-    }
-}
-
-
-/*************************************************************************/
-#if 0   // No implements
-void USBHAL::EP0getWriteResult(void)
-{
-}
-#endif
-
-/*************************************************************************/
-void USBHAL::EP0stall(void)
-{
-    stallEndpoint( 0 );
-}
-
-
-/*************************************************************************/
-EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t max_size)
-{
-    uint32_t    pipe = EP2PIPE(endpoint);
-    uint32_t    pipe_size;
-    uint16_t    pipe_status;
-    EP_STATUS status = EP_COMPLETED;
-
-    pipe_status = usbx_api_function_check_pipe_status(pipe, &pipe_size);
-
-    switch (pipe_status) {
-        case DEVDRV_USBF_PIPE_IDLE:
-        case DEVDRV_USBF_PIPE_WAIT:
-            usbx_api_function_set_pid_nak(pipe);
-            usbx_api_function_clear_pipe_status(pipe);
-
-            usbx_api_function_start_receive_transfer(pipe, max_size, recv_buffer);
-            break;
-
-        default:
-            status = EP_PENDING;
-            break;
-    }
-
-    return status;
-}
-
-
-/*************************************************************************/
-EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t *buffer, uint32_t *bytes_read )
-{
-    uint32_t pipe = EP2PIPE(endpoint);
-    uint16_t pipe_status;
-    uint16_t err;
-    EP_STATUS status = EP_PENDING;
-
-
-    if (EPx_read_status != DEVDRV_USBF_PIPE_WAIT) {
-        return status;
-    }
-
-    pipe_status = usbx_api_function_check_pipe_status(pipe, bytes_read);
-    switch (pipe_status) {
-        case DEVDRV_USBF_PIPE_IDLE:
-            return EP_COMPLETED;
-
-        case DEVDRV_USBF_PIPE_DONE:
-            return EP_COMPLETED;
-
-        case DEVDRV_USBF_PIPE_WAIT:
-            break;
-
-        default:
-            return status;
-    }
-
-    /* sets the output buffer and size */
-    g_usbx_function_data_pointer[pipe] = buffer;
-
-    /* receives data from pipe */
-    err = usbx_function_read_buffer(pipe);
-    recv_error = err;
-    switch (err) {
-        case USB_FUNCTION_READEND:
-        case USB_FUNCTION_READSHRT:
-        case USB_FUNCTION_READOVER:
-            *bytes_read = g_usbx_function_PipeDataSize[pipe];
-            break;
-
-        case USB_FUNCTION_READING:
-        case DEVDRV_USBF_FIFOERROR:
-            break;
-    }
-
-    pipe_status = usbx_api_function_check_pipe_status(pipe, bytes_read);
-    switch (pipe_status) {
-        case DEVDRV_USBF_PIPE_DONE:
-            status = EP_COMPLETED;
-            break;
-
-        case DEVDRV_USBF_PIPE_IDLE:
-        case DEVDRV_USBF_PIPE_NORES:
-        case DEVDRV_USBF_PIPE_STALL:
-        case DEVDRV_USBF_FIFOERROR:
-        default:
-            break;
-    }
-
-    return status;
-}
-
-
-/*************************************************************************/
-EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size)
-{
-    uint32_t pipe = EP2PIPE(endpoint);
-    uint32_t pipe_size;
-    uint16_t pipe_status;
-    uint16_t err;
-    uint16_t count;
-    EP_STATUS status = EP_PENDING;
-
-    pipe_status = usbx_api_function_check_pipe_status(pipe, &pipe_size);
-
-    /* waits the last transmission */
-    count = 30000;
-    while ((pipe_status == DEVDRV_USBF_PIPE_WAIT) || (pipe_status == DEVDRV_USBF_PIPE_DONE)) {
-        pipe_status = usbx_api_function_check_pipe_status(pipe, &pipe_size);
-        if( --count == 0 ) {
-            pipe_status = DEVDRV_USBF_PIPE_STALL;
-            break;
-        }
-    }
-
-    switch (pipe_status) {
-        case DEVDRV_USBF_PIPE_IDLE:
-            err = usbx_api_function_start_send_transfer(pipe, size, data);
-
-            switch (err) {
-                    /* finish to write */
-                case DEVDRV_USBF_WRITEEND:
-                    /* finish to write, but data is short */
-                case DEVDRV_USBF_WRITESHRT:
-                    /* continue to write */
-                case DEVDRV_USBF_WRITING:
-                    /* use DMA */
-                case DEVDRV_USBF_WRITEDMA:
-                    /* error */
-                case DEVDRV_USBF_FIFOERROR:
-                    status = EP_PENDING;
-                    break;
-            }
-            break;
-
-        case DEVDRV_USBF_PIPE_WAIT:
-        case DEVDRV_USBF_PIPE_DONE:
-            status = EP_PENDING;
-            break;
-
-        case DEVDRV_USBF_PIPE_NORES:
-        case DEVDRV_USBF_PIPE_STALL:
-        default:
-            status = EP_STALLED;
-            break;
-    }
-
-    return status;
-}
-
-
-/*************************************************************************/
-EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint)
-{
-    uint32_t    pipe = EP2PIPE(endpoint);
-    uint32_t    pipe_size;
-    uint16_t    pipe_status;
-    EP_STATUS status = EP_PENDING;
-
-    pipe_status = usbx_api_function_check_pipe_status(pipe, &pipe_size);
-
-    switch (pipe_status) {
-        case DEVDRV_USBF_PIPE_IDLE:
-            status = EP_COMPLETED;
-            break;
-
-        case DEVDRV_USBF_PIPE_WAIT:
-            status = EP_PENDING;
-            break;
-
-        case DEVDRV_USBF_PIPE_DONE:
-            usbx_function_stop_transfer(pipe);
-            status = EP_COMPLETED;
-            break;
-
-        case DEVDRV_USBF_PIPE_NORES:
-            status = EP_STALLED;
-            break;
-
-        case DEVDRV_USBF_PIPE_STALL:
-            status = EP_STALLED;
-            break;
-
-        default:
-            status = EP_PENDING;
-    }
-
-    return status;
-}
-
-
-/*************************************************************************/
-void USBHAL::stallEndpoint(uint8_t endpoint)
-{
-    uint32_t pipe = EP2PIPE(endpoint);
-
-    usbx_function_clear_pid_stall(pipe);
-}
-
-
-/*************************************************************************/
-void USBHAL::unstallEndpoint(uint8_t endpoint)
-{
-    uint32_t pipe = EP2PIPE(endpoint);
-
-    usbx_function_set_pid_stall( pipe );
-}
-
-
-/*************************************************************************/
-bool USBHAL::getEndpointStallState(uint8_t endpoint)
-{
-    // No implemens
-    return false;
-}
-
-
-/*************************************************************************/
-#if 0   // No implements
-void USBHAL::remoteWakeup(void)
-{
-}
-#endif
-
-/*************************************************************************/
-void USBHAL::_usbisr(void)
-{
-    instance->usbisr();
-}
-
-
-/*************************************************************************/
-void USBHAL::usbisr(void)
-{
-    uint16_t            int_sts0;
-    uint16_t            int_sts1;
-    uint16_t            int_sts2;
-    uint16_t            int_sts3;
-    uint16_t            int_enb0;
-    uint16_t            int_enb2;
-    uint16_t            int_enb3;
-    uint16_t            int_enb4;
-    volatile uint16_t   dumy_sts;
-
-
-    int_sts0 = USB20X.INTSTS0;
-
-    if (!(int_sts0 & (
-                USB_FUNCTION_BITVBINT |
-                USB_FUNCTION_BITRESM  |
-                USB_FUNCTION_BITSOFR  |
-                USB_FUNCTION_BITDVST  |
-                USB_FUNCTION_BITCTRT  |
-                USB_FUNCTION_BITBEMP  |
-                USB_FUNCTION_BITNRDY  |
-                USB_FUNCTION_BITBRDY ))) {
-        return;
-    }
-
-    int_sts1 = USB20X.BRDYSTS;
-    int_sts2 = USB20X.NRDYSTS;
-    int_sts3 = USB20X.BEMPSTS;
-    int_enb0 = USB20X.INTENB0;
-    int_enb2 = USB20X.BRDYENB;
-    int_enb3 = USB20X.NRDYENB;
-    int_enb4 = USB20X.BEMPENB;
-
-    if ((int_sts0 & USB_FUNCTION_BITRESM) &&
-            (int_enb0 & USB_FUNCTION_BITRSME)) {
-        USB20X.INTSTS0 = (uint16_t)~USB_FUNCTION_BITRESM;
-        RZA_IO_RegWrite_16(&USB20X.INTENB0, 0, USB_INTENB0_RSME_SHIFT, USB_INTENB0_RSME);
-        /*usbx_function_USB_FUNCTION_Resume();*/
-        suspendStateChanged(1);
-    } else if (
-        (int_sts0 & USB_FUNCTION_BITVBINT) &&
-        (int_enb0 & USB_FUNCTION_BITVBSE)) {
-        USB20X.INTSTS0 = (uint16_t)~USB_FUNCTION_BITVBINT;
-
-        if (usbx_function_CheckVBUStaus() == DEVDRV_USBF_ON) {
-            usbx_function_USB_FUNCTION_Attach();
-        } else {
-            usbx_function_USB_FUNCTION_Detach();
-        }
-    } else if (
-        (int_sts0 & USB_FUNCTION_BITSOFR) &&
-        (int_enb0 & USB_FUNCTION_BITSOFE)) {
-        USB20X.INTSTS0 = (uint16_t)~USB_FUNCTION_BITSOFR;
-        SOF((USB20X.FRMNUM & USB_FRMNUM_FRNM) >> USB_FRMNUM_FRNM_SHIFT);
-    } else if (
-        (int_sts0 & USB_FUNCTION_BITDVST) &&
-        (int_enb0 & USB_FUNCTION_BITDVSE)) {
-        USB20X.INTSTS0 = (uint16_t)~USB_FUNCTION_BITDVST;
-        switch (int_sts0 & USB_FUNCTION_BITDVSQ) {
-            case USB_FUNCTION_DS_POWR:
-                break;
-
-            case USB_FUNCTION_DS_DFLT:
-                /*****************************************************************************
-                 * Function Name: usbx_function_USB_FUNCTION_BusReset
-                 * Description  : This function is executed when the USB device is transitioned
-                 *              : to POWERD_STATE. Sets the device descriptor according to the
-                 *              : connection speed determined by the USB reset hand shake.
-                 * Arguments    : none
-                 * Return Value : none
-                 *****************************************************************************/
-                usbx_function_init_status();            /* memory clear */
-
-#if 0
-                /* You would program those steps in USBCallback_busReset
-                 * if the system need the comment out steps.
-                 */
-
-                if (usbx_function_is_hispeed() == USB_FUNCTION_HIGH_SPEED) {
-                    /* Device Descriptor reset */
-                    usbx_function_ResetDescriptor(USB_FUNCTION_HIGH_SPEED);
-                } else {
-                    /* Device Descriptor reset */
-                    usbx_function_ResetDescriptor(USB_FUNCTION_FULL_SPEED);
-                }
-#endif
-                /* Default Control PIPE reset */
-                /*****************************************************************************
-                 * Function Name: usbx_function_ResetDCP
-                 * Description  : Initializes the default control pipe(DCP).
-                 * Outline      : Reset default control pipe
-                 * Arguments    : none
-                 * Return Value : none
-                 *****************************************************************************/
-                USB20X.DCPCFG  = 0;
-                USB20X.DCPMAXP = 64;    /*TODO: This value is copied from sample*/
-
-                USB20X.CFIFOSEL  = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
-                USB20X.D0FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
-                USB20X.D1FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
-
-                busReset();
-                break;
-
-            case USB_FUNCTION_DS_ADDS:
-                break;
-
-            case USB_FUNCTION_DS_CNFG:
-                break;
-
-            case USB_FUNCTION_DS_SPD_POWR:
-            case USB_FUNCTION_DS_SPD_DFLT:
-            case USB_FUNCTION_DS_SPD_ADDR:
-            case USB_FUNCTION_DS_SPD_CNFG:
-                suspendStateChanged(0);
-                /*usbx_function_USB_FUNCTION_Suspend();*/
-                break;
-
-            default:
-                break;
-        }
-    } else if (
-        (int_sts0 & USB_FUNCTION_BITBEMP) &&
-        (int_enb0 & USB_FUNCTION_BITBEMP) &&
-        ((int_sts3 & int_enb4) & g_usbx_function_bit_set[USB_FUNCTION_PIPE0])) {
-        /* ==== BEMP PIPE0 ==== */
-        usbx_function_BEMPInterruptPIPE0(int_sts3, int_enb4, this, &USBHAL::EP0in);
-    } else if (
-        (int_sts0 & USB_FUNCTION_BITBRDY) &&
-        (int_enb0 & USB_FUNCTION_BITBRDY) &&
-        ((int_sts1 & int_enb2) & g_usbx_function_bit_set[USB_FUNCTION_PIPE0])) {
-        /* ==== BRDY PIPE0 ==== */
-        usbx_function_BRDYInterruptPIPE0(int_sts1, int_enb2, this, &USBHAL::EP0out);
-    } else if (
-        (int_sts0 & USB_FUNCTION_BITNRDY) &&
-        (int_enb0 & USB_FUNCTION_BITNRDY) &&
-        ((int_sts2 & int_enb3) & g_usbx_function_bit_set[USB_FUNCTION_PIPE0])) {
-        /* ==== NRDY PIPE0 ==== */
-        usbx_function_NRDYInterruptPIPE0(int_sts2, int_enb3, this, NULL);
-    } else if (
-        (int_sts0 & USB_FUNCTION_BITCTRT) && (int_enb0 & USB_FUNCTION_BITCTRE)) {
-        int_sts0 = USB20X.INTSTS0;
-        USB20X.INTSTS0 = (uint16_t)~USB_FUNCTION_BITCTRT;
-
-        if (((int_sts0 & USB_FUNCTION_BITCTSQ) == USB_FUNCTION_CS_RDDS) ||
-                ((int_sts0 & USB_FUNCTION_BITCTSQ) == USB_FUNCTION_CS_WRDS) ||
-                ((int_sts0 & USB_FUNCTION_BITCTSQ) == USB_FUNCTION_CS_WRND)) {
-
-            /* remake EP0 into buffer */
-            usbx_function_save_request();
-            if ((USB20X.INTSTS0 & USB_FUNCTION_BITVALID) && (
-                        ((int_sts0 & USB_FUNCTION_BITCTSQ) == USB_FUNCTION_CS_RDDS) ||
-                        ((int_sts0 & USB_FUNCTION_BITCTSQ) == USB_FUNCTION_CS_WRDS) ||
-                        ((int_sts0 & USB_FUNCTION_BITCTSQ) == USB_FUNCTION_CS_WRND))) {
-                /* New SETUP token received */
-                /* Three dummy reads for cleearing interrupt requests */
-                dumy_sts = USB20X.INTSTS0;
-                dumy_sts = USB20X.INTSTS0;
-                dumy_sts = USB20X.INTSTS0;
-                return;
-            }
-        }
-
-        switch (int_sts0 & USB_FUNCTION_BITCTSQ) {
-            case USB_FUNCTION_CS_IDST:
-                if (g_usbx_function_TestModeFlag == DEVDRV_USBF_YES) {
-                    /* ==== Test Mode ==== */
-                    usbx_function_USB_FUNCTION_TestMode();
-                }
-                /* Needs not procedure in this state */
-                break;
-
-            case USB_FUNCTION_CS_RDDS:
-                /* Reads a setup packet */
-                EP0setupCallback();
-                break;
-
-            case USB_FUNCTION_CS_WRDS:
-                /* Original code was the SetDescriptor was called */
-                EP0setupCallback();
-                break;
-
-            case USB_FUNCTION_CS_WRND:
-                EP0setupCallback();
-
-                /*The EP0setupCallback should finish in successful */
-                usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);
-
-                RZA_IO_RegWrite_16(&USB20X.DCPCTR, 1, USB_DCPCTR_CCPL_SHIFT, USB_DCPCTR_CCPL);
-                break;
-
-            case USB_FUNCTION_CS_RDSS:
-                RZA_IO_RegWrite_16(&USB20X.DCPCTR, 1, USB_DCPCTR_CCPL_SHIFT, USB_DCPCTR_CCPL);
-                break;
-
-            case USB_FUNCTION_CS_WRSS:
-                RZA_IO_RegWrite_16(&USB20X.DCPCTR, 1, USB_DCPCTR_CCPL_SHIFT, USB_DCPCTR_CCPL);
-                break;
-
-            case USB_FUNCTION_CS_SQER:
-                usbx_function_set_pid_stall(USB_FUNCTION_PIPE0);
-                break;
-
-            default:
-                usbx_function_set_pid_stall(USB_FUNCTION_PIPE0);
-                break;
-        }
-    } else if (
-        (int_sts0 & USB_FUNCTION_BITBEMP) &&
-        (int_enb0 & USB_FUNCTION_BITBEMP) &&
-        (int_sts3 & int_enb4) ) {
-        /* ==== BEMP PIPEx ==== */
-        usbx_function_BEMPInterrupt(int_sts3, int_enb4, this, epCallback);
-    } else if (
-        (int_sts0 & USB_FUNCTION_BITBRDY) &&
-        (int_enb0 & USB_FUNCTION_BITBRDY) &&
-        (int_sts1 & int_enb2) ) {
-        /* ==== BRDY PIPEx ==== */
-        usbx_function_BRDYInterrupt(int_sts1, int_enb2, this, epCallback);
-    } else if (
-        (int_sts0 & USB_FUNCTION_BITNRDY) &&
-        (int_enb0 & USB_FUNCTION_BITNRDY) &&
-        (int_sts2 & int_enb3)) {
-        /* ==== NRDY PIPEx ==== */
-        usbx_function_NRDYInterrupt(int_sts2, int_enb3, this, epCallback);
-    } else {
-        /* Do Nothing */
-    }
-
-    /* Three dummy reads for cleearing interrupt requests */
-    dumy_sts = USB20X.INTSTS0;
-    dumy_sts = USB20X.INTSTS1;
-}
-
-/*************************************************************************/
-#endif
-/*************************************************************************/
-/*EOF*/
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/USBHAL_STM32F4.cpp
--- a/USBDevice/USBHAL_STM32F4.cpp	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,416 +0,0 @@
-/* Copyright (c) 2010-2011 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#if defined(TARGET_STM32F4) && !defined(USB_STM_HAL)
-
-#include "USBHAL.h"
-#include "USBRegs_STM32.h"
-#include "pinmap.h"
-
-USBHAL * USBHAL::instance;
-
-static volatile int epComplete = 0;
-
-static uint32_t bufferEnd = 0;
-static const uint32_t rxFifoSize = 512;
-static uint32_t rxFifoCount = 0;
-
-static uint32_t setupBuffer[MAX_PACKET_SIZE_EP0 >> 2];
-
-uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) {
-    return 0;
-}
-
-USBHAL::USBHAL(void) {
-    NVIC_DisableIRQ(OTG_FS_IRQn);
-    epCallback[0] = &USBHAL::EP1_OUT_callback;
-    epCallback[1] = &USBHAL::EP1_IN_callback;
-    epCallback[2] = &USBHAL::EP2_OUT_callback;
-    epCallback[3] = &USBHAL::EP2_IN_callback;
-    epCallback[4] = &USBHAL::EP3_OUT_callback;
-    epCallback[5] = &USBHAL::EP3_IN_callback;
-
-    // Enable power and clocking
-    RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
-
-#if defined(TARGET_STM32F407VG) || defined(TARGET_STM32F401RE) || defined(TARGET_STM32F411RE) || defined(TARGET_STM32F412ZG) || defined(TARGET_STM32F429ZI)
-    pin_function(PA_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
-    pin_function(PA_9, STM_PIN_DATA(STM_MODE_INPUT, GPIO_PULLDOWN, GPIO_AF10_OTG_FS));
-    pin_function(PA_10, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF10_OTG_FS));
-    pin_function(PA_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
-    pin_function(PA_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
-#else
-    pin_function(PA_8, STM_PIN_DATA(2, 10));
-    pin_function(PA_9, STM_PIN_DATA(0, 0));
-    pin_function(PA_10, STM_PIN_DATA(2, 10));
-    pin_function(PA_11, STM_PIN_DATA(2, 10));
-    pin_function(PA_12, STM_PIN_DATA(2, 10));
-
-    // Set ID pin to open drain with pull-up resistor
-    pin_mode(PA_10, OpenDrain);
-    GPIOA->PUPDR &= ~(0x3 << 20);
-    GPIOA->PUPDR |= 1 << 20;
-
-    // Set VBUS pin to open drain
-    pin_mode(PA_9, OpenDrain);
-#endif
-
-    RCC->AHB2ENR |= RCC_AHB2ENR_OTGFSEN;
-
-    // Enable interrupts
-    OTG_FS->GREGS.GAHBCFG |= (1 << 0);
-
-    // Turnaround time to maximum value - too small causes packet loss
-    OTG_FS->GREGS.GUSBCFG |= (0xF << 10);
-
-    // Unmask global interrupts
-    OTG_FS->GREGS.GINTMSK |= (1 << 3) | // SOF
-                             (1 << 4) | // RX FIFO not empty
-                             (1 << 12); // USB reset
-
-    OTG_FS->DREGS.DCFG |= (0x3 << 0) | // Full speed
-                          (1 << 2); // Non-zero-length status OUT handshake
-
-    OTG_FS->GREGS.GCCFG |= (1 << 19) | // Enable VBUS sensing
-                           (1 << 16); // Power Up
-
-    instance = this;
-    NVIC_SetVector(OTG_FS_IRQn, (uint32_t)&_usbisr);
-    NVIC_SetPriority(OTG_FS_IRQn, 1);
-}
-
-USBHAL::~USBHAL(void) {
-}
-
-void USBHAL::connect(void) {
-    NVIC_EnableIRQ(OTG_FS_IRQn);
-}
-
-void USBHAL::disconnect(void) {
-    NVIC_DisableIRQ(OTG_FS_IRQn);
-}
-
-void USBHAL::configureDevice(void) {
-    // Not needed
-}
-
-void USBHAL::unconfigureDevice(void) {
-    // Not needed
-}
-
-void USBHAL::setAddress(uint8_t address) {
-    OTG_FS->DREGS.DCFG |= (address << 4);
-    EP0write(0, 0);
-}
-
-bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket,
-                             uint32_t flags) {
-    uint32_t epIndex = endpoint >> 1;
-
-    uint32_t type;
-    switch (endpoint) {
-        case EP0IN:
-        case EP0OUT:
-            type = 0;
-            break;
-        case EPISO_IN:
-        case EPISO_OUT:
-            type = 1;
-        case EPBULK_IN:
-        case EPBULK_OUT:
-            type = 2;
-            break;
-        case EPINT_IN:
-        case EPINT_OUT:
-            type = 3;
-            break;
-    }
-
-    // Generic in or out EP controls
-    uint32_t control = (maxPacket << 0) | // Packet size
-                       (1 << 15) | // Active endpoint
-                       (type << 18); // Endpoint type
-
-    if (endpoint & 0x1) { // In Endpoint
-        // Set up the Tx FIFO
-        if (endpoint == EP0IN) {
-            OTG_FS->GREGS.DIEPTXF0_HNPTXFSIZ = ((maxPacket >> 2) << 16) |
-                                               (bufferEnd << 0);
-        }
-        else {
-            OTG_FS->GREGS.DIEPTXF[epIndex - 1] = ((maxPacket >> 2) << 16) |
-                                                 (bufferEnd << 0);
-        }
-        bufferEnd += maxPacket >> 2;
-
-        // Set the In EP specific control settings
-        if (endpoint != EP0IN) {
-            control |= (1 << 28); // SD0PID
-        }
-
-        control |= (epIndex << 22) | // TxFIFO index
-                   (1 << 27); // SNAK
-        OTG_FS->INEP_REGS[epIndex].DIEPCTL = control;
-
-        // Unmask the interrupt
-        OTG_FS->DREGS.DAINTMSK |= (1 << epIndex);
-    }
-    else { // Out endpoint
-        // Set the out EP specific control settings
-        control |= (1 << 26); // CNAK
-        OTG_FS->OUTEP_REGS[epIndex].DOEPCTL = control;
-
-        // Unmask the interrupt
-        OTG_FS->DREGS.DAINTMSK |= (1 << (epIndex + 16));
-    }
-    return true;
-}
-
-// read setup packet
-void USBHAL::EP0setup(uint8_t *buffer) {
-    memcpy(buffer, setupBuffer, MAX_PACKET_SIZE_EP0);
-}
-
-void USBHAL::EP0readStage(void) {
-}
-
-void USBHAL::EP0read(void) {
-}
-
-uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) {
-    uint32_t* buffer32 = (uint32_t *) buffer;
-    uint32_t length = rxFifoCount;
-    for (uint32_t i = 0; i < length; i += 4) {
-        buffer32[i >> 2] = OTG_FS->FIFO[0][0];
-    }
-
-    rxFifoCount = 0;
-    return length;
-}
-
-void USBHAL::EP0write(uint8_t *buffer, uint32_t size) {
-    endpointWrite(0, buffer, size);
-}
-
-void USBHAL::EP0getWriteResult(void) {
-}
-
-void USBHAL::EP0stall(void) {
-    // If we stall the out endpoint here then we have problems transferring
-    // and setup requests after the (stalled) get device qualifier requests.
-    // TODO: Find out if this is correct behavior, or whether we are doing
-    // something else wrong
-    stallEndpoint(EP0IN);
-//    stallEndpoint(EP0OUT);
-}
-
-EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) {
-    uint32_t epIndex = endpoint >> 1;
-    uint32_t size = (1 << 19) | // 1 packet
-                    (maximumSize << 0); // Packet size
-//    if (endpoint == EP0OUT) {
-        size |= (1 << 29); // 1 setup packet
-//    }
-    OTG_FS->OUTEP_REGS[epIndex].DOEPTSIZ = size;
-    OTG_FS->OUTEP_REGS[epIndex].DOEPCTL |= (1 << 31) | // Enable endpoint
-                                           (1 << 26); // Clear NAK
-
-    epComplete &= ~(1 << endpoint);
-    return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_t *bytesRead) {
-    if (!(epComplete & (1 << endpoint))) {
-        return EP_PENDING;
-    }
-
-    uint32_t* buffer32 = (uint32_t *) buffer;
-    uint32_t length = rxFifoCount;
-    for (uint32_t i = 0; i < length; i += 4) {
-        buffer32[i >> 2] = OTG_FS->FIFO[endpoint >> 1][0];
-    }
-    rxFifoCount = 0;
-    *bytesRead = length;
-    return EP_COMPLETED;
-}
-
-EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size) {
-    uint32_t epIndex = endpoint >> 1;
-    OTG_FS->INEP_REGS[epIndex].DIEPTSIZ = (1 << 19) | // 1 packet
-                                          (size << 0); // Size of packet
-    OTG_FS->INEP_REGS[epIndex].DIEPCTL |= (1 << 31) | // Enable endpoint
-                                          (1 << 26); // CNAK
-    OTG_FS->DREGS.DIEPEMPMSK = (1 << epIndex);
-
-    while ((OTG_FS->INEP_REGS[epIndex].DTXFSTS & 0XFFFF) < ((size + 3) >> 2));
-
-    for (uint32_t i=0; i<(size + 3) >> 2; i++, data+=4) {
-        OTG_FS->FIFO[epIndex][0] = *(uint32_t *)data;
-    }
-
-    epComplete &= ~(1 << endpoint);
-
-    return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint) {
-    if (epComplete & (1 << endpoint)) {
-        epComplete &= ~(1 << endpoint);
-        return EP_COMPLETED;
-    }
-
-    return EP_PENDING;
-}
-
-void USBHAL::stallEndpoint(uint8_t endpoint) {
-    if (endpoint & 0x1) { // In EP
-        OTG_FS->INEP_REGS[endpoint >> 1].DIEPCTL |= (1 << 30) | // Disable
-                                                    (1 << 21); // Stall
-    }
-    else {  // Out EP
-        OTG_FS->DREGS.DCTL |= (1 << 9); // Set global out NAK
-        OTG_FS->OUTEP_REGS[endpoint >> 1].DOEPCTL |= (1 << 30) | // Disable
-                                                     (1 << 21); // Stall
-    }
-}
-
-void USBHAL::unstallEndpoint(uint8_t endpoint) {
-
-}
-
-bool USBHAL::getEndpointStallState(uint8_t endpoint) {
-    return false;
-}
-
-void USBHAL::remoteWakeup(void) {
-}
-
-
-void USBHAL::_usbisr(void) {
-    instance->usbisr();
-}
-
-
-void USBHAL::usbisr(void) {
-    if (OTG_FS->GREGS.GINTSTS & (1 << 11)) { // USB Suspend
-        suspendStateChanged(1);
-    };
-
-    if (OTG_FS->GREGS.GINTSTS & (1 << 12)) { // USB Reset
-        suspendStateChanged(0);
-
-        // Set SNAK bits
-        OTG_FS->OUTEP_REGS[0].DOEPCTL |= (1 << 27);
-        OTG_FS->OUTEP_REGS[1].DOEPCTL |= (1 << 27);
-        OTG_FS->OUTEP_REGS[2].DOEPCTL |= (1 << 27);
-        OTG_FS->OUTEP_REGS[3].DOEPCTL |= (1 << 27);
-
-        OTG_FS->DREGS.DIEPMSK = (1 << 0);
-
-        bufferEnd = 0;
-
-        // Set the receive FIFO size
-        OTG_FS->GREGS.GRXFSIZ = rxFifoSize >> 2;
-        bufferEnd += rxFifoSize >> 2;
-
-        // Create the endpoints, and wait for setup packets on out EP0
-        realiseEndpoint(EP0IN, MAX_PACKET_SIZE_EP0, 0);
-        realiseEndpoint(EP0OUT, MAX_PACKET_SIZE_EP0, 0);
-        endpointRead(EP0OUT, MAX_PACKET_SIZE_EP0);
-
-        OTG_FS->GREGS.GINTSTS = (1 << 12);
-    }
-
-    if (OTG_FS->GREGS.GINTSTS & (1 << 4)) { // RX FIFO not empty
-        uint32_t status = OTG_FS->GREGS.GRXSTSP;
-
-        uint32_t endpoint = (status & 0xF) << 1;
-        uint32_t length = (status >> 4) & 0x7FF;
-        uint32_t type = (status >> 17) & 0xF;
-
-        rxFifoCount = length;
-
-        if (type == 0x6) {
-            // Setup packet
-            for (uint32_t i=0; i<length; i+=4) {
-                setupBuffer[i >> 2] = OTG_FS->FIFO[0][i >> 2];
-            }
-            rxFifoCount = 0;
-        }
-
-        if (type == 0x4) {
-            // Setup complete
-            EP0setupCallback();
-            endpointRead(EP0OUT, MAX_PACKET_SIZE_EP0);
-        }
-
-        if (type == 0x2) {
-            // Out packet
-            if (endpoint == EP0OUT) {
-                EP0out();
-            }
-            else {
-                epComplete |= (1 << endpoint);
-                if ((instance->*(epCallback[endpoint - 2]))()) {
-                    epComplete &= ~(1 << endpoint);
-                }
-            }
-        }
-
-        for (uint32_t i=0; i<rxFifoCount; i+=4) {
-            (void) OTG_FS->FIFO[0][0];
-        }
-        OTG_FS->GREGS.GINTSTS = (1 << 4);
-    }
-
-    if (OTG_FS->GREGS.GINTSTS & (1 << 18)) { // In endpoint interrupt
-        // Loop through the in endpoints
-        for (uint32_t i=0; i<4; i++) {
-            if (OTG_FS->DREGS.DAINT & (1 << i)) { // Interrupt is on endpoint
-
-                if (OTG_FS->INEP_REGS[i].DIEPINT & (1 << 7)) {// Tx FIFO empty
-                    // If the Tx FIFO is empty on EP0 we need to send a further
-                    // packet, so call EP0in()
-                    if (i == 0) {
-                        EP0in();
-                    }
-                    // Clear the interrupt
-                    OTG_FS->INEP_REGS[i].DIEPINT = (1 << 7);
-                    // Stop firing Tx empty interrupts
-                    // Will get turned on again if another write is called
-                    OTG_FS->DREGS.DIEPEMPMSK &= ~(1 << i);
-                }
-
-                // If the transfer is complete
-                if (OTG_FS->INEP_REGS[i].DIEPINT & (1 << 0)) { // Tx Complete
-                    epComplete |= (1 << (1 + (i << 1)));
-                    OTG_FS->INEP_REGS[i].DIEPINT = (1 << 0);
-                }
-            }
-        }
-        OTG_FS->GREGS.GINTSTS = (1 << 18);
-    }
-
-    if (OTG_FS->GREGS.GINTSTS & (1 << 3)) { // Start of frame
-        SOF((OTG_FS->GREGS.GRXSTSR >> 17) & 0xF);
-        OTG_FS->GREGS.GINTSTS = (1 << 3);
-    }
-}
-
-
-#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 USBDevice/USBRegs_STM32.h
--- a/USBDevice/USBRegs_STM32.h	Thu Jul 20 10:14:36 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,149 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usb_regs.h
-  * @author  MCD Application Team
-  * @version V2.1.0
-  * @date    19-March-2012
-  * @brief   hardware registers
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software
-  * distributed under the License is distributed on an "AS IS" BASIS,
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */
-
-#ifndef __USB_OTG_REGS_H__
-#define __USB_OTG_REGS_H__
-
-typedef struct //000h
-{
-  __IO uint32_t GOTGCTL;      /* USB_OTG Control and Status Register    000h*/
-  __IO uint32_t GOTGINT;      /* USB_OTG Interrupt Register             004h*/
-  __IO uint32_t GAHBCFG;      /* Core AHB Configuration Register    008h*/
-  __IO uint32_t GUSBCFG;      /* Core USB Configuration Register    00Ch*/
-  __IO uint32_t GRSTCTL;      /* Core Reset Register                010h*/
-  __IO uint32_t GINTSTS;      /* Core Interrupt Register            014h*/
-  __IO uint32_t GINTMSK;      /* Core Interrupt Mask Register       018h*/
-  __IO uint32_t GRXSTSR;      /* Receive Sts Q Read Register        01Ch*/
-  __IO uint32_t GRXSTSP;      /* Receive Sts Q Read & POP Register  020h*/
-  __IO uint32_t GRXFSIZ;      /* Receive FIFO Size Register         024h*/
-  __IO uint32_t DIEPTXF0_HNPTXFSIZ;   /* EP0 / Non Periodic Tx FIFO Size Register 028h*/
-  __IO uint32_t HNPTXSTS;     /* Non Periodic Tx FIFO/Queue Sts reg 02Ch*/
-  uint32_t Reserved30[2];     /* Reserved                           030h*/
-  __IO uint32_t GCCFG;        /* General Purpose IO Register        038h*/
-  __IO uint32_t CID;          /* User ID Register                   03Ch*/
-  uint32_t  Reserved40[48];   /* Reserved                      040h-0FFh*/
-  __IO uint32_t HPTXFSIZ; /* Host Periodic Tx FIFO Size Reg     100h*/
-  __IO uint32_t DIEPTXF[3];/* dev Periodic Transmit FIFO */
-}
-USB_OTG_GREGS;
-
-typedef struct // 800h
-{
-  __IO uint32_t DCFG;         /* dev Configuration Register   800h*/
-  __IO uint32_t DCTL;         /* dev Control Register         804h*/
-  __IO uint32_t DSTS;         /* dev Status Register (RO)     808h*/
-  uint32_t Reserved0C;           /* Reserved                     80Ch*/
-  __IO uint32_t DIEPMSK;   /* dev IN Endpoint Mask         810h*/
-  __IO uint32_t DOEPMSK;  /* dev OUT Endpoint Mask        814h*/
-  __IO uint32_t DAINT;     /* dev All Endpoints Itr Reg    818h*/
-  __IO uint32_t DAINTMSK; /* dev All Endpoints Itr Mask   81Ch*/
-  uint32_t  Reserved20;          /* Reserved                     820h*/
-  uint32_t Reserved9;       /* Reserved                     824h*/
-  __IO uint32_t DVBUSDIS;    /* dev VBUS discharge Register  828h*/
-  __IO uint32_t DVBUSPULSE;  /* dev VBUS Pulse Register      82Ch*/
-  __IO uint32_t DTHRCTL;     /* dev thr                      830h*/
-  __IO uint32_t DIEPEMPMSK; /* dev empty msk             834h*/
-}
-USB_OTG_DREGS;
-
-typedef struct
-{
-  __IO uint32_t DIEPCTL; /* dev IN Endpoint Control Reg 900h + (ep_num * 20h) + 00h*/
-  uint32_t Reserved04;             /* Reserved                       900h + (ep_num * 20h) + 04h*/
-  __IO uint32_t DIEPINT; /* dev IN Endpoint Itr Reg     900h + (ep_num * 20h) + 08h*/
-  uint32_t Reserved0C;             /* Reserved                       900h + (ep_num * 20h) + 0Ch*/
-  __IO uint32_t DIEPTSIZ; /* IN Endpoint Txfer Size   900h + (ep_num * 20h) + 10h*/
-  uint32_t Reserved14;
-  __IO uint32_t DTXFSTS;/*IN Endpoint Tx FIFO Status Reg 900h + (ep_num * 20h) + 18h*/
-  uint32_t Reserved1C;             /* Reserved  900h+(ep_num*20h)+1Ch-900h+ (ep_num * 20h) + 1Ch*/
-}
-USB_OTG_INEPREGS;
-
-typedef struct
-{
-  __IO uint32_t DOEPCTL;       /* dev OUT Endpoint Control Reg  B00h + (ep_num * 20h) + 00h*/
-  uint32_t Reserved04;         /* Reserved                      B00h + (ep_num * 20h) + 04h*/
-  __IO uint32_t DOEPINT;       /* dev OUT Endpoint Itr Reg      B00h + (ep_num * 20h) + 08h*/
-  uint32_t Reserved0C;         /* Reserved                      B00h + (ep_num * 20h) + 0Ch*/
-  __IO uint32_t DOEPTSIZ;      /* dev OUT Endpoint Txfer Size   B00h + (ep_num * 20h) + 10h*/
-  uint32_t Reserved14[3];
-}
-USB_OTG_OUTEPREGS;
-
-typedef struct
-{
-  __IO uint32_t HCFG;             /* Host Configuration Register    400h*/
-  __IO uint32_t HFIR;      /* Host Frame Interval Register   404h*/
-  __IO uint32_t HFNUM;         /* Host Frame Nbr/Frame Remaining 408h*/
-  uint32_t Reserved40C;                   /* Reserved                       40Ch*/
-  __IO uint32_t HPTXSTS;   /* Host Periodic Tx FIFO/ Queue Status 410h*/
-  __IO uint32_t HAINT;   /* Host All Channels Interrupt Register 414h*/
-  __IO uint32_t HAINTMSK;   /* Host All Channels Interrupt Mask 418h*/
-}
-USB_OTG_HREGS;
-
-typedef struct
-{
-  __IO uint32_t HCCHAR;
-  __IO uint32_t HCSPLT;
-  __IO uint32_t HCINT;
-  __IO uint32_t HCINTMSK;
-  __IO uint32_t HCTSIZ;
-  uint32_t Reserved[3];
-}
-USB_OTG_HC_REGS;
-
-typedef struct
-{
-    USB_OTG_GREGS         GREGS;
-    uint32_t RESERVED0[188];
-    USB_OTG_HREGS         HREGS;
-    uint32_t RESERVED1[9];
-    __IO uint32_t         HPRT;
-    uint32_t RESERVED2[47];
-    USB_OTG_HC_REGS       HC_REGS[8];
-    uint32_t RESERVED3[128];
-    USB_OTG_DREGS         DREGS;
-    uint32_t RESERVED4[50];
-    USB_OTG_INEPREGS      INEP_REGS[4];
-    uint32_t RESERVED5[96];
-    USB_OTG_OUTEPREGS     OUTEP_REGS[4];
-    uint32_t RESERVED6[160];
-    __IO uint32_t         PCGCCTL;
-    uint32_t RESERVED7[127];
-    __IO uint32_t         FIFO[4][1024];
-}
-USB_OTG_CORE_REGS;
-
-
-#define OTG_FS_BASE (AHB2PERIPH_BASE + 0x0000)
-#define OTG_FS ((USB_OTG_CORE_REGS *) OTG_FS_BASE)
-
-#endif //__USB_OTG_REGS_H__
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
-
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_Freescale/USBEndpoints_KL25Z.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_Freescale/USBEndpoints_KL25Z.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,63 @@
+/* Copyright (c) 2010-2011 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#define NUMBER_OF_LOGICAL_ENDPOINTS (4)
+#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS * 2)
+
+/* Define physical endpoint numbers */
+
+/*      Endpoint    No.   */
+/*      ----------------  */
+#define EP0OUT      (0)
+#define EP0IN       (1)
+#define EP1OUT      (2)
+#define EP1IN       (3)
+#define EP2OUT      (4)
+#define EP2IN       (5)
+#define EP3OUT      (6)
+#define EP3IN       (7)
+
+/* Maximum Packet sizes */
+
+#define MAX_PACKET_SIZE_EP0  (64)
+#define MAX_PACKET_SIZE_EP1  (64)
+#define MAX_PACKET_SIZE_EP2  (64)
+#define MAX_PACKET_SIZE_EP3  (1023)
+
+/* Generic endpoints - intended to be portable accross devices */
+/* and be suitable for simple USB devices. */
+
+/* Bulk endpoints */
+#define EPBULK_OUT  (EP2OUT)
+#define EPBULK_IN   (EP2IN)
+#define EPBULK_OUT_callback   EP2_OUT_callback
+#define EPBULK_IN_callback    EP2_IN_callback
+/* Interrupt endpoints */
+#define EPINT_OUT   (EP1OUT)
+#define EPINT_IN    (EP1IN)
+#define EPINT_OUT_callback    EP1_OUT_callback
+#define EPINT_IN_callback     EP1_IN_callback
+/* Isochronous endpoints */
+#define EPISO_OUT   (EP3OUT)
+#define EPISO_IN    (EP3IN)
+#define EPISO_OUT_callback    EP3_OUT_callback
+#define EPISO_IN_callback     EP3_IN_callback
+
+#define MAX_PACKET_SIZE_EPBULK  (MAX_PACKET_SIZE_EP2)
+#define MAX_PACKET_SIZE_EPINT   (MAX_PACKET_SIZE_EP1)
+#define MAX_PACKET_SIZE_EPISO   (MAX_PACKET_SIZE_EP3)
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_Freescale/USBHAL_KL25Z.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_Freescale/USBHAL_KL25Z.cpp	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,507 @@
+/* Copyright (c) 2010-2011 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#if defined(TARGET_KL25Z) | defined(TARGET_KL43Z) | defined(TARGET_KL46Z) | defined(TARGET_K20D50M) | defined(TARGET_K64F) | defined(TARGET_K22F) | defined(TARGET_TEENSY3_1)
+
+#if defined(TARGET_KSDK2_MCUS)
+#include "fsl_common.h"
+#endif
+#include "USBHAL.h"
+
+USBHAL * USBHAL::instance;
+
+static volatile int epComplete = 0;
+
+// Convert physical endpoint number to register bit
+#define EP(endpoint) (1<<(endpoint))
+
+// Convert physical to logical
+#define PHY_TO_LOG(endpoint)    ((endpoint)>>1)
+
+// Get endpoint direction
+#define IN_EP(endpoint)     ((endpoint) & 1U ? true : false)
+#define OUT_EP(endpoint)    ((endpoint) & 1U ? false : true)
+
+#define BD_OWN_MASK        (1<<7)
+#define BD_DATA01_MASK     (1<<6)
+#define BD_KEEP_MASK       (1<<5)
+#define BD_NINC_MASK       (1<<4)
+#define BD_DTS_MASK        (1<<3)
+#define BD_STALL_MASK      (1<<2)
+
+#define TX    1
+#define RX    0
+#define ODD   0
+#define EVEN  1
+// this macro waits a physical endpoint number
+#define EP_BDT_IDX(ep, dir, odd) (((ep * 4) + (2 * dir) + (1 *  odd)))
+
+#define SETUP_TOKEN    0x0D
+#define IN_TOKEN       0x09
+#define OUT_TOKEN      0x01
+#define TOK_PID(idx)   ((bdt[idx].info >> 2) & 0x0F)
+
+// for each endpt: 8 bytes
+typedef struct BDT {
+    uint8_t   info;       // BD[0:7]
+    uint8_t   dummy;      // RSVD: BD[8:15]
+    uint16_t  byte_count; // BD[16:32]
+    uint32_t  address;    // Addr
+} BDT;
+
+// there are:
+//    * 4 bidirectionnal endpt -> 8 physical endpt
+//    * as there are ODD and EVEN buffer -> 8*2 bdt
+MBED_ALIGN(512) BDT bdt[NUMBER_OF_PHYSICAL_ENDPOINTS * 2];  // 512 bytes aligned!
+
+uint8_t * endpoint_buffer[NUMBER_OF_PHYSICAL_ENDPOINTS * 2];
+
+static uint8_t set_addr = 0;
+static uint8_t addr = 0;
+
+static uint32_t Data1  = 0x55555555;
+
+static uint32_t frameNumber() {
+    return((USB0->FRMNUML | (USB0->FRMNUMH << 8)) & 0x07FF);
+}
+
+uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) {
+    return 0;
+}
+
+USBHAL::USBHAL(void) {
+    // Disable IRQ
+    NVIC_DisableIRQ(USB0_IRQn);
+
+#if (defined(FSL_FEATURE_SOC_MPU_COUNT) && (FSL_FEATURE_SOC_MPU_COUNT > 0U))
+    MPU->CESR=0;
+#endif
+    // fill in callback array
+    epCallback[0] = &USBHAL::EP1_OUT_callback;
+    epCallback[1] = &USBHAL::EP1_IN_callback;
+    epCallback[2] = &USBHAL::EP2_OUT_callback;
+    epCallback[3] = &USBHAL::EP2_IN_callback;
+    epCallback[4] = &USBHAL::EP3_OUT_callback;
+    epCallback[5] = &USBHAL::EP3_IN_callback;
+    epCallback[6] = &USBHAL::EP4_OUT_callback;
+    epCallback[7] = &USBHAL::EP4_IN_callback;
+
+#if defined(TARGET_KL43Z) || defined(TARGET_K22F) || defined(TARGET_K64F)
+    // enable USBFS clock
+    CLOCK_EnableUsbfs0Clock(kCLOCK_UsbSrcIrc48M, 48000000U);
+#else
+    // choose usb src as PLL
+    SIM->SOPT2 &= ~SIM_SOPT2_PLLFLLSEL_MASK;
+    SIM->SOPT2 |= (SIM_SOPT2_USBSRC_MASK | (1 << SIM_SOPT2_PLLFLLSEL_SHIFT));
+
+    // enable OTG clock
+    SIM->SCGC4 |= SIM_SCGC4_USBOTG_MASK;
+#endif
+
+    // Attach IRQ
+    instance = this;
+    NVIC_SetVector(USB0_IRQn, (uint32_t)&_usbisr);
+    NVIC_EnableIRQ(USB0_IRQn);
+
+    // USB Module Configuration
+    // Set BDT Base Register
+    USB0->BDTPAGE1 = (uint8_t)((uint32_t)bdt>>8);
+    USB0->BDTPAGE2 = (uint8_t)((uint32_t)bdt>>16);
+    USB0->BDTPAGE3 = (uint8_t)((uint32_t)bdt>>24);
+
+    // Clear interrupt flag
+    USB0->ISTAT = 0xff;
+
+    // USB Interrupt Enablers
+    USB0->INTEN |= USB_INTEN_TOKDNEEN_MASK |
+                   USB_INTEN_SOFTOKEN_MASK |
+                   USB_INTEN_ERROREN_MASK  |
+                   USB_INTEN_USBRSTEN_MASK;
+
+    // Disable weak pull downs
+    USB0->USBCTRL &= ~(USB_USBCTRL_PDE_MASK | USB_USBCTRL_SUSP_MASK);
+
+    USB0->USBTRC0 |= 0x40;
+
+    /* Allocate control endpoint buffers */
+    endpoint_buffer[EP_BDT_IDX(0, TX, ODD)] = (uint8_t *)malloc(MAX_PACKET_SIZE_EP0);
+    endpoint_buffer[EP_BDT_IDX(0, RX, ODD)] = (uint8_t *)malloc(MAX_PACKET_SIZE_EP0);
+}
+
+USBHAL::~USBHAL(void) { }
+
+void USBHAL::connect(void) {
+    // enable USB
+    USB0->CTL |= USB_CTL_USBENSOFEN_MASK;
+    // Pull up enable
+    USB0->CONTROL |= USB_CONTROL_DPPULLUPNONOTG_MASK;
+
+    // Allocate endpoint buffers; do allocate control endpoint buffers
+    for (int i = 4; i < (NUMBER_OF_PHYSICAL_ENDPOINTS * 2); i++) {
+        if ((i == EPISO_OUT) || (i == EPISO_IN)) {
+            endpoint_buffer[i] = (uint8_t *)malloc(MAX_PACKET_SIZE_EPISO);
+        } else {
+            endpoint_buffer[i] = (uint8_t *)malloc(MAX_PACKET_SIZE_EPBULK);
+        }
+    }
+}
+
+void USBHAL::disconnect(void) {
+    // disable USB
+    USB0->CTL &= ~USB_CTL_USBENSOFEN_MASK;
+    // Pull up disable
+    USB0->CONTROL &= ~USB_CONTROL_DPPULLUPNONOTG_MASK;
+
+    //Free buffers if required; do not free the control endpoint buffers
+    for (int i = 4; i < (NUMBER_OF_PHYSICAL_ENDPOINTS * 2); i++) {
+        free(endpoint_buffer[i]);
+        endpoint_buffer[i] = NULL;
+    }
+}
+
+void USBHAL::configureDevice(void) {
+    // not needed
+}
+
+void USBHAL::unconfigureDevice(void) {
+    // not needed
+}
+
+void USBHAL::setAddress(uint8_t address) {
+    // we don't set the address now otherwise the usb controller does not ack
+    // we set a flag instead
+    // see usbisr when an IN token is received
+    set_addr = 1;
+    addr = address;
+}
+
+bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t flags) {
+    uint32_t handshake_flag = 0;
+    uint8_t * buf;
+
+    if (endpoint > NUMBER_OF_PHYSICAL_ENDPOINTS - 1) {
+        return false;
+    }
+
+    uint32_t log_endpoint = PHY_TO_LOG(endpoint);
+
+    if ((flags & ISOCHRONOUS) == 0) {
+        handshake_flag = USB_ENDPT_EPHSHK_MASK;
+    }
+
+    if (IN_EP(endpoint)) {
+        buf = &endpoint_buffer[EP_BDT_IDX(log_endpoint, TX, ODD)][0];
+    } else {
+        buf = &endpoint_buffer[EP_BDT_IDX(log_endpoint, RX, ODD)][0];
+    }
+
+    // IN endpt -> device to host (TX)
+    if (IN_EP(endpoint)) {
+        USB0->ENDPOINT[log_endpoint].ENDPT |= handshake_flag |        // ep handshaking (not if iso endpoint)
+                                              USB_ENDPT_EPTXEN_MASK;  // en TX (IN) tran
+        bdt[EP_BDT_IDX(log_endpoint, TX, ODD )].address = (uint32_t) buf;
+        bdt[EP_BDT_IDX(log_endpoint, TX, EVEN)].address = 0;
+    }
+    // OUT endpt -> host to device (RX)
+    else {
+        USB0->ENDPOINT[log_endpoint].ENDPT |= handshake_flag |        // ep handshaking (not if iso endpoint)
+                                              USB_ENDPT_EPRXEN_MASK;  // en RX (OUT) tran.
+        bdt[EP_BDT_IDX(log_endpoint, RX, ODD )].byte_count = maxPacket;
+        bdt[EP_BDT_IDX(log_endpoint, RX, ODD )].address    = (uint32_t) buf;
+        bdt[EP_BDT_IDX(log_endpoint, RX, ODD )].info       = BD_OWN_MASK | BD_DTS_MASK;
+        bdt[EP_BDT_IDX(log_endpoint, RX, EVEN)].info       = 0;
+    }
+
+    Data1 |= (1 << endpoint);
+
+    return true;
+}
+
+// read setup packet
+void USBHAL::EP0setup(uint8_t *buffer) {
+    uint32_t sz;
+    endpointReadResult(EP0OUT, buffer, &sz);
+}
+
+void USBHAL::EP0readStage(void) {
+    Data1 &= ~1UL;  // set DATA0
+    bdt[0].info = (BD_DTS_MASK | BD_OWN_MASK);
+}
+
+void USBHAL::EP0read(void) {
+    uint32_t idx = EP_BDT_IDX(PHY_TO_LOG(EP0OUT), RX, 0);
+    bdt[idx].byte_count = MAX_PACKET_SIZE_EP0;
+}
+
+uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) {
+    uint32_t sz;
+    endpointReadResult(EP0OUT, buffer, &sz);
+    return sz;
+}
+
+void USBHAL::EP0write(uint8_t *buffer, uint32_t size) {
+    endpointWrite(EP0IN, buffer, size);
+}
+
+void USBHAL::EP0getWriteResult(void) {
+}
+
+void USBHAL::EP0stall(void) {
+    stallEndpoint(EP0OUT);
+}
+
+EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) {
+    endpoint = PHY_TO_LOG(endpoint);
+    uint32_t idx = EP_BDT_IDX(endpoint, RX, 0);
+    bdt[idx].byte_count = maximumSize;
+    return EP_PENDING;
+}
+
+EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_t *bytesRead) {
+    uint32_t n, sz, idx, setup = 0;
+    uint8_t not_iso;
+    uint8_t * ep_buf;
+
+    uint32_t log_endpoint = PHY_TO_LOG(endpoint);
+
+    if (endpoint > NUMBER_OF_PHYSICAL_ENDPOINTS - 1) {
+        return EP_INVALID;
+    }
+
+    // if read on a IN endpoint -> error
+    if (IN_EP(endpoint)) {
+        return EP_INVALID;
+    }
+
+    idx = EP_BDT_IDX(log_endpoint, RX, 0);
+    sz  = bdt[idx].byte_count;
+    not_iso = USB0->ENDPOINT[log_endpoint].ENDPT & USB_ENDPT_EPHSHK_MASK;
+
+    //for isochronous endpoint, we don't wait an interrupt
+    if ((log_endpoint != 0) && not_iso && !(epComplete & EP(endpoint))) {
+        return EP_PENDING;
+    }
+
+    if ((log_endpoint == 0) && (TOK_PID(idx) == SETUP_TOKEN)) {
+        setup = 1;
+    }
+
+    ep_buf = endpoint_buffer[idx];
+
+    for (n = 0; n < sz; n++) {
+        buffer[n] = ep_buf[n];
+    }
+
+    if (((Data1 >> endpoint) & 1) == ((bdt[idx].info >> 6) & 1)) {
+        if (setup && (buffer[6] == 0))  // if no setup data stage,
+            Data1 &= ~1UL;              // set DATA0
+        else
+            Data1 ^= (1 << endpoint);
+    }
+
+    if (((Data1 >> endpoint) & 1)) {
+        bdt[idx].info = BD_DTS_MASK | BD_DATA01_MASK | BD_OWN_MASK;
+    }
+    else {
+        bdt[idx].info = BD_DTS_MASK | BD_OWN_MASK;
+    }
+
+    USB0->CTL &= ~USB_CTL_TXSUSPENDTOKENBUSY_MASK;
+    *bytesRead = sz;
+
+    epComplete &= ~EP(endpoint);
+    return EP_COMPLETED;
+}
+
+EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size) {
+    uint32_t idx, n;
+    uint8_t * ep_buf;
+
+    if (endpoint > NUMBER_OF_PHYSICAL_ENDPOINTS - 1) {
+        return EP_INVALID;
+    }
+
+    // if write on a OUT endpoint -> error
+    if (OUT_EP(endpoint)) {
+        return EP_INVALID;
+    }
+
+    idx = EP_BDT_IDX(PHY_TO_LOG(endpoint), TX, 0);
+    bdt[idx].byte_count = size;
+
+    ep_buf = endpoint_buffer[idx];
+
+    for (n = 0; n < size; n++) {
+        ep_buf[n] = data[n];
+    }
+
+    if ((Data1 >> endpoint) & 1) {
+        bdt[idx].info = BD_OWN_MASK | BD_DTS_MASK;
+    } else {
+        bdt[idx].info = BD_OWN_MASK | BD_DTS_MASK | BD_DATA01_MASK;
+    }
+
+    Data1 ^= (1 << endpoint);
+
+    return EP_PENDING;
+}
+
+EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint) {
+    if (epComplete & EP(endpoint)) {
+        epComplete &= ~EP(endpoint);
+        return EP_COMPLETED;
+    }
+
+    return EP_PENDING;
+}
+
+void USBHAL::stallEndpoint(uint8_t endpoint) {
+    USB0->ENDPOINT[PHY_TO_LOG(endpoint)].ENDPT |= USB_ENDPT_EPSTALL_MASK;
+}
+
+void USBHAL::unstallEndpoint(uint8_t endpoint) {
+    USB0->ENDPOINT[PHY_TO_LOG(endpoint)].ENDPT &= ~USB_ENDPT_EPSTALL_MASK;
+}
+
+bool USBHAL::getEndpointStallState(uint8_t endpoint) {
+    uint8_t stall = (USB0->ENDPOINT[PHY_TO_LOG(endpoint)].ENDPT & USB_ENDPT_EPSTALL_MASK);
+    return (stall) ? true : false;
+}
+
+void USBHAL::remoteWakeup(void) {
+    // [TODO]
+}
+
+
+void USBHAL::_usbisr(void) {
+    instance->usbisr();
+}
+
+
+void USBHAL::usbisr(void) {
+    uint8_t i;
+    uint8_t istat = USB0->ISTAT;
+
+    // reset interrupt
+    if (istat & USB_ISTAT_USBRST_MASK) {
+        // disable all endpt
+        for(i = 0; i < 16; i++) {
+            USB0->ENDPOINT[i].ENDPT = 0x00;
+        }
+
+        // enable control endpoint
+        realiseEndpoint(EP0OUT, MAX_PACKET_SIZE_EP0, 0);
+        realiseEndpoint(EP0IN, MAX_PACKET_SIZE_EP0, 0);
+
+        Data1 = 0x55555555;
+        USB0->CTL |=  USB_CTL_ODDRST_MASK;
+
+        USB0->ISTAT   =  0xFF;  // clear all interrupt status flags
+        USB0->ERRSTAT =  0xFF;  // clear all error flags
+        USB0->ERREN   =  0xFF;  // enable error interrupt sources
+        USB0->ADDR    =  0x00;  // set default address
+
+        // reset bus for USBDevice layer
+        busReset();
+
+        return;
+    }
+
+    // resume interrupt
+    if (istat & USB_ISTAT_RESUME_MASK) {
+        USB0->ISTAT = USB_ISTAT_RESUME_MASK;
+    }
+
+    // SOF interrupt
+    if (istat & USB_ISTAT_SOFTOK_MASK) {
+        USB0->ISTAT = USB_ISTAT_SOFTOK_MASK;
+        // SOF event, read frame number
+        SOF(frameNumber());
+    }
+
+    // stall interrupt
+    if (istat & 1<<7) {
+        if (USB0->ENDPOINT[0].ENDPT & USB_ENDPT_EPSTALL_MASK)
+            USB0->ENDPOINT[0].ENDPT &= ~USB_ENDPT_EPSTALL_MASK;
+        USB0->ISTAT |= USB_ISTAT_STALL_MASK;
+    }
+
+    // token interrupt
+    if (istat & 1<<3) {
+        uint32_t num  = (USB0->STAT >> 4) & 0x0F;
+        uint32_t dir  = (USB0->STAT >> 3) & 0x01;
+        uint32_t ev_odd = (USB0->STAT >> 2) & 0x01;
+        int endpoint = (num << 1) | dir;
+
+        // setup packet
+        if ((num == 0) && (TOK_PID((EP_BDT_IDX(num, dir, ev_odd))) == SETUP_TOKEN)) {
+            Data1 &= ~0x02;
+            bdt[EP_BDT_IDX(0, TX, EVEN)].info &= ~BD_OWN_MASK;
+            bdt[EP_BDT_IDX(0, TX, ODD)].info  &= ~BD_OWN_MASK;
+
+            // EP0 SETUP event (SETUP data received)
+            EP0setupCallback();
+
+        } else {
+            // OUT packet
+            if (TOK_PID((EP_BDT_IDX(num, dir, ev_odd))) == OUT_TOKEN) {
+                if (num == 0)
+                    EP0out();
+                else {
+                    epComplete |= EP(endpoint);
+                    if ((instance->*(epCallback[endpoint - 2]))()) {
+                        epComplete &= ~EP(endpoint);
+                    }
+                }
+            }
+
+            // IN packet
+            if (TOK_PID((EP_BDT_IDX(num, dir, ev_odd))) == IN_TOKEN) {
+                if (num == 0) {
+                    EP0in();
+                    if (set_addr == 1) {
+                        USB0->ADDR = addr & 0x7F;
+                        set_addr = 0;
+                    }
+                }
+                else {
+                    epComplete |= EP(endpoint);
+                    if ((instance->*(epCallback[endpoint - 2]))()) {
+                        epComplete &= ~EP(endpoint);
+                    }
+                }
+            }
+        }
+
+        USB0->ISTAT = USB_ISTAT_TOKDNE_MASK;
+    }
+
+    // sleep interrupt
+    if (istat & 1<<4) {
+        USB0->ISTAT |= USB_ISTAT_SLEEP_MASK;
+    }
+
+    // error interrupt
+    if (istat & USB_ISTAT_ERROR_MASK) {
+        USB0->ERRSTAT = 0xFF;
+        USB0->ISTAT |= USB_ISTAT_ERROR_MASK;
+    }
+}
+
+
+#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_Maxim/USBEndpoints_Maxim.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_Maxim/USBEndpoints_Maxim.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (C) 2015 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+
+#define NUMBER_OF_LOGICAL_ENDPOINTS   (8)
+#define NUMBER_OF_PHYSICAL_ENDPOINTS  (NUMBER_OF_LOGICAL_ENDPOINTS * 2)
+
+#define DIR_OUT       0x00
+#define DIR_IN        0x01
+#define EP_NUM(ep)    (ep >> 1)
+#define IN_EP(ep)     (ep & DIR_IN)
+#define OUT_EP(ep)    (!(ep & DIR_IN))
+
+/* Define physical endpoint numbers */
+
+/*      Endpoint    No.   */
+/*      ----------------  */
+#define EP0OUT      ((0 << 1) | DIR_OUT)
+#define EP0IN       ((0 << 1) | DIR_IN)
+#define EP1OUT      ((1 << 1) | DIR_OUT)
+#define EP1IN       ((1 << 1) | DIR_IN)
+#define EP2OUT      ((2 << 1) | DIR_OUT)
+#define EP2IN       ((2 << 1) | DIR_IN)
+#define EP3OUT      ((3 << 1) | DIR_OUT)
+#define EP3IN       ((3 << 1) | DIR_IN)
+#define EP4OUT      ((4 << 1) | DIR_OUT)
+#define EP4IN       ((4 << 1) | DIR_IN)
+#define EP5OUT      ((5 << 1) | DIR_OUT)
+#define EP5IN       ((5 << 1) | DIR_IN)
+#define EP6OUT      ((6 << 1) | DIR_OUT)
+#define EP6IN       ((6 << 1) | DIR_IN)
+#define EP7OUT      ((7 << 1) | DIR_OUT)
+#define EP7IN       ((7 << 1) | DIR_IN)
+
+/* Maximum Packet sizes */
+
+#define MAX_PACKET_SIZE_EP0  (64)
+#define MAX_PACKET_SIZE_EP1  (64)
+#define MAX_PACKET_SIZE_EP2  (64)
+#define MAX_PACKET_SIZE_EP3  (64)
+#define MAX_PACKET_SIZE_EP4  (64)
+#define MAX_PACKET_SIZE_EP5  (64)
+#define MAX_PACKET_SIZE_EP6  (64)
+#define MAX_PACKET_SIZE_EP7  (64)
+
+/* Generic endpoints - intended to be portable accross devices */
+/* and be suitable for simple USB devices. */
+
+/* Bulk endpoints */
+#define EPBULK_OUT  (EP1OUT)
+#define EPBULK_IN   (EP2IN)
+#define EPBULK_OUT_callback   EP1_OUT_callback
+#define EPBULK_IN_callback    EP2_IN_callback
+/* Interrupt endpoints */
+#define EPINT_OUT   (EP3OUT)
+#define EPINT_IN    (EP4IN)
+#define EPINT_OUT_callback    EP3_OUT_callback
+#define EPINT_IN_callback     EP4_IN_callback
+/* Isochronous endpoints */
+/* NOT SUPPORTED - use invalid endpoint number to prevent built errors */
+#define EPISO_OUT   (EP0OUT)
+#define EPISO_IN    (EP0IN)
+
+#define MAX_PACKET_SIZE_EPBULK  (64)
+#define MAX_PACKET_SIZE_EPINT   (64)
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_Maxim/USBHAL_Maxim.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_Maxim/USBHAL_Maxim.cpp	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,489 @@
+/*******************************************************************************
+ * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+
+#if defined(TARGET_Maxim)
+
+#include "USBHAL.h"
+#include "usb_regs.h"
+#include "clkman_regs.h"
+
+#if defined(TARGET_MAX32625) || defined(TARGET_MAX32630)
+#include "pwrman_regs.h"
+#endif
+
+#define CONNECT_INTS    (MXC_F_USB_DEV_INTEN_BRST | MXC_F_USB_DEV_INTEN_SETUP | MXC_F_USB_DEV_INTEN_EP_IN | MXC_F_USB_DEV_INTEN_EP_OUT | MXC_F_USB_DEV_INTEN_DMA_ERR)
+
+USBHAL *USBHAL::instance;
+
+typedef struct {
+    volatile uint32_t buf0_desc;
+    volatile uint32_t buf0_address;
+    volatile uint32_t buf1_desc;
+    volatile uint32_t buf1_address;
+} ep_buffer_t;
+
+typedef struct {
+    ep_buffer_t out_buffer;
+    ep_buffer_t in_buffer;
+} ep0_buffer_t;
+
+typedef struct {
+    ep0_buffer_t ep0;
+    ep_buffer_t ep[MXC_USB_NUM_EP - 1];
+} ep_buffer_descriptor_t;
+
+// Static storage for endpoint buffer descriptor table. Must be 512 byte aligned for DMA.
+#ifdef __IAR_SYSTEMS_ICC__
+#pragma data_alignment = 512
+#else
+__attribute__ ((aligned (512))) 
+#endif
+ep_buffer_descriptor_t ep_buffer_descriptor;
+
+// static storage for temporary data buffers. Must be 32 byte aligned.
+#ifdef __IAR_SYSTEMS_ICC__
+#pragma data_alignment = 4
+#else
+__attribute__ ((aligned (4))) 
+#endif
+static uint8_t aligned_buffer[NUMBER_OF_LOGICAL_ENDPOINTS][MXC_USB_MAX_PACKET];
+
+// control packet state
+static enum {
+    CTRL_NONE = 0,
+    CTRL_SETUP,
+    CTRL_OUT,
+    CTRL_IN,
+} control_state;
+
+USBHAL::USBHAL(void)
+{
+    NVIC_DisableIRQ(USB_IRQn);
+
+#if defined(TARGET_MAX32600)
+    // The PLL must be enabled for USB
+    MBED_ASSERT(MXC_CLKMAN->clk_config & MXC_F_CLKMAN_CLK_CONFIG_PLL_ENABLE);
+
+    // Enable the USB clock
+    MXC_CLKMAN->clk_ctrl |= MXC_F_CLKMAN_CLK_CTRL_USB_GATE_N;
+#elif defined(TARGET_MAX32620)
+    // Enable the USB clock
+    MXC_CLKMAN->clk_ctrl |= MXC_F_CLKMAN_CLK_CTRL_USB_CLOCK_ENABLE;
+#endif
+
+    // reset the device
+    MXC_USB->cn = 0;
+    MXC_USB->cn = MXC_F_USB_CN_USB_EN;
+    MXC_USB->dev_inten = 0;
+    MXC_USB->dev_cn = 0;
+    MXC_USB->dev_cn = MXC_F_USB_DEV_CN_URST;
+    MXC_USB->dev_cn = 0;
+
+    // fill in callback arrays
+    epCallback[EP0OUT] = NULL;
+    epCallback[EP0IN]  = NULL;
+    epCallback[EP1OUT] = &USBHAL::EP1_OUT_callback;
+    epCallback[EP1IN ] = &USBHAL::EP1_IN_callback;
+    epCallback[EP2OUT] = &USBHAL::EP2_OUT_callback;
+    epCallback[EP2IN ] = &USBHAL::EP2_IN_callback;
+    epCallback[EP3OUT] = &USBHAL::EP3_OUT_callback;
+    epCallback[EP3IN ] = &USBHAL::EP3_IN_callback;
+    epCallback[EP4OUT] = &USBHAL::EP4_OUT_callback;
+    epCallback[EP4IN ] = &USBHAL::EP4_IN_callback;
+    epCallback[EP5OUT] = &USBHAL::EP5_OUT_callback;
+    epCallback[EP5IN ] = &USBHAL::EP5_IN_callback;
+    epCallback[EP6OUT] = &USBHAL::EP6_OUT_callback;
+    epCallback[EP6IN ] = &USBHAL::EP6_IN_callback;
+    epCallback[EP7OUT] = &USBHAL::EP7_OUT_callback;
+    epCallback[EP7IN ] = &USBHAL::EP7_IN_callback;
+
+    // clear driver state
+    control_state = CTRL_NONE;
+
+    // set the descriptor location
+    MXC_USB->ep_base = (uint32_t)&ep_buffer_descriptor;
+
+    // enable VBUS interrupts
+    MXC_USB->dev_inten = MXC_F_USB_DEV_INTEN_NO_VBUS | MXC_F_USB_DEV_INTEN_VBUS;
+
+    // attach IRQ handler and enable interrupts
+    instance = this;
+    NVIC_SetVector(USB_IRQn, &_usbisr);
+    NVIC_EnableIRQ(USB_IRQn);
+}
+
+USBHAL::~USBHAL(void)
+{
+    MXC_USB->dev_cn = MXC_F_USB_DEV_CN_URST;
+    MXC_USB->dev_cn = 0;
+    MXC_USB->cn = 0;
+}
+
+void USBHAL::connect(void)
+{
+    // enable interrupts
+    MXC_USB->dev_inten |= CONNECT_INTS;
+
+    // allow interrupts on ep0
+    MXC_USB->ep[0] |= MXC_F_USB_EP_INT_EN;
+
+    // pullup enable
+    MXC_USB->dev_cn |= (MXC_F_USB_DEV_CN_CONNECT | MXC_F_USB_DEV_CN_FIFO_MODE);
+}
+
+void USBHAL::disconnect(void)
+{
+    // disable interrupts
+    MXC_USB->dev_inten &= ~CONNECT_INTS;
+
+    // disable pullup
+    MXC_USB->dev_cn &= ~MXC_F_USB_DEV_CN_CONNECT;
+}
+
+void USBHAL::configureDevice(void)
+{
+    // do nothing
+}
+
+void USBHAL::unconfigureDevice(void)
+{
+    // reset endpoints
+    for (int i = 0; i < MXC_USB_NUM_EP; i++) {
+        // Disable endpoint and clear the data toggle
+        MXC_USB->ep[i] &= ~MXC_F_USB_EP_DIR;
+        MXC_USB->ep[i] |= MXC_F_USB_EP_DT;
+    }
+}
+
+void USBHAL::setAddress(uint8_t address)
+{
+    // do nothing
+}
+
+void USBHAL::remoteWakeup(void)
+{
+    // do nothing
+}
+
+static ep_buffer_t *get_desc(uint8_t endpoint)
+{
+    uint8_t epnum = EP_NUM(endpoint);
+    ep_buffer_t *desc;
+
+    if (epnum == 0) {
+        if (IN_EP(endpoint)) {
+            desc = &ep_buffer_descriptor.ep0.in_buffer;
+        } else {
+            desc = &ep_buffer_descriptor.ep0.out_buffer;
+        }
+    } else {
+        desc = &ep_buffer_descriptor.ep[epnum - 1];
+    }
+
+    return desc;
+}
+
+void USBHAL::EP0setup(uint8_t *buffer)
+{
+    // Setup packet is fixed at 8 bytes
+    // Setup registers cannot be read in byte mode
+    uint32_t *ptr32 = (uint32_t*)buffer;
+    ptr32[0] = (uint32_t)MXC_USB->setup0;
+    ptr32[1] = (uint32_t)MXC_USB->setup1;
+}
+
+void USBHAL::EP0read(void)
+{
+    if (control_state == CTRL_IN) {
+        // This is the status stage. ACK.
+        MXC_USB->ep[0] |= MXC_F_USB_EP_ST_ACK;
+        control_state = CTRL_NONE;
+        return;
+    }
+
+    control_state = CTRL_OUT;
+
+    endpointRead(EP0OUT, MAX_PACKET_SIZE_EP0);
+}
+
+void USBHAL::EP0readStage(void)
+{
+    // do nothing
+}
+
+uint32_t USBHAL::EP0getReadResult(uint8_t *buffer)
+{
+    uint32_t size;
+
+    if (MXC_USB->out_owner & 1) {
+        return 0;
+    }
+
+    // get the packet length and contents
+    ep_buffer_t *desc = get_desc(EP0OUT);
+    size = desc->buf0_desc;
+    memcpy(buffer, aligned_buffer[0], size);
+
+    return size;
+}
+
+void USBHAL::EP0write(uint8_t *buffer, uint32_t size)
+{
+    if ((size == 0) && (control_state != CTRL_IN)) {
+        // This is a status stage ACK. Handle in hardware.
+        MXC_USB->ep[0] |= MXC_F_USB_EP_ST_ACK;
+        control_state = CTRL_NONE;
+        return;
+    }
+
+    control_state = CTRL_IN;
+
+    endpointWrite(EP0IN, buffer, size);
+}
+
+void USBHAL::EP0stall(void)
+{
+    stallEndpoint(0);
+}
+
+EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize)
+{
+    uint8_t epnum = EP_NUM(endpoint);
+
+    if ((endpoint >= NUMBER_OF_PHYSICAL_ENDPOINTS) || IN_EP(endpoint)) {
+        return EP_INVALID;
+    }
+
+    if (maximumSize > MXC_USB_MAX_PACKET) {
+        return EP_INVALID;
+    }
+    
+    uint32_t mask = (1 << epnum);
+    if (MXC_USB->out_owner & mask) {
+        return EP_INVALID;
+    }
+
+    ep_buffer_t *desc = get_desc(endpoint);
+    desc->buf0_desc = maximumSize;
+    desc->buf0_address = (uint32_t)aligned_buffer[epnum];
+
+    MXC_USB->out_owner = mask;
+
+    return EP_PENDING;
+}
+
+EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t *data, uint32_t *bytesRead)
+{
+    if ((endpoint >= NUMBER_OF_PHYSICAL_ENDPOINTS) || IN_EP(endpoint)) {
+        return EP_INVALID;
+    }
+
+    uint32_t mask = (1 << EP_NUM(endpoint));
+    if (MXC_USB->out_owner & mask) {
+        return EP_PENDING;
+    }
+
+    // get the packet length and contents
+    ep_buffer_t *desc = get_desc(endpoint);
+    *bytesRead = desc->buf0_desc;
+    memcpy(data, aligned_buffer[EP_NUM(endpoint)], *bytesRead);
+
+    return EP_COMPLETED;
+}
+
+EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size)
+{
+    uint8_t epnum = EP_NUM(endpoint);
+
+    if ((endpoint >= NUMBER_OF_PHYSICAL_ENDPOINTS) || OUT_EP(endpoint)) {
+        return EP_INVALID;
+    }
+
+    if (size > MXC_USB_MAX_PACKET) {
+        return EP_INVALID;
+    }
+
+    uint32_t mask = (1 << epnum);
+    if (MXC_USB->in_owner & mask) {
+        return EP_INVALID;
+    }
+
+    memcpy(aligned_buffer[epnum], data, size);
+
+    ep_buffer_t *desc = get_desc(endpoint);
+    desc->buf0_desc = size;
+    desc->buf0_address = (uint32_t)aligned_buffer[epnum];
+
+    // start the DMA
+    MXC_USB->in_owner = mask;
+
+    return EP_PENDING;
+}
+
+EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint)
+{
+    uint32_t mask = (1 << EP_NUM(endpoint));
+    if (MXC_USB->in_owner & mask) {
+        return EP_PENDING;
+    }
+
+    return EP_COMPLETED;
+}
+
+void USBHAL::stallEndpoint(uint8_t endpoint)
+{
+    uint8_t epnum = EP_NUM(endpoint);
+
+    if (epnum == 0) {
+        MXC_USB->ep[epnum] |= MXC_F_USB_EP_ST_STALL;
+    }
+
+    MXC_USB->ep[epnum] |= MXC_F_USB_EP_STALL;
+}
+
+void USBHAL::unstallEndpoint(uint8_t endpoint)
+{
+    MXC_USB->ep[EP_NUM(endpoint)] &= ~MXC_F_USB_EP_STALL;
+}
+
+bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t options)
+{
+    uint8_t epnum = EP_NUM(endpoint);
+    uint32_t ep_ctrl;
+
+    if (epnum >= NUMBER_OF_PHYSICAL_ENDPOINTS) {
+        return false;
+    }
+
+    if (IN_EP(endpoint)) {
+        ep_ctrl = (MXC_V_USB_EP_DIR_IN << MXC_F_USB_EP_DIR_POS);
+    } else {
+        ep_ctrl = (MXC_S_USB_EP_DIR_OUT << MXC_F_USB_EP_DIR_POS);
+    }
+
+    ep_ctrl |= (MXC_F_USB_EP_DT | MXC_F_USB_EP_INT_EN);
+
+    MXC_USB->ep[epnum] = ep_ctrl;
+
+    return true;
+}
+
+bool USBHAL::getEndpointStallState(unsigned char endpoint)
+{
+    return !!(MXC_USB->ep[endpoint] & MXC_F_USB_EP_STALL);
+}
+
+void USBHAL::_usbisr(void)
+{
+    instance->usbisr();
+}
+
+void USBHAL::usbisr(void)
+{
+    // get and clear irqs
+    uint32_t irq_flags = MXC_USB->dev_intfl;
+    MXC_USB->dev_intfl = irq_flags;
+
+    // process only enabled interrupts
+    irq_flags &= MXC_USB->dev_inten;
+
+    // suspend 
+    if (irq_flags & MXC_F_USB_DEV_INTFL_SUSP) {
+        suspendStateChanged(1);
+    }
+
+    // bus reset
+    if (irq_flags & MXC_F_USB_DEV_INTFL_BRST) {
+
+        // reset endpoints
+        for (int i = 0; i < MXC_USB_NUM_EP; i++) {
+            // Disable endpoint and clear the data toggle
+            MXC_USB->ep[i] &= ~MXC_F_USB_EP_DIR;
+            MXC_USB->ep[i] |= MXC_F_USB_EP_DT;
+        }
+
+        // clear driver state
+        control_state = CTRL_NONE;
+
+        busReset();
+
+        // no need to process events after reset
+        return;
+    }
+
+    // Setup packet
+    if (irq_flags & MXC_F_USB_DEV_INTFL_SETUP) {
+        control_state = CTRL_SETUP;
+        EP0setupCallback();
+    }
+
+    // IN packets
+    if (irq_flags & MXC_F_USB_DEV_INTFL_EP_IN) {
+        // get and clear IN irqs
+        uint32_t in_irqs = MXC_USB->in_int;
+        MXC_USB->in_int = in_irqs;
+
+        if (in_irqs & 1) {
+            EP0in();
+        }
+
+        for (uint8_t epnum = 1; epnum < NUMBER_OF_LOGICAL_ENDPOINTS; epnum++) {
+            uint32_t irq_mask = (1 << epnum);
+            if (in_irqs & irq_mask) {
+                uint8_t endpoint = (epnum << 1) | DIR_IN;
+                (instance->*(epCallback[endpoint]))();
+            }
+        }
+    }
+
+    // OUT packets
+    if (irq_flags & MXC_F_USB_DEV_INTFL_EP_OUT) {
+        // get and clear OUT irqs
+        uint32_t out_irqs = MXC_USB->out_int;
+        MXC_USB->out_int = out_irqs;
+
+        if (out_irqs & 1) {
+            EP0out();
+        }
+
+        for (uint8_t epnum = 1; epnum < NUMBER_OF_LOGICAL_ENDPOINTS; epnum++) {
+            uint32_t irq_mask = (1 << epnum);
+            if (out_irqs & irq_mask) {
+                uint8_t endpoint = (epnum << 1) | DIR_OUT;
+                (instance->*(epCallback[endpoint]))();
+            }
+        }
+    }
+}
+
+#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_NUVOTON/TARGET_M451/USBEndpoints_M453.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_NUVOTON/TARGET_M451/USBEndpoints_M453.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,79 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2015-2016 Nuvoton
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#define NU_MAX_EPX_BUFSIZE      4096
+#define NU_EP2EPL(ep)           ((ep) >> 1)
+#define NU_EP2EPH(ep)           (((ep) >> 1) + 1)
+#define NU_EPL2EPH(ep)          ((ep) + 1)
+#define NU_EPH2EPL(ep)          ((ep) - 1)
+#define NU_EP_DIR_Pos           0
+#define NU_EP_DIR_Msk           (1 << NU_EP_DIR_Pos)
+#define NU_EP_DIR_OUT           0
+#define NU_EP_DIR_IN            1
+
+#define NU_EP_TYPE(ep)          (((ep) & NU_EP_TYPE_Msk) >> NU_EP_TYPE_Pos)
+#define NU_EP_NUM(ep)           (((ep) & NU_EP_NUM_Msk) >> NU_EP_NUM_Pos)
+#define NU_EP_DIR(ep)           (((ep) & NU_EP_DIR_Msk) >> NU_EP_DIR_Pos)
+#define NU_EP_NUM_DIR(ep)       ((NU_EP_NUM(ep) << 1) | NU_EP_DIR(ep))
+
+#define NUMBER_OF_PHYSICAL_ENDPOINTS    8
+#define EP0OUT      (0)
+#define EP0IN       (1)
+#define EP1OUT      (2)
+#define EP1IN       (3)
+#define EP2OUT      (4)
+#define EP2IN       (5)
+#define EP3OUT      (6)
+#define EP3IN       (7)
+#define EP4OUT      (8)
+#define EP4IN       (9)
+#define EP5OUT     (10)
+#define EP5IN      (11)
+#define EP6OUT     (12)
+#define EP6IN      (13)
+
+/* Maximum Packet sizes */
+#define MAX_PACKET_SIZE_EP0     64
+#define MAX_PACKET_SIZE_EP1     64
+#define MAX_PACKET_SIZE_EP2     64
+#define MAX_PACKET_SIZE_EP3     0x60
+#define MAX_PACKET_SIZE_EP4     64
+#define MAX_PACKET_SIZE_EP5     64
+#define MAX_PACKET_SIZE_EP6     64
+#define MAX_PACKET_SIZE_EP7     64
+
+/* Generic endpoints - intended to be portable accross devices */
+/* and be suitable for simple USB devices. */
+
+/* Bulk endpoints */
+#define EPBULK_OUT            EP5OUT
+#define EPBULK_IN             EP6IN
+#define EPBULK_OUT_callback   EP5_OUT_callback
+#define EPBULK_IN_callback    EP6_IN_callback
+/* Interrupt endpoints */
+#define EPINT_OUT             EP1OUT
+#define EPINT_IN              EP2IN
+#define EPINT_OUT_callback    EP1_OUT_callback
+#define EPINT_IN_callback     EP2_IN_callback
+/* Isochronous endpoints */
+#define EPISO_OUT             EP3OUT
+#define EPISO_IN              EP4IN
+#define EPISO_OUT_callback    EP3_OUT_callback
+#define EPISO_IN_callback     EP4_IN_callback
+
+#define MAX_PACKET_SIZE_EPBULK  64
+#define MAX_PACKET_SIZE_EPINT   64
+#define MAX_PACKET_SIZE_EPISO   1023
+
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_NUVOTON/TARGET_M451/USBHAL_M453.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_NUVOTON/TARGET_M451/USBHAL_M453.cpp	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,465 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2015-2016 Nuvoton
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined(TARGET_NUMAKER_PFM_M453)
+
+#include "USBHAL.h"
+#include "M451Series.h"
+#include "pinmap.h"
+
+/**
+ * EP: mbed USBD defined endpoint, e.g. EP0OUT/IN, EP1OUT/IN, EP2OUT/IN.
+ * EPX: BSP defined endpoint, e.g. CEP, EPA, EPB, EPC.
+ */
+
+USBHAL * USBHAL::instance;
+
+/* Global variables for Control Pipe */
+extern uint8_t g_usbd_SetupPacket[];        /*!< Setup packet buffer */
+
+static volatile uint32_t s_ep_compl = 0;
+static volatile uint32_t s_ep_buf_ind = 8;
+static volatile uint8_t s_usb_addr = 0;
+static volatile uint8_t s_ep_data_bit[NUMBER_OF_PHYSICAL_ENDPOINTS] = {1};
+static volatile uint8_t s_ep_mxp[NUMBER_OF_PHYSICAL_ENDPOINTS] = {0};
+
+extern volatile uint8_t *g_usbd_CtrlInPointer;
+extern volatile uint32_t g_usbd_CtrlInSize;
+extern volatile uint8_t *g_usbd_CtrlOutPointer;
+extern volatile uint32_t g_usbd_CtrlOutSize;
+extern volatile uint32_t g_usbd_CtrlOutSizeLimit;
+extern volatile uint32_t g_usbd_UsbConfig;
+extern volatile uint32_t g_usbd_CtrlMaxPktSize;
+extern volatile uint32_t g_usbd_UsbAltInterface;
+volatile uint32_t g_usbd_CepTransferLen = 0;
+volatile uint32_t frame_cnt = 0;
+USBHAL::USBHAL(void)
+{
+    SYS_UnlockReg();
+
+    s_ep_buf_ind = 8;
+
+    memset(epCallback, 0x00, sizeof (epCallback));
+    epCallback[0] = &USBHAL::EP1_OUT_callback;
+    epCallback[1] = &USBHAL::EP2_IN_callback;
+    epCallback[2] = &USBHAL::EP3_OUT_callback;
+    epCallback[3] = &USBHAL::EP4_IN_callback;
+    epCallback[4] = &USBHAL::EP5_OUT_callback;
+    epCallback[5] = &USBHAL::EP6_IN_callback;
+
+    instance = this;
+    /* Enable USBD module clock */
+    CLK_EnableModuleClock(USBD_MODULE);
+
+    CLK_SetModuleClock(USBD_MODULE, 0, CLK_CLKDIV0_USB(3));
+
+    /* Enable USB LDO33 */
+    SYS->USBPHY = SYS_USBPHY_LDO33EN_Msk;
+
+    /* Initial USB engine */
+    USBD->ATTR = 0x7D0;
+
+    /* Set SE0 (disconnect) */
+    USBD_SET_SE0();
+
+    //NVIC_SetVector(OTG_FS_IRQn, (uint32_t) &_usbisr);
+    NVIC_SetVector(USBD_IRQn, (uint32_t) &_usbisr);
+    NVIC_EnableIRQ(USBD_IRQn);
+}
+
+USBHAL::~USBHAL(void)
+{
+    NVIC_DisableIRQ(USBD_IRQn);
+    USBD_SET_SE0();
+    USBD_DISABLE_PHY();
+}
+
+void USBHAL::connect(void)
+{
+    USBD->STBUFSEG = 0;
+    frame_cnt = 0;
+    /* EP0 ==> control IN endpoint, address 0 */
+    USBD_CONFIG_EP(EP0, USBD_CFG_CSTALL | USBD_CFG_EPMODE_IN | 0);
+    /* Buffer range for EP0 */
+    USBD_SET_EP_BUF_ADDR(EP0, s_ep_buf_ind);
+
+    /* EP1 ==> control OUT endpoint, address 0 */
+    USBD_CONFIG_EP(EP1, USBD_CFG_CSTALL | USBD_CFG_EPMODE_OUT | 0);
+    /* Buffer range for EP1 */
+    USBD_SET_EP_BUF_ADDR(EP1, s_ep_buf_ind);
+
+    s_ep_buf_ind += MAX_PACKET_SIZE_EP0;
+
+    /* Disable software-disconnect function */
+    USBD_CLR_SE0();
+
+    /* Clear USB-related interrupts before enable interrupt */
+    USBD_CLR_INT_FLAG(USBD_INT_BUS | USBD_INT_USB | USBD_INT_FLDET | USBD_INT_WAKEUP);
+
+    /* Enable USB-related interrupts. */
+    USBD_ENABLE_INT(USBD_INT_BUS | USBD_INT_USB | USBD_INT_FLDET | USBD_INT_WAKEUP);
+}
+
+void USBHAL::disconnect(void)
+{
+    /* Set SE0 (disconnect) */
+    USBD_SET_SE0();
+}
+
+void USBHAL::configureDevice(void)
+{
+    /**
+     * In USBDevice.cpp > USBDevice::requestSetConfiguration, configureDevice() is called after realiseEndpoint() (in USBCallback_setConfiguration()).
+     * So we have the following USB buffer management policy:
+     *  1. Allocate for CEP on connect().
+     *  2. Allocate for EPX in realiseEndpoint().
+     *  3. Deallocate all except for CEP in unconfigureDevice().
+     */
+}
+
+void USBHAL::unconfigureDevice(void)
+{
+    s_ep_buf_ind = 8;
+}
+
+void USBHAL::setAddress(uint8_t address)
+{
+    // NOTE: Delay address setting; otherwise, USB controller won't ack.
+    s_usb_addr = address;
+}
+
+void USBHAL::remoteWakeup(void)
+{
+#if 0
+    USBD->OPER |= USBD_OPER_RESUMEEN_Msk;
+#endif
+}
+
+bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t options)
+{
+    uint32_t ep_type = 0;
+    uint32_t ep_hw_index = NU_EP2EPH(endpoint);
+    uint32_t ep_logic_index = NU_EP2EPL(endpoint);
+    uint32_t ep_dir = (NU_EP_DIR(endpoint) == NU_EP_DIR_IN) ? USBD_CFG_EPMODE_IN : USBD_CFG_EPMODE_OUT;
+
+    if (ep_logic_index == 3 || ep_logic_index == 4)
+        ep_type = USBD_CFG_TYPE_ISO;
+
+    USBD_CONFIG_EP(ep_hw_index, ep_dir | ep_type | ep_logic_index);
+    /* Buffer range */
+    USBD_SET_EP_BUF_ADDR(ep_hw_index, s_ep_buf_ind);
+
+    if (ep_dir == USBD_CFG_EPMODE_OUT)
+        USBD_SET_PAYLOAD_LEN(ep_hw_index, maxPacket);
+
+    s_ep_mxp[ep_logic_index] = maxPacket;
+
+    s_ep_buf_ind += maxPacket;
+
+    return true;
+}
+
+void USBHAL::EP0setup(uint8_t *buffer)
+{
+    uint32_t sz;
+    endpointReadResult(EP0OUT, buffer, &sz);
+}
+
+void USBHAL::EP0read(void)
+{
+
+
+}
+
+void USBHAL::EP0readStage(void)
+{
+    // N/A
+
+    USBD_PrepareCtrlOut(0,0);
+}
+
+uint32_t USBHAL::EP0getReadResult(uint8_t *buffer)
+{
+    uint32_t i;
+    uint8_t *buf = (uint8_t *)(USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(EP1));
+    uint32_t ceprxcnt = USBD_GET_PAYLOAD_LEN(EP1);
+    for (i = 0; i < ceprxcnt; i ++)
+        buffer[i] = buf[i];
+    USBD_SET_PAYLOAD_LEN(EP1, MAX_PACKET_SIZE_EP0);
+    return ceprxcnt;
+}
+
+void USBHAL::EP0write(uint8_t *buffer, uint32_t size)
+{
+    if (buffer && size)
+    {
+        if (s_ep_data_bit[0] & 1)
+            USBD_SET_DATA1(EP0);
+        else
+            USBD_SET_DATA0(EP0);
+        s_ep_data_bit[0]++;
+
+        USBD_MemCopy((uint8_t *)USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(EP0), buffer, size);
+        USBD_SET_PAYLOAD_LEN(EP0, size);
+        if (size < MAX_PACKET_SIZE_EP0)
+            s_ep_data_bit[0] = 1;
+
+    }
+    else
+    {
+        if (g_usbd_SetupPacket[0] & 0x80)   //Device to Host
+        {
+            // Status stage
+            //          USBD_PrepareCtrlOut(0,0);
+        } else
+        {
+            USBD_SET_DATA1(EP0);
+            USBD_SET_PAYLOAD_LEN(EP0, 0);
+        }
+    }
+}
+
+void USBHAL::EP0getWriteResult(void)
+{
+    // N/A
+}
+
+void USBHAL::EP0stall(void)
+{
+    stallEndpoint(EP0OUT);
+}
+
+EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize)
+{
+    return EP_PENDING;
+}
+
+EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_t *bytesRead) //spcheng
+{
+    if (endpoint == EP0OUT)
+    {
+        USBD_MemCopy(g_usbd_SetupPacket, (uint8_t *)USBD_BUF_BASE, 8);
+        if (buffer) {
+            USBD_MemCopy(buffer, g_usbd_SetupPacket, 8);
+        }
+        USBD_SET_PAYLOAD_LEN(EP1, MAX_PACKET_SIZE_EP0);
+    }
+    else
+    {
+        uint32_t i;
+        uint8_t *buf = (uint8_t *)(USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(NU_EP2EPH(endpoint)));
+        uint32_t eprxcnt = USBD_GET_PAYLOAD_LEN(NU_EP2EPH(endpoint));
+        for (i = 0; i < eprxcnt; i ++)
+            buffer[i] = buf[i];
+
+        *bytesRead = eprxcnt;
+
+        USBD_SET_PAYLOAD_LEN(NU_EP2EPH(endpoint),s_ep_mxp[NU_EPH2EPL(NU_EP2EPL(endpoint))]);
+    }
+    return EP_COMPLETED;
+}
+
+
+uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer)
+{
+    return 0;
+}
+
+EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size)
+{
+    uint32_t ep_logic_index = NU_EP2EPL(endpoint);
+    if (ep_logic_index == 0)
+        return EP_INVALID;
+    else
+    {
+        uint8_t *buf;
+        uint32_t i=0;
+        uint32_t ep_hw_index = NU_EP2EPH(endpoint);
+        s_ep_compl |= (1 << ep_logic_index);
+        buf = (uint8_t *)(USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(ep_hw_index));
+        for (i=0;i<size;i++)
+            buf[i] = data[i];
+
+        /* Set transfer length and trigger IN transfer */
+        USBD_SET_PAYLOAD_LEN(ep_hw_index, size);
+
+    }
+    return EP_PENDING;
+}
+
+EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint)
+{
+    if (!(s_ep_compl & (1 << NU_EP2EPL(endpoint))))
+        return EP_COMPLETED;
+    return EP_PENDING;
+}
+
+void USBHAL::stallEndpoint(uint8_t endpoint)
+{
+    uint32_t ep_hw_index = NU_EP2EPH(endpoint);
+    if (ep_hw_index >= NUMBER_OF_PHYSICAL_ENDPOINTS)
+        return;
+
+    USBD_SetStall(NU_EPH2EPL(ep_hw_index));
+
+}
+
+void USBHAL::unstallEndpoint(uint8_t endpoint)
+{
+    uint32_t ep_hw_index = NU_EP2EPH(endpoint);
+    if (ep_hw_index >= NUMBER_OF_PHYSICAL_ENDPOINTS)
+        return;
+    USBD_ClearStall(NU_EPH2EPL(ep_hw_index));
+}
+
+bool USBHAL::getEndpointStallState(uint8_t endpoint)
+{
+    uint32_t ep_hw_index = NU_EP2EPH(endpoint);
+    if (ep_hw_index >= NUMBER_OF_PHYSICAL_ENDPOINTS)
+        return false;
+
+    return USBD_GetStall(NU_EPH2EPL(ep_hw_index)) ? 1 : 0;
+}
+
+void USBHAL::_usbisr(void)
+{
+    MBED_ASSERT(instance);
+    instance->usbisr();
+}
+
+void USBHAL::usbisr(void)
+{
+    uint32_t u32IntSts = USBD_GET_INT_FLAG();
+    uint32_t u32State = USBD_GET_BUS_STATE();
+
+//------------------------------------------------------------------
+    if (u32IntSts & USBD_INTSTS_VBDETIF_Msk)
+    {
+        // Floating detect
+        USBD_CLR_INT_FLAG(USBD_INTSTS_VBDETIF_Msk);
+
+        if (USBD_IS_ATTACHED())
+        {
+            /* USB Plug In */
+            USBD_ENABLE_USB();
+        }
+        else
+        {
+            /* USB Un-plug */
+            USBD_DISABLE_USB();
+        }
+    }
+
+//------------------------------------------------------------------
+    if (u32IntSts & USBD_INTSTS_BUSIF_Msk)
+    {
+        /* Clear event flag */
+        USBD_CLR_INT_FLAG(USBD_INTSTS_BUSIF_Msk);
+
+        if (u32State & USBD_ATTR_USBRST_Msk)
+        {
+            /* Bus reset */
+            USBD_ENABLE_USB();
+            USBD_SwReset();
+        }
+        if (u32State & USBD_ATTR_SUSPEND_Msk)
+        {
+            /* Enable USB but disable PHY */
+            USBD_DISABLE_PHY();
+        }
+        if (u32State & USBD_ATTR_RESUME_Msk)
+        {
+            /* Enable USB and enable PHY */
+            USBD_ENABLE_USB();
+        }
+    }
+
+    if (u32IntSts & USBD_INTSTS_USBIF_Msk)
+    {
+        // USB event
+        if (u32IntSts & USBD_INTSTS_SETUP_Msk)
+        {
+            // Setup packet
+            /* Clear event flag */
+            USBD_CLR_INT_FLAG(USBD_INTSTS_SETUP_Msk);
+
+            /* Clear the data IN/OUT ready flag of control end-points */
+            USBD_STOP_TRANSACTION(EP0);
+            USBD_STOP_TRANSACTION(EP1);
+            EP0setupCallback();
+        }
+
+        // EP events
+        if (u32IntSts & USBD_INTSTS_EP0)
+        {
+            /* Clear event flag */
+            USBD_CLR_INT_FLAG(USBD_INTSTS_EP0);
+            // control IN
+            EP0in();
+
+            // In ACK for Set address
+            if ((g_usbd_SetupPacket[0] == REQ_STANDARD) && (g_usbd_SetupPacket[1] == USBD_SET_ADDRESS))
+            {
+                if ((USBD_GET_ADDR() != s_usb_addr) && (USBD_GET_ADDR() == 0))
+                {
+                    USBD_SET_ADDR(s_usb_addr);
+                }
+            }
+        }
+        if (u32IntSts & USBD_INTSTS_EP1)
+        {
+            /* Clear event flag */
+            USBD_CLR_INT_FLAG(USBD_INTSTS_EP1);
+
+            // control OUT
+            EP0out();
+        }
+
+        uint32_t gintsts_epx = (u32IntSts >> 18) & 0x3F;
+        uint32_t ep_hw_index = 2;
+        while (gintsts_epx) {
+            if (gintsts_epx & 0x01)
+            {
+                uint32_t ep_status = (USBD_GET_EP_FLAG() >> (ep_hw_index * 3 + 8)) & 0x7;
+                /* Clear event flag */
+                USBD_CLR_INT_FLAG(1 << (ep_hw_index + 16));
+
+                if (ep_status == 0x02 || ep_status == 0x06 || (ep_status == 0x07 && NU_EPH2EPL(ep_hw_index) == 3))  //RX
+                {
+                    if (ep_status == 0x07)
+                        SOF(frame_cnt++);
+                    if ((instance->*(epCallback[ep_hw_index-2]))())
+                    {
+
+                    }
+                    USBD_SET_PAYLOAD_LEN(ep_hw_index,s_ep_mxp[NU_EPH2EPL(ep_hw_index)]);
+                }
+                else if (ep_status == 0x00 || ep_status == 0x07)    //TX
+                {
+                    s_ep_compl &= ~(1 << (NU_EPH2EPL(ep_hw_index)));
+                    if ((instance->*(epCallback[ep_hw_index-2]))())
+                    {
+                    }
+                }
+            }
+
+            gintsts_epx = gintsts_epx >> 1;
+            ep_hw_index++;
+        }
+    }
+}
+#endif
+
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_NUVOTON/TARGET_NUC472/USBEndpoints_NUC472.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_NUVOTON/TARGET_NUC472/USBEndpoints_NUC472.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,89 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2015-2016 Nuvoton
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#define NU_MAX_EPX_BUFSIZE      4096
+#define NU_EP2EPL(ep)           ((ep) >> 1)
+#define NU_EP2EPH(ep)           (((ep) >> 1) - 1)
+#define NU_EPX2EP(ep)           ((ep == CEP) ? EP0OUT : ((ep) - EPA + EP1OUT))
+#define NU_EPL2EPH(ep)          ((ep) - 1)
+#define NU_EPH2EPL(ep)          ((ep) + 1)
+#define NU_EP_DIR_Pos           0
+#define NU_EP_DIR_Msk           (1 << NU_EP_DIR_Pos)
+#define NU_EP_DIR_OUT           0
+#define NU_EP_DIR_IN            1
+
+#define NU_EP_TYPE(ep)          (((ep) & NU_EP_TYPE_Msk) >> NU_EP_TYPE_Pos)
+#define NU_EP_NUM(ep)           (((ep) & NU_EP_NUM_Msk) >> NU_EP_NUM_Pos)
+#define NU_EP_DIR(ep)           (((ep) & NU_EP_DIR_Msk) >> NU_EP_DIR_Pos)
+#define NU_EP_NUM_DIR(ep)       ((NU_EP_NUM(ep) << 1) | NU_EP_DIR(ep))
+
+#define NUMBER_OF_PHYSICAL_ENDPOINTS    12
+
+#define EP0OUT      (0)
+#define EP0IN       (1)
+#define EP1OUT      (2)
+#define EP1IN       (3)
+#define EP2OUT      (4)
+#define EP2IN       (5)
+#define EP3OUT      (6)
+#define EP3IN       (7)
+#define EP4OUT      (8)
+#define EP4IN       (9)
+#define EP5OUT     (10)
+#define EP5IN      (11)
+#define EP6OUT     (12)
+#define EP6IN      (13)
+
+/* Maximum Packet sizes */
+#define MAX_PACKET_SIZE_EP0     64
+#define MAX_PACKET_SIZE_EP1     64
+#define MAX_PACKET_SIZE_EP2     64
+#define MAX_PACKET_SIZE_EP3     0x60
+#define MAX_PACKET_SIZE_EP4     64
+#define MAX_PACKET_SIZE_EP5     64
+#define MAX_PACKET_SIZE_EP6     64
+#define MAX_PACKET_SIZE_EP7     64
+#define MAX_PACKET_SIZE_EP8     64
+#define MAX_PACKET_SIZE_EP9     64
+#define MAX_PACKET_SIZE_EP10    64
+#define MAX_PACKET_SIZE_EP11    64
+
+/* Generic endpoints - intended to be portable accross devices */
+/* and be suitable for simple USB devices. */
+
+/* Bulk endpoints */
+#define EPBULK_OUT            EP5OUT
+#define EPBULK_IN             EP6IN
+#define EPBULK_OUT_callback   EP5_OUT_callback
+#define EPBULK_IN_callback    EP6_IN_callback
+/* Interrupt endpoints */
+#define EPINT_OUT             EP1OUT
+#define EPINT_IN              EP2IN
+#define EPINT_OUT_callback    EP1_OUT_callback
+#define EPINT_IN_callback     EP2_IN_callback
+/* Isochronous endpoints */
+#define EPISO_OUT             EP3OUT
+#define EPISO_IN              EP4IN
+#define EPISO_OUT_callback    EP3_OUT_callback
+#define EPISO_IN_callback     EP4_IN_callback
+
+#define MAX_PACKET_SIZE_EPBULK  64
+#define MAX_PACKET_SIZE_EPINT   64
+#define MAX_PACKET_SIZE_EPISO   1023
+
+#define USBD_GET_EP_MAX_PAYLOAD(ep)     (*((__IO uint32_t *) ((uint32_t)&USBD->EPAMPS + (uint32_t)((ep)*0x28)))) 
+#define USBD_GET_EP_DATA_COUNT(ep)      ((*((__IO uint32_t *) ((uint32_t)&USBD->EPADATCNT + (uint32_t)((ep)*0x28)))) & 0xFFFFF)
+#define USBD_SET_EP_SHORT_PACKET(ep)    (*((__IO uint32_t *) ((uint32_t)&USBD->EPARSPCTL + (uint32_t)((ep)*0x28))) = (*((__IO uint32_t *) ((uint32_t)&USBD->EPARSPCTL + (uint32_t)((ep)*0x28)))) & 0x10 | 0x40)
+#define USBD_GET_EP_INT_EN(ep)          (*((__IO uint32_t *) ((uint32_t)&USBD->EPAINTEN + (uint32_t)((ep)*0x28))))
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_NUVOTON/TARGET_NUC472/USBHAL_NUC472.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_NUVOTON/TARGET_NUC472/USBHAL_NUC472.cpp	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,730 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2015-2016 Nuvoton
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined(TARGET_NUMAKER_PFM_NUC472)
+
+#include "USBHAL.h"
+#include "NUC472_442.h"
+#include "pinmap.h"
+
+/**
+ * EP: mbed USBD defined endpoint, e.g. EP0OUT/IN, EP1OUT/IN, EP2OUT/IN.
+ * EPX: BSP defined endpoint, e.g. CEP, EPA, EPB, EPC.
+ */
+
+USBHAL * USBHAL::instance;
+
+static volatile uint32_t s_ep_compl = 0;
+static volatile uint32_t s_ep_buf_ind = 0;
+static volatile uint8_t s_usb_addr = 0;
+static volatile S_USBD_CMD_T s_setup;
+static volatile uint16_t s_ctrlin_packetsize;
+static uint8_t *g_usbd_CtrlInPointer = 0;
+static uint32_t g_usbd_CtrlMaxPktSize = 64;
+static uint32_t g_usbd_ShortPkt = 0;
+static uint32_t gEpRead = 0;
+static uint32_t gEpReadCnt = 0;
+
+void USBD_CtrlInput(void)
+{
+    int volatile i;
+    uint32_t volatile count;
+
+    // Process remained data
+    if (g_usbd_CtrlInSize >= g_usbd_CtrlMaxPktSize)
+    {
+        // Data size > MXPLD
+        for (i=0; i<(g_usbd_CtrlMaxPktSize >> 2); i++, g_usbd_CtrlInPointer+=4)
+            USBD->CEPDAT = *(uint32_t *)g_usbd_CtrlInPointer;
+        USBD_START_CEP_IN(g_usbd_CtrlMaxPktSize);
+        g_usbd_CtrlInSize -= g_usbd_CtrlMaxPktSize;
+    }
+    else
+    {
+        // Data size <= MXPLD
+        for (i=0; i<(g_usbd_CtrlInSize >> 2); i++, g_usbd_CtrlInPointer+=4)
+            USBD->CEPDAT = *(uint32_t *)g_usbd_CtrlInPointer;
+
+        count = g_usbd_CtrlInSize % 4;
+        for (i=0; i<count; i++)
+            USBD->CEPDAT_BYTE = *(uint8_t *)(g_usbd_CtrlInPointer + i);
+
+        USBD_START_CEP_IN(g_usbd_CtrlInSize);
+        g_usbd_CtrlInPointer = 0;
+        g_usbd_CtrlInSize = 0;
+    }
+}
+
+USBHAL::USBHAL(void)
+{
+    SYS_UnlockReg();
+
+    s_ep_buf_ind = 0;
+
+    memset(epCallback, 0x00, sizeof (epCallback));
+    epCallback[0] = &USBHAL::EP1_OUT_callback;
+    epCallback[1] = &USBHAL::EP2_IN_callback;
+    epCallback[2] = &USBHAL::EP3_OUT_callback;
+    epCallback[3] = &USBHAL::EP4_IN_callback;
+    epCallback[4] = &USBHAL::EP5_OUT_callback;
+    epCallback[5] = &USBHAL::EP6_IN_callback;
+    epCallback[6] = &USBHAL::EP7_OUT_callback;
+    epCallback[7] = &USBHAL::EP8_IN_callback;
+    epCallback[8] = &USBHAL::EP9_OUT_callback;
+    epCallback[9] = &USBHAL::EP10_IN_callback;
+    epCallback[10] = &USBHAL::EP11_OUT_callback;
+    epCallback[11] = &USBHAL::EP12_IN_callback;
+
+    instance = this;
+
+    /* Enable USBD module clock */
+    CLK_EnableModuleClock(USBD_MODULE);
+
+    /* Enable USB PHY's LDO33. Run as USB device. */
+    SYS->USBPHY = SYS_USBPHY_USBROLE_OTG_V33_EN | SYS_USBPHY_USBROLE_STD_USBD;
+
+    /* Enable USB PHY and wait for it ready */
+    USBD_ENABLE_PHY();
+    while (1)
+    {
+        USBD->EPAMPS = 0x20;
+        if (USBD->EPAMPS == 0x20)
+            break;
+    }
+
+    /* Force to full-speed */
+    USBD->OPER = 0;//USBD_OPER_HISPDEN_Msk;
+
+    /* Set SE0 (disconnect) */
+    USBD_SET_SE0();
+
+    NVIC_SetVector(USBD_IRQn, (uint32_t) &_usbisr);
+    NVIC_EnableIRQ(USBD_IRQn);
+}
+
+USBHAL::~USBHAL(void)
+{
+    NVIC_DisableIRQ(USBD_IRQn);
+    USBD_SET_SE0();
+    USBD_DISABLE_PHY();
+}
+
+void USBHAL::connect(void)
+{
+    USBD_ResetDMA();
+    USBD_SET_ADDR(0);
+
+    /**
+      * Control Transfer Packet Size Constraints
+      * low-speed: 8
+      * full-speed: 8, 16, 32, 64
+      * high-speed: 64
+      */
+    /* Control endpoint */
+    USBD_SetEpBufAddr(CEP, s_ep_buf_ind, MAX_PACKET_SIZE_EP0);
+    s_ep_buf_ind = MAX_PACKET_SIZE_EP0;
+
+    /* Enable USB/CEP interrupt */
+    USBD_ENABLE_USB_INT(USBD_GINTEN_USBIE_Msk | USBD_GINTEN_CEPIE_Msk);
+    USBD_ENABLE_CEP_INT(USBD_CEPINTEN_SETUPPKIEN_Msk|USBD_CEPINTEN_STSDONEIEN_Msk);
+
+    /* Enable BUS interrupt */
+    USBD_ENABLE_BUS_INT(
+        USBD_BUSINTEN_DMADONEIEN_Msk |
+        USBD_BUSINTEN_RESUMEIEN_Msk |
+        USBD_BUSINTEN_RSTIEN_Msk |
+        USBD_BUSINTEN_VBUSDETIEN_Msk |
+        USBD_BUSINTEN_SOFIEN_Msk
+    );
+
+    /* Clear SE0 (connect) */
+    USBD_CLR_SE0();
+}
+
+void USBHAL::disconnect(void)
+{
+    /* Set SE0 (disconnect) */
+    USBD_SET_SE0();
+}
+
+void USBHAL::configureDevice(void)
+{
+    /**
+     * In USBDevice.cpp > USBDevice::requestSetConfiguration, configureDevice() is called after realiseEndpoint() (in USBCallback_setConfiguration()).
+     * So we have the following USB buffer management policy:
+     *  1. Allocate for CEP on connect().
+     *  2. Allocate for EPX in realiseEndpoint().
+     *  3. Deallocate all except for CEP in unconfigureDevice().
+     */
+}
+
+void USBHAL::unconfigureDevice(void)
+{
+    s_ep_buf_ind = MAX_PACKET_SIZE_EP0;
+}
+
+void USBHAL::setAddress(uint8_t address)
+{
+    // NOTE: Delay address setting; otherwise, USB controller won't ack.
+    s_usb_addr = address;
+}
+
+void USBHAL::remoteWakeup(void)
+{
+    USBD->OPER |= USBD_OPER_RESUMEEN_Msk;
+}
+
+bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t options)
+{
+    uint32_t ep_type;
+    uint32_t ep_hw_index = NU_EP2EPH(endpoint);
+
+    USBD_SetEpBufAddr(ep_hw_index, s_ep_buf_ind, maxPacket);
+    s_ep_buf_ind += maxPacket;
+    USBD_SET_MAX_PAYLOAD(ep_hw_index, maxPacket);
+
+    switch (NU_EP2EPL(endpoint))
+    {
+    case 1:    case 2:
+        ep_type = USB_EP_CFG_TYPE_INT;
+        break;
+
+    case 3:    case 4:
+        ep_type = USB_EP_CFG_TYPE_ISO;
+        break;
+
+    default:
+        ep_type = USB_EP_CFG_TYPE_BULK;
+    }
+    uint32_t ep_dir = (NU_EP_DIR(endpoint) == NU_EP_DIR_IN) ? USB_EP_CFG_DIR_IN : USB_EP_CFG_DIR_OUT;
+    USBD_ConfigEp(ep_hw_index, NU_EP2EPL(endpoint), ep_type, ep_dir);
+
+    /* Enable USB/EPX interrupt */
+    // NOTE: Require USBD_GINTEN_EPAIE_Pos, USBD_GINTEN_EPBIE_Pos, ... USBD_GINTEN_EPLIE_Pos to be consecutive.
+    USBD_ENABLE_USB_INT(USBD->GINTEN | USBD_GINTEN_USBIE_Msk |
+                        USBD_GINTEN_CEPIE_Msk |
+                        1 << (ep_hw_index + USBD_GINTEN_EPAIE_Pos));  // Added USB/EPX interrupt
+
+    if (ep_dir == 0)
+        USBD_ENABLE_EP_INT(ep_hw_index, USBD_EPINTEN_RXPKIEN_Msk);
+    else
+        USBD_ENABLE_EP_INT(ep_hw_index, USBD_EPINTEN_TXPKIEN_Msk);
+    return true;
+}
+
+void USBHAL::EP0setup(uint8_t *buffer)
+{
+    uint32_t sz;
+    endpointReadResult(EP0OUT, buffer, &sz);
+}
+
+void USBHAL::EP0read(void)
+{
+    if (s_setup.wLength && ! (s_setup.bmRequestType & 0x80))
+    {
+        // Control OUT
+        USBD_ENABLE_CEP_INT(USBD_CEPINTEN_SETUPPKIEN_Msk | USBD_CEPINTEN_RXPKIEN_Msk);
+    }
+    else
+    {
+        // Status stage
+        USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_STSDONEIF_Msk);
+        USBD_SET_CEP_STATE(USB_CEPCTL_NAKCLR);
+        USBD_ENABLE_CEP_INT(USBD_CEPINTEN_STSDONEIEN_Msk);
+    }
+}
+
+void USBHAL::EP0readStage(void)
+{
+    // N/A
+}
+
+uint32_t USBHAL::EP0getReadResult(uint8_t *buffer)
+{
+    uint32_t i;
+    uint32_t ceprxcnt = USBD->CEPRXCNT;
+    for (i = 0; i < ceprxcnt; i ++)
+        *buffer ++ = USBD->CEPDAT_BYTE;
+    return ceprxcnt;
+}
+
+void USBHAL::EP0write(uint8_t *buffer, uint32_t size)
+{
+    if (buffer && size)
+    {
+        g_usbd_CtrlInPointer = buffer;
+        g_usbd_CtrlInSize = size;
+        USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_INTKIF_Msk);
+        USBD_ENABLE_CEP_INT(USBD_CEPINTEN_INTKIEN_Msk);
+    }
+    else
+    {
+        /* Status stage */
+        s_ctrlin_packetsize = 0;
+        USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_STSDONEIF_Msk);
+        USBD_SET_CEP_STATE(USB_CEPCTL_NAKCLR);
+        USBD_ENABLE_CEP_INT(USBD_CEPINTEN_STSDONEIEN_Msk);
+    }
+}
+
+void USBHAL::EP0getWriteResult(void)
+{
+    // N/A
+}
+
+void USBHAL::EP0stall(void)
+{
+    stallEndpoint(EP0OUT);
+}
+
+EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize)
+{
+    return EP_PENDING;
+}
+
+EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_t *bytesRead) //spcheng
+{
+    if (endpoint == EP0OUT)
+    {
+        if (buffer) {
+            *((uint16_t *) (buffer + 0)) = (uint16_t) USBD->SETUP1_0;
+            *((uint16_t *) (buffer + 2)) = (uint16_t) USBD->SETUP3_2;
+            *((uint16_t *) (buffer + 4)) = (uint16_t) USBD->SETUP5_4;
+            *((uint16_t *) (buffer + 6)) = (uint16_t) USBD->SETUP7_6;
+        }
+
+        s_setup.bmRequestType = (uint8_t) (USBD->SETUP1_0 & 0xff);
+        s_setup.bRequest = (int8_t) (USBD->SETUP1_0 >> 8) & 0xff;
+        s_setup.wValue = (uint16_t) USBD->SETUP3_2;
+        s_setup.wIndex = (uint16_t) USBD->SETUP5_4;
+        s_setup.wLength = (uint16_t) USBD->SETUP7_6;
+    }
+    else
+    {
+        if (!(s_ep_compl & (1 << NU_EP2EPL(endpoint))))
+        {
+            while (1)
+            {
+                if (!(USBD->DMACTL & USBD_DMACTL_DMAEN_Msk))
+                    break;
+                else
+                    if (!USBD_IS_ATTACHED())
+                        break;
+            }
+            gEpReadCnt = USBD_GET_EP_DATA_COUNT(NU_EP2EPH(endpoint));
+            if (gEpReadCnt == 0)
+            {
+                *bytesRead = 0;
+                return EP_COMPLETED;
+            }
+            s_ep_compl |= (1 << NU_EP2EPL(endpoint));
+            USBD_SET_DMA_LEN(gEpReadCnt);
+            USBD_SET_DMA_ADDR((uint32_t)buffer);
+            USBD_SET_DMA_WRITE(NU_EP2EPL(endpoint));
+            USBD_ENABLE_DMA();
+            return EP_PENDING;;
+
+        }
+        else
+        {
+            if ((USBD->DMACTL & USBD_DMACTL_DMAEN_Msk))
+                return EP_PENDING;;
+
+            USBD_CLR_BUS_INT_FLAG(USBD_BUSINTSTS_DMADONEIF_Msk);
+            s_ep_compl &= ~(1 << NU_EP2EPL(endpoint));
+            *bytesRead = gEpReadCnt;
+        }
+    }
+    return EP_COMPLETED;
+}
+
+
+uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer)
+{
+    return 0;
+}
+
+EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size)
+{
+    uint32_t ep_logic_index = NU_EP2EPL(endpoint);
+    if (ep_logic_index == 0)
+        return EP_INVALID;
+    else
+    {
+        uint32_t ep_hw_index = NU_EP2EPH(endpoint);
+        uint32_t mps = USBD_GET_EP_MAX_PAYLOAD(ep_hw_index);
+        if (size > mps) {
+            return EP_INVALID;
+        }
+        if (size < mps)
+            g_usbd_ShortPkt = 1;
+        if (!(s_ep_compl & (1 << NU_EP2EPL(endpoint))))
+        {
+            s_ep_compl |= (1 << ep_logic_index);
+
+            while (1)
+            {
+                if (!(USBD->DMACTL & USBD_DMACTL_DMAEN_Msk))
+                    break;
+                else
+                    if (!USBD_IS_ATTACHED())
+                        break;
+            }
+            USBD_SET_DMA_LEN(size);
+            USBD_SET_DMA_ADDR((uint32_t)data);
+            USBD_SET_DMA_READ(ep_logic_index);
+            USBD_ENABLE_DMA();
+        }
+    }
+    return EP_PENDING;
+}
+
+EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint)
+{
+    if (!(s_ep_compl & (1 << NU_EP2EPL(endpoint))))
+        return EP_COMPLETED;
+    else
+    {
+        if ((USBD_GET_EP_DATA_COUNT(NU_EP2EPH(endpoint))) == 0 && !(USBD->DMACTL & USBD_DMACTL_DMAEN_Msk))
+        {
+            s_ep_compl &= ~(s_ep_compl & (1 << NU_EP2EPL(endpoint)));
+            return EP_COMPLETED;
+        }
+    }
+    return EP_PENDING;
+}
+
+void USBHAL::stallEndpoint(uint8_t endpoint)
+{
+    uint32_t ep_hw_index = NU_EP2EPH(endpoint);
+    if (ep_hw_index >= NUMBER_OF_PHYSICAL_ENDPOINTS)
+        return;
+    USBD_SetStall(ep_hw_index);
+}
+
+void USBHAL::unstallEndpoint(uint8_t endpoint)
+{
+    uint32_t ep_hw_index = NU_EP2EPH(endpoint);
+    if (ep_hw_index >= NUMBER_OF_PHYSICAL_ENDPOINTS)
+        return;
+    USBD_ClearStall(ep_hw_index);
+}
+
+bool USBHAL::getEndpointStallState(uint8_t endpoint)
+{
+    uint32_t ep_hw_index = NU_EP2EPH(endpoint);
+    if (ep_hw_index >= NUMBER_OF_PHYSICAL_ENDPOINTS)
+        return false;
+    return USBD_GetStall(ep_hw_index) ? 1 : 0;
+}
+
+void USBHAL::_usbisr(void)
+{
+    MBED_ASSERT(instance);
+    instance->usbisr();
+}
+
+void USBHAL::usbisr(void)
+{
+    uint32_t gintsts = USBD->GINTSTS & USBD->GINTEN;
+    if (! gintsts)
+        return;
+
+    if (gintsts & USBD_GINTSTS_USBIF_Msk)
+    {
+        uint32_t busintsts = USBD->BUSINTSTS & USBD->BUSINTEN;
+
+        /* SOF */
+        if (busintsts & USBD_BUSINTSTS_SOFIF_Msk)
+        {
+            USBD_CLR_BUS_INT_FLAG(USBD_BUSINTSTS_SOFIF_Msk);
+            // TODO
+            SOF(USBD->FRAMECNT >> 3);
+        }
+
+        /* Reset */
+        if (busintsts & USBD_BUSINTSTS_RSTIF_Msk)
+        {
+            connect();
+            USBD_CLR_BUS_INT_FLAG(USBD_BUSINTSTS_RSTIF_Msk);
+            USBD_CLR_CEP_INT_FLAG(0x1ffc);
+        }
+
+        /* Resume */
+        if (busintsts & USBD_BUSINTSTS_RESUMEIF_Msk)
+        {
+            USBD_ENABLE_BUS_INT(USBD_BUSINTEN_RSTIEN_Msk|USBD_BUSINTEN_SUSPENDIEN_Msk | USBD_BUSINTEN_SOFIEN_Msk | USBD_BUSINTEN_SOFIEN_Msk);
+            USBD_CLR_BUS_INT_FLAG(USBD_BUSINTSTS_RESUMEIF_Msk);
+        }
+
+        /* Suspend */
+        if (busintsts & USBD_BUSINTSTS_SUSPENDIF_Msk)
+        {
+            USBD_ENABLE_BUS_INT(USBD_BUSINTEN_RSTIEN_Msk | USBD_BUSINTEN_RESUMEIEN_Msk |USBD_BUSINTEN_SOFIEN_Msk);
+            USBD_CLR_BUS_INT_FLAG(USBD_BUSINTSTS_SUSPENDIF_Msk);
+        }
+
+        /* High-speed */
+        if (busintsts & USBD_BUSINTSTS_HISPDIF_Msk)
+        {
+            USBD_ENABLE_CEP_INT(USBD_CEPINTEN_SETUPPKIEN_Msk);
+            USBD_CLR_BUS_INT_FLAG(USBD_BUSINTSTS_HISPDIF_Msk);
+        }
+
+        /* DMA */
+        if (busintsts & USBD_BUSINTSTS_DMADONEIF_Msk)
+        {
+            if (USBD->DMACTL & 0x10) /* IN - Read */
+            {
+                if (g_usbd_ShortPkt)
+                {
+                    uint32_t ep_hw_index = NU_EPL2EPH((USBD->DMACTL & 0xF));
+                    USBD_SET_EP_SHORT_PACKET(ep_hw_index);
+                    g_usbd_ShortPkt = 0;
+                }
+            }
+            USBD_CLR_BUS_INT_FLAG(USBD_BUSINTSTS_DMADONEIF_Msk);
+        }
+
+        /* PHY clock available */
+        if (busintsts & USBD_BUSINTSTS_PHYCLKVLDIF_Msk)
+        {
+            USBD_CLR_BUS_INT_FLAG(USBD_BUSINTSTS_PHYCLKVLDIF_Msk);
+        }
+
+        /* VBUS plug-in */
+        if (busintsts & USBD_BUSINTSTS_VBUSDETIF_Msk)
+        {
+            if (USBD_IS_ATTACHED())
+            {
+                // USB plug-in
+                USBD_ENABLE_USB();
+            }
+            else
+            {
+                // USB unplug-out
+                USBD_DISABLE_USB();
+            }
+            USBD_CLR_BUS_INT_FLAG(USBD_BUSINTSTS_VBUSDETIF_Msk);
+        }
+    }
+
+    /* CEP interrupts */
+    if (gintsts & USBD_GINTSTS_CEPIF_Msk)
+    {
+        uint32_t cepintsts =  USBD->CEPINTSTS & USBD->CEPINTEN;
+
+        /* SETUP token packet */
+        if (cepintsts & USBD_CEPINTSTS_SETUPTKIF_Msk)
+        {
+            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_SETUPTKIF_Msk);
+            return;
+        }
+
+        /* SETUP transaction */
+        if (cepintsts & USBD_CEPINTSTS_SETUPPKIF_Msk)
+        {
+            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_SETUPPKIF_Msk);
+            EP0setupCallback();
+            return;
+        }
+
+        /* OUT token packet */
+        if (cepintsts & USBD_CEPINTSTS_OUTTKIF_Msk)
+        {
+            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_OUTTKIF_Msk);
+            USBD_ENABLE_CEP_INT(USBD_CEPINTEN_STSDONEIEN_Msk);
+            return;
+        }
+
+        /* IN token packet */
+        if (cepintsts & USBD_CEPINTSTS_INTKIF_Msk)
+        {
+            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_INTKIF_Msk);
+            if (!(cepintsts & USBD_CEPINTSTS_STSDONEIF_Msk))
+            {
+                USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_TXPKIF_Msk);
+                USBD_ENABLE_CEP_INT(USBD_CEPINTEN_TXPKIEN_Msk);
+                USBD_CtrlInput();
+            }
+            else
+            {
+                USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_TXPKIF_Msk);
+                USBD_ENABLE_CEP_INT(USBD_CEPINTEN_TXPKIEN_Msk|USBD_CEPINTEN_STSDONEIEN_Msk);
+            }
+            return;
+        }
+
+        /* PING packet */
+        if (cepintsts & USBD_CEPINTSTS_PINGIF_Msk)
+        {
+            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_PINGIF_Msk);
+            return;
+        }
+
+        /* IN transaction */
+        if (cepintsts & USBD_CEPINTSTS_TXPKIF_Msk)
+        {
+            EP0in();
+            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_TXPKIF_Msk);
+            return;
+        }
+
+        /* OUT transaction */
+        if (cepintsts & USBD_CEPINTSTS_RXPKIF_Msk)
+        {
+            EP0out();
+            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_RXPKIF_Msk);
+            return;
+        }
+
+        /* NAK handshake packet */
+        if (cepintsts & USBD_CEPINTSTS_NAKIF_Msk)
+        {
+            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_NAKIF_Msk);
+            return;
+        }
+
+        /* STALL handshake packet */
+        if (cepintsts & USBD_CEPINTSTS_STALLIF_Msk)
+        {
+            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_STALLIF_Msk);
+            return;
+        }
+
+        /* ERR special packet */
+        if (cepintsts & USBD_CEPINTSTS_ERRIF_Msk)
+        {
+            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_ERRIF_Msk);
+            return;
+        }
+
+        /* Status stage transaction */
+        if (cepintsts & USBD_CEPINTSTS_STSDONEIF_Msk)
+        {
+            if (s_usb_addr)
+            {
+                USBD_SET_ADDR(s_usb_addr);
+                s_usb_addr = 0;
+            }
+            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_STSDONEIF_Msk);
+            USBD_ENABLE_CEP_INT(USBD_CEPINTEN_SETUPPKIEN_Msk);
+            return;
+        }
+
+        /* Buffer Full */
+        if (cepintsts & USBD_CEPINTSTS_BUFFULLIF_Msk)
+        {
+            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_BUFFULLIF_Msk);
+            return;
+        }
+
+        /* Buffer Empty */
+        if (cepintsts & USBD_CEPINTSTS_BUFEMPTYIF_Msk)
+        {
+            USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_BUFEMPTYIF_Msk);
+            return;
+        }
+    }
+    /* EPA, EPB, EPC, ... EPL interrupts */
+    uint32_t gintsts_epx = gintsts >> 2;
+    uint32_t ep_hw_index = 0;
+    while (gintsts_epx) {
+        if (gintsts_epx & 0x01)
+        {
+            uint32_t epxintsts = USBD_GET_EP_INT_FLAG(ep_hw_index) & USBD_GET_EP_INT_EN(ep_hw_index);
+
+            USBD_CLR_EP_INT_FLAG(ep_hw_index, epxintsts);
+
+            /* Buffer Full */
+            if (epxintsts & USBD_EPINTSTS_BUFFULLIF_Msk)
+            {
+            }
+
+            /* Buffer Empty */
+            if (epxintsts & USBD_EPINTSTS_BUFEMPTYIF_Msk)
+            {
+            }
+
+            /* Short Packet Transferred */
+            if (epxintsts & USBD_EPINTSTS_SHORTTXIF_Msk)
+            {
+            }
+
+            /* Data Packet Transmitted */
+            if (epxintsts & USBD_EPINTSTS_TXPKIF_Msk)
+            {
+                s_ep_compl &= ~(1 << (NU_EPH2EPL(ep_hw_index)));
+                if ((instance->*(epCallback[ep_hw_index]))())
+                {
+                }
+            }
+
+            /* Data Packet Received */
+            if (epxintsts & USBD_EPINTSTS_RXPKIF_Msk)
+            {
+                if ((instance->*(epCallback[ep_hw_index]))())
+                {
+
+                }
+            }
+
+            /* OUT token packet */
+            if (epxintsts & USBD_EPINTSTS_OUTTKIF_Msk)
+            {
+            }
+
+            /* IN token packet */
+            if (epxintsts & USBD_EPINTSTS_INTKIF_Msk)
+            {
+            }
+
+            /* PING packet */
+            if (epxintsts & USBD_EPINTSTS_PINGIF_Msk)
+            {
+            }
+
+            /* NAK handshake packet sent to Host */
+            if (epxintsts & USBD_EPINTSTS_NAKIF_Msk)
+            {
+            }
+
+            /* STALL handshake packet sent to Host */
+            if (epxintsts & USBD_EPINTSTS_STALLIF_Msk)
+            {
+            }
+
+            /* NYET handshake packet sent to Host */
+            if (epxintsts & USBD_EPINTSTS_NYETIF_Msk)
+            {
+            }
+
+            /* ERR packet sent to Host */
+            if (epxintsts & USBD_EPINTSTS_ERRIF_Msk)
+            {
+            }
+
+            /* Bulk Out Short Packet Received */
+            if (epxintsts & USBD_EPINTSTS_SHORTRXIF_Msk)
+            {
+            }
+        }
+        gintsts_epx = gintsts_epx >> 1;
+        ep_hw_index++;
+    }
+}
+#endif
+
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_NXP/USBEndpoints_LPC11U.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_NXP/USBEndpoints_LPC11U.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,71 @@
+/* Copyright (c) 2010-2011 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#define NUMBER_OF_LOGICAL_ENDPOINTS (5)
+#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS * 2)
+
+/* Define physical endpoint numbers */
+
+/*      Endpoint    No.     Type(s)       MaxPacket   DoubleBuffer  */
+/*      ----------------    ------------  ----------  ---           */
+#define EP0OUT      (0)  /* Control       64          No            */
+#define EP0IN       (1)  /* Control       64          No            */
+#define EP1OUT      (2)  /* Int/Bulk/Iso  64/64/1023  Yes           */
+#define EP1IN       (3)  /* Int/Bulk/Iso  64/64/1023  Yes           */
+#define EP2OUT      (4)  /* Int/Bulk/Iso  64/64/1023  Yes           */
+#define EP2IN       (5)  /* Int/Bulk/Iso  64/64/1023  Yes           */
+#define EP3OUT      (6)  /* Int/Bulk/Iso  64/64/1023  Yes           */
+#define EP3IN       (7)  /* Int/Bulk/Iso  64/64/1023  Yes           */
+#define EP4OUT      (8)  /* Int/Bulk/Iso  64/64/1023  Yes           */
+#define EP4IN       (9)  /* Int/Bulk/Iso  64/64/1023  Yes           */
+
+/* Maximum Packet sizes */
+
+#define MAX_PACKET_SIZE_EP0 (64)
+#define MAX_PACKET_SIZE_EP1 (64) /* Int/Bulk */
+#define MAX_PACKET_SIZE_EP2 (64) /* Int/Bulk */
+#define MAX_PACKET_SIZE_EP3 (64) /* Int/Bulk */
+#define MAX_PACKET_SIZE_EP4 (64) /* Int/Bulk */
+
+#define MAX_PACKET_SIZE_EP1_ISO (1023) /* Isochronous */
+#define MAX_PACKET_SIZE_EP2_ISO (1023) /* Isochronous */
+#define MAX_PACKET_SIZE_EP3_ISO (1023) /* Isochronous */
+#define MAX_PACKET_SIZE_EP4_ISO (1023) /* Isochronous */
+
+/* Generic endpoints - intended to be portable accross devices */
+/* and be suitable for simple USB devices. */
+
+/* Bulk endpoint */
+#define EPBULK_OUT  (EP2OUT)
+#define EPBULK_IN   (EP2IN)
+#define EPBULK_OUT_callback   EP2_OUT_callback
+#define EPBULK_IN_callback    EP2_IN_callback
+/* Interrupt endpoint */
+#define EPINT_OUT   (EP1OUT)
+#define EPINT_IN    (EP1IN)
+#define EPINT_OUT_callback    EP1_OUT_callback
+#define EPINT_IN_callback     EP1_IN_callback
+/* Isochronous endpoint */
+#define EPISO_OUT   (EP3OUT)
+#define EPISO_IN    (EP3IN)
+#define EPISO_OUT_callback    EP3_OUT_callback
+#define EPISO_IN_callback     EP3_IN_callback
+
+#define MAX_PACKET_SIZE_EPBULK  (MAX_PACKET_SIZE_EP2)
+#define MAX_PACKET_SIZE_EPINT   (MAX_PACKET_SIZE_EP1)
+#define MAX_PACKET_SIZE_EPISO   (MAX_PACKET_SIZE_EP3_ISO)
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_NXP/USBEndpoints_LPC17_LPC23.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_NXP/USBEndpoints_LPC17_LPC23.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,99 @@
+/* Copyright (c) 2010-2011 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#define NUMBER_OF_LOGICAL_ENDPOINTS (16)
+#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS * 2)
+
+/* Define physical endpoint numbers */
+
+/*      Endpoint    No.     Type(s)       MaxPacket   DoubleBuffer  */
+/*      ----------------    ------------  ----------  ---           */
+#define EP0OUT      (0)  /* Control       64          No            */
+#define EP0IN       (1)  /* Control       64          No            */
+#define EP1OUT      (2)  /* Interrupt     64          No            */
+#define EP1IN       (3)  /* Interrupt     64          No            */
+#define EP2OUT      (4)  /* Bulk          64          Yes           */
+#define EP2IN       (5)  /* Bulk          64          Yes           */
+#define EP3OUT      (6)  /* Isochronous   1023        Yes           */
+#define EP3IN       (7)  /* Isochronous   1023        Yes           */
+#define EP4OUT      (8)  /* Interrupt     64          No            */
+#define EP4IN       (9)  /* Interrupt     64          No            */
+#define EP5OUT      (10) /* Bulk          64          Yes           */
+#define EP5IN       (11) /* Bulk          64          Yes           */
+#define EP6OUT      (12) /* Isochronous   1023        Yes           */
+#define EP6IN       (13) /* Isochronous   1023        Yes           */
+#define EP7OUT      (14) /* Interrupt     64          No            */
+#define EP7IN       (15) /* Interrupt     64          No            */
+#define EP8OUT      (16) /* Bulk          64          Yes           */
+#define EP8IN       (17) /* Bulk          64          Yes           */
+#define EP9OUT      (18) /* Isochronous   1023        Yes           */
+#define EP9IN       (19) /* Isochronous   1023        Yes           */
+#define EP10OUT     (20) /* Interrupt     64          No            */
+#define EP10IN      (21) /* Interrupt     64          No            */
+#define EP11OUT     (22) /* Bulk          64          Yes           */
+#define EP11IN      (23) /* Bulk          64          Yes           */
+#define EP12OUT     (24) /* Isochronous   1023        Yes           */
+#define EP12IN      (25) /* Isochronous   1023        Yes           */
+#define EP13OUT     (26) /* Interrupt     64          No            */
+#define EP13IN      (27) /* Interrupt     64          No            */
+#define EP14OUT     (28) /* Bulk          64          Yes           */
+#define EP14IN      (29) /* Bulk          64          Yes           */
+#define EP15OUT     (30) /* Bulk          64          Yes           */
+#define EP15IN      (31) /* Bulk          64          Yes           */
+
+/* Maximum Packet sizes */
+
+#define MAX_PACKET_SIZE_EP0  (64)
+#define MAX_PACKET_SIZE_EP1  (64)
+#define MAX_PACKET_SIZE_EP2  (64)
+#define MAX_PACKET_SIZE_EP3  (1023)
+#define MAX_PACKET_SIZE_EP4  (64)
+#define MAX_PACKET_SIZE_EP5  (64)
+#define MAX_PACKET_SIZE_EP6  (1023)
+#define MAX_PACKET_SIZE_EP7  (64)
+#define MAX_PACKET_SIZE_EP8  (64)
+#define MAX_PACKET_SIZE_EP9  (1023)
+#define MAX_PACKET_SIZE_EP10 (64)
+#define MAX_PACKET_SIZE_EP11 (64)
+#define MAX_PACKET_SIZE_EP12 (1023)
+#define MAX_PACKET_SIZE_EP13 (64)
+#define MAX_PACKET_SIZE_EP14 (64)
+#define MAX_PACKET_SIZE_EP15 (64)
+
+/* Generic endpoints - intended to be portable accross devices */
+/* and be suitable for simple USB devices. */
+
+/* Bulk endpoints */
+#define EPBULK_OUT  (EP2OUT)
+#define EPBULK_IN   (EP2IN)
+#define EPBULK_OUT_callback   EP2_OUT_callback
+#define EPBULK_IN_callback    EP2_IN_callback
+/* Interrupt endpoints */
+#define EPINT_OUT   (EP1OUT)
+#define EPINT_IN    (EP1IN)
+#define EPINT_OUT_callback    EP1_OUT_callback
+#define EPINT_IN_callback     EP1_IN_callback
+/* Isochronous endpoints */
+#define EPISO_OUT   (EP3OUT)
+#define EPISO_IN    (EP3IN)
+#define EPISO_OUT_callback    EP3_OUT_callback
+#define EPISO_IN_callback     EP3_IN_callback
+
+#define MAX_PACKET_SIZE_EPBULK  (MAX_PACKET_SIZE_EP2)
+#define MAX_PACKET_SIZE_EPINT   (MAX_PACKET_SIZE_EP1)
+#define MAX_PACKET_SIZE_EPISO   (MAX_PACKET_SIZE_EP3)
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_NXP/USBHAL_LPC11U.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_NXP/USBHAL_LPC11U.cpp	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,738 @@
+/* Copyright (c) 2010-2011 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#if defined(TARGET_LPC11UXX) || defined(TARGET_LPC11U6X) || defined(TARGET_LPC1347) || defined(TARGET_LPC1549)
+
+#if defined(TARGET_LPC1347) || defined(TARGET_LPC1549)
+#define USB_IRQ USB_IRQ_IRQn
+#else
+#define USB_IRQ USB_IRQn
+#endif
+
+#include "USBHAL.h"
+
+USBHAL * USBHAL::instance;
+#if defined(TARGET_LPC1549)
+static uint8_t usbmem[2048] __attribute__((aligned(2048)));
+#endif
+
+// Valid physical endpoint numbers are 0 to (NUMBER_OF_PHYSICAL_ENDPOINTS-1)
+#define LAST_PHYSICAL_ENDPOINT (NUMBER_OF_PHYSICAL_ENDPOINTS-1)
+
+// Convert physical endpoint number to register bit
+#define EP(endpoint) (1UL<<endpoint)
+
+// Convert physical to logical
+#define PHY_TO_LOG(endpoint)    ((endpoint)>>1)
+
+// Get endpoint direction
+#define IN_EP(endpoint)     ((endpoint) & 1U ? true : false)
+#define OUT_EP(endpoint)    ((endpoint) & 1U ? false : true)
+
+// USB RAM
+#if defined(TARGET_LPC1549)
+#define USB_RAM_START ((uint32_t)usbmem)
+#define USB_RAM_SIZE  sizeof(usbmem)
+#else
+#define USB_RAM_START (0x20004000)
+#define USB_RAM_SIZE  (0x00000800)
+#endif
+
+// SYSAHBCLKCTRL
+#if defined(TARGET_LPC1549)
+#define CLK_USB     (1UL<<23)
+#else
+#define CLK_USB     (1UL<<14)
+#define CLK_USBRAM  (1UL<<27)
+#endif
+
+// USB Information register
+#define FRAME_NR(a)     ((a) & 0x7ff)   // Frame number
+
+// USB Device Command/Status register
+#define DEV_ADDR_MASK   (0x7f)          // Device address
+#define DEV_ADDR(a)     ((a) & DEV_ADDR_MASK)
+#define DEV_EN          (1UL<<7)        // Device enable
+#define SETUP           (1UL<<8)        // SETUP token received
+#define PLL_ON          (1UL<<9)        // PLL enabled in suspend
+#define DCON            (1UL<<16)       // Device status - connect
+#define DSUS            (1UL<<17)       // Device status - suspend
+#define DCON_C          (1UL<<24)       // Connect change
+#define DSUS_C          (1UL<<25)       // Suspend change
+#define DRES_C          (1UL<<26)       // Reset change
+#define VBUSDEBOUNCED   (1UL<<28)       // Vbus detected
+
+// Endpoint Command/Status list
+#define CMDSTS_A                 (1UL<<31)          // Active
+#define CMDSTS_D                 (1UL<<30)          // Disable
+#define CMDSTS_S                 (1UL<<29)          // Stall
+#define CMDSTS_TR                (1UL<<28)          // Toggle Reset
+#define CMDSTS_RF                (1UL<<27)          // Rate Feedback mode
+#define CMDSTS_TV                (1UL<<27)          // Toggle Value
+#define CMDSTS_T                 (1UL<<26)          // Endpoint Type
+#define CMDSTS_NBYTES(n)         (((n)&0x3ff)<<16)  // Number of bytes
+#define CMDSTS_ADDRESS_OFFSET(a) (((a)>>6)&0xffff)  // Buffer start address
+
+#define BYTES_REMAINING(s)       (((s)>>16)&0x3ff)  // Bytes remaining after transfer
+
+// USB Non-endpoint interrupt sources
+#define FRAME_INT   (1UL<<30)
+#define DEV_INT     (1UL<<31)
+
+static volatile int epComplete = 0;
+
+// One entry for a double-buffered logical endpoint in the endpoint
+// command/status list. Endpoint 0 is single buffered, out[1] is used
+// for the SETUP packet and in[1] is not used
+typedef struct {
+    uint32_t out[2];
+    uint32_t in[2];
+} PACKED EP_COMMAND_STATUS;
+
+typedef struct {
+    uint8_t out[MAX_PACKET_SIZE_EP0];
+    uint8_t in[MAX_PACKET_SIZE_EP0];
+    uint8_t setup[SETUP_PACKET_SIZE];
+} PACKED CONTROL_TRANSFER;
+
+typedef struct {
+    uint32_t    maxPacket;
+    uint32_t    buffer[2];
+    uint32_t    options;
+} PACKED EP_STATE;
+
+static volatile EP_STATE endpointState[NUMBER_OF_PHYSICAL_ENDPOINTS];
+
+// Pointer to the endpoint command/status list
+static EP_COMMAND_STATUS *ep = NULL;
+
+// Pointer to endpoint 0 data (IN/OUT and SETUP)
+static CONTROL_TRANSFER *ct = NULL;
+
+// Shadow DEVCMDSTAT register to avoid accidentally clearing flags or
+// initiating a remote wakeup event.
+static volatile uint32_t devCmdStat;
+
+// Pointers used to allocate USB RAM
+static uint32_t usbRamPtr = USB_RAM_START;
+static uint32_t epRamPtr = 0; // Buffers for endpoints > 0 start here
+
+#define ROUND_UP_TO_MULTIPLE(x, m) ((((x)+((m)-1))/(m))*(m))
+
+void USBMemCopy(uint8_t *dst, uint8_t *src, uint32_t size);
+void USBMemCopy(uint8_t *dst, uint8_t *src, uint32_t size) {
+    if (size > 0) {
+        do {
+            *dst++ = *src++;
+        } while (--size > 0);
+    }
+}
+
+
+USBHAL::USBHAL(void) {
+    NVIC_DisableIRQ(USB_IRQ);
+
+    // fill in callback array
+    epCallback[0] = &USBHAL::EP1_OUT_callback;
+    epCallback[1] = &USBHAL::EP1_IN_callback;
+    epCallback[2] = &USBHAL::EP2_OUT_callback;
+    epCallback[3] = &USBHAL::EP2_IN_callback;
+    epCallback[4] = &USBHAL::EP3_OUT_callback;
+    epCallback[5] = &USBHAL::EP3_IN_callback;
+    epCallback[6] = &USBHAL::EP4_OUT_callback;
+    epCallback[7] = &USBHAL::EP4_IN_callback;
+
+#if defined(TARGET_LPC1549)
+    /* Set USB PLL input to system oscillator */
+    LPC_SYSCON->USBPLLCLKSEL = 0x01;
+
+    /* Setup USB PLL  (FCLKIN = 12MHz) * 4 = 48MHz
+       MSEL = 3 (this is pre-decremented), PSEL = 1 (for P = 2)
+       FCLKOUT = FCLKIN * (MSEL + 1) = 12MHz * 4 = 48MHz
+       FCCO = FCLKOUT * 2 * P = 48MHz * 2 * 2 = 192MHz (within FCCO range) */
+    LPC_SYSCON->USBPLLCTRL = (0x3 | (1UL << 6));
+
+    /* Powerup USB PLL */
+    LPC_SYSCON->PDRUNCFG &= ~(CLK_USB);
+
+    /* Wait for PLL to lock */
+    while(!(LPC_SYSCON->USBPLLSTAT & 0x01));
+
+    /* enable USB main clock */
+    LPC_SYSCON->USBCLKSEL = 0x02;
+    LPC_SYSCON->USBCLKDIV = 1;
+
+    /* Enable AHB clock to the USB block. */
+    LPC_SYSCON->SYSAHBCLKCTRL1 |= CLK_USB;
+
+    /* power UP USB Phy */
+    LPC_SYSCON->PDRUNCFG &= ~(1UL << 9);
+
+    /* Reset USB block */
+    LPC_SYSCON->PRESETCTRL1 |= (CLK_USB);
+    LPC_SYSCON->PRESETCTRL1 &= ~(CLK_USB);
+
+#else
+    #if defined(TARGET_LPC11U35_401) || defined(TARGET_LPC11U35_501)
+    // USB_VBUS input with pull-down
+    LPC_IOCON->PIO0_3 = 0x00000009;
+    #endif
+
+    // nUSB_CONNECT output
+    LPC_IOCON->PIO0_6 = 0x00000001;
+
+    // Enable clocks (USB registers, USB RAM)
+    LPC_SYSCON->SYSAHBCLKCTRL |= CLK_USB | CLK_USBRAM;
+
+    // Ensure device disconnected (DCON not set)
+    LPC_USB->DEVCMDSTAT = 0;
+#endif
+    // to ensure that the USB host sees the device as
+    // disconnected if the target CPU is reset.
+    wait(0.3);
+
+    // Reserve space in USB RAM for endpoint command/status list
+    // Must be 256 byte aligned
+    usbRamPtr = ROUND_UP_TO_MULTIPLE(usbRamPtr, 256);
+    ep = (EP_COMMAND_STATUS *)usbRamPtr;
+    usbRamPtr += (sizeof(EP_COMMAND_STATUS) * NUMBER_OF_LOGICAL_ENDPOINTS);
+    LPC_USB->EPLISTSTART = (uint32_t)(ep) & 0xffffff00;
+
+    // Reserve space in USB RAM for Endpoint 0
+    // Must be 64 byte aligned
+    usbRamPtr = ROUND_UP_TO_MULTIPLE(usbRamPtr, 64);
+    ct = (CONTROL_TRANSFER *)usbRamPtr;
+    usbRamPtr += sizeof(CONTROL_TRANSFER);
+    LPC_USB->DATABUFSTART =(uint32_t)(ct) & 0xffc00000;
+
+    // Setup command/status list for EP0
+    ep[0].out[0] = 0;
+    ep[0].in[0] =  0;
+    ep[0].out[1] = CMDSTS_ADDRESS_OFFSET((uint32_t)ct->setup);
+
+    // Route all interrupts to IRQ, some can be routed to
+    // USB_FIQ if you wish.
+    LPC_USB->INTROUTING = 0;
+
+    // Set device address 0, enable USB device, no remote wakeup
+    devCmdStat = DEV_ADDR(0) | DEV_EN | DSUS;
+    LPC_USB->DEVCMDSTAT = devCmdStat;
+
+    // Enable interrupts for device events and EP0
+    LPC_USB->INTEN = DEV_INT | EP(EP0IN) | EP(EP0OUT) | FRAME_INT;
+    instance = this;
+
+    //attach IRQ handler and enable interrupts
+    NVIC_SetVector(USB_IRQ, (uint32_t)&_usbisr);
+}
+
+USBHAL::~USBHAL(void) {
+    // Ensure device disconnected (DCON not set)
+    LPC_USB->DEVCMDSTAT = 0;
+    // Disable USB interrupts
+    NVIC_DisableIRQ(USB_IRQ);
+}
+
+void USBHAL::connect(void) {
+    NVIC_EnableIRQ(USB_IRQ);
+    devCmdStat |= DCON;
+    LPC_USB->DEVCMDSTAT = devCmdStat;
+}
+
+void USBHAL::disconnect(void) {
+    NVIC_DisableIRQ(USB_IRQ);
+    devCmdStat &= ~DCON;
+    LPC_USB->DEVCMDSTAT = devCmdStat;
+}
+
+void USBHAL::configureDevice(void) {
+    // Not required
+}
+
+void USBHAL::unconfigureDevice(void) {
+    // Not required
+}
+
+void USBHAL::EP0setup(uint8_t *buffer) {
+    // Copy setup packet data
+    USBMemCopy(buffer, ct->setup, SETUP_PACKET_SIZE);
+}
+
+void USBHAL::EP0read(void) {
+    // Start an endpoint 0 read
+
+    // The USB ISR will call USBDevice_EP0out() when a packet has been read,
+    // the USBDevice layer then calls USBBusInterface_EP0getReadResult() to
+    // read the data.
+
+    ep[0].out[0] = CMDSTS_A |CMDSTS_NBYTES(MAX_PACKET_SIZE_EP0) \
+                   | CMDSTS_ADDRESS_OFFSET((uint32_t)ct->out);
+}
+
+uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) {
+    // Complete an endpoint 0 read
+    uint32_t bytesRead;
+
+    // Find how many bytes were read
+    bytesRead = MAX_PACKET_SIZE_EP0 - BYTES_REMAINING(ep[0].out[0]);
+
+    // Copy data
+    USBMemCopy(buffer, ct->out, bytesRead);
+    return bytesRead;
+}
+
+
+void USBHAL::EP0readStage(void) {
+    // Not required
+}
+
+void USBHAL::EP0write(uint8_t *buffer, uint32_t size) {
+    // Start and endpoint 0 write
+
+    // The USB ISR will call USBDevice_EP0in() when the data has
+    // been written, the USBDevice layer then calls
+    // USBBusInterface_EP0getWriteResult() to complete the transaction.
+
+    // Copy data
+    USBMemCopy(ct->in, buffer, size);
+
+    // Start transfer
+    ep[0].in[0] = CMDSTS_A | CMDSTS_NBYTES(size) \
+                  | CMDSTS_ADDRESS_OFFSET((uint32_t)ct->in);
+}
+
+
+EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) {
+    uint8_t bf = 0;
+    uint32_t flags = 0;
+
+    //check which buffer must be filled
+    if (LPC_USB->EPBUFCFG & EP(endpoint)) {
+        // Double buffered
+        if (LPC_USB->EPINUSE & EP(endpoint)) {
+            bf = 1;
+        } else {
+            bf = 0;
+        }
+    }
+
+    // if isochronous endpoint, T = 1
+    if(endpointState[endpoint].options & ISOCHRONOUS)
+    {
+        flags |= CMDSTS_T;
+    }
+
+    //Active the endpoint for reading
+    ep[PHY_TO_LOG(endpoint)].out[bf] = CMDSTS_A | CMDSTS_NBYTES(maximumSize) \
+                                       | CMDSTS_ADDRESS_OFFSET((uint32_t)ct->out) | flags;
+    return EP_PENDING;
+}
+
+EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t *data, uint32_t *bytesRead) {
+
+    uint8_t bf = 0;
+
+    if (!(epComplete & EP(endpoint)))
+        return EP_PENDING;
+    else {
+        epComplete &= ~EP(endpoint);
+
+        //check which buffer has been filled
+        if (LPC_USB->EPBUFCFG & EP(endpoint)) {
+            // Double buffered (here we read the previous buffer which was used)
+            if (LPC_USB->EPINUSE & EP(endpoint)) {
+                bf = 0;
+            } else {
+                bf = 1;
+            }
+        }
+
+        // Find how many bytes were read
+        *bytesRead = (uint32_t) (endpointState[endpoint].maxPacket - BYTES_REMAINING(ep[PHY_TO_LOG(endpoint)].out[bf]));
+
+        // Copy data
+        USBMemCopy(data, ct->out, *bytesRead);
+        return EP_COMPLETED;
+    }
+}
+
+void USBHAL::EP0getWriteResult(void) {
+    // Not required
+}
+
+void USBHAL::EP0stall(void) {
+    ep[0].in[0] = CMDSTS_S;
+    ep[0].out[0] = CMDSTS_S;
+}
+
+void USBHAL::setAddress(uint8_t address) {
+    devCmdStat &= ~DEV_ADDR_MASK;
+    devCmdStat |= DEV_ADDR(address);
+    LPC_USB->DEVCMDSTAT = devCmdStat;
+}
+
+EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size) {
+    uint32_t flags = 0;
+    uint32_t bf;
+
+    // Validate parameters
+    if (data == NULL) {
+        return EP_INVALID;
+    }
+
+    if (endpoint > LAST_PHYSICAL_ENDPOINT) {
+        return EP_INVALID;
+    }
+
+    if ((endpoint==EP0IN) || (endpoint==EP0OUT)) {
+        return EP_INVALID;
+    }
+
+    if (size > endpointState[endpoint].maxPacket) {
+        return EP_INVALID;
+    }
+
+    if (LPC_USB->EPBUFCFG & EP(endpoint)) {
+        // Double buffered
+        if (LPC_USB->EPINUSE & EP(endpoint)) {
+            bf = 1;
+        } else {
+            bf = 0;
+        }
+    } else {
+        // Single buffered
+        bf = 0;
+    }
+
+    // Check if already active
+    if (ep[PHY_TO_LOG(endpoint)].in[bf] & CMDSTS_A) {
+        return EP_INVALID;
+    }
+
+    // Check if stalled
+    if (ep[PHY_TO_LOG(endpoint)].in[bf] & CMDSTS_S) {
+        return EP_STALLED;
+    }
+
+    // Copy data to USB RAM
+    USBMemCopy((uint8_t *)endpointState[endpoint].buffer[bf], data, size);
+
+    // Add options
+    if (endpointState[endpoint].options & RATE_FEEDBACK_MODE) {
+        flags |= CMDSTS_RF;
+    }
+
+    if (endpointState[endpoint].options & ISOCHRONOUS) {
+        flags |= CMDSTS_T;
+    }
+
+    // Add transfer
+    ep[PHY_TO_LOG(endpoint)].in[bf] = CMDSTS_ADDRESS_OFFSET( \
+                                      endpointState[endpoint].buffer[bf]) \
+                                      | CMDSTS_NBYTES(size) | CMDSTS_A | flags;
+
+    return EP_PENDING;
+}
+
+EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint) {
+    uint32_t bf;
+
+    // Validate parameters
+    if (endpoint > LAST_PHYSICAL_ENDPOINT) {
+        return EP_INVALID;
+    }
+
+    if (OUT_EP(endpoint)) {
+        return EP_INVALID;
+    }
+
+    if (LPC_USB->EPBUFCFG & EP(endpoint)) {
+        // Double buffered     // TODO: FIX THIS
+        if (LPC_USB->EPINUSE & EP(endpoint)) {
+            bf = 1;
+        } else {
+            bf = 0;
+        }
+    } else {
+        // Single buffered
+        bf = 0;
+    }
+
+    // Check if endpoint still active
+    if (ep[PHY_TO_LOG(endpoint)].in[bf] & CMDSTS_A) {
+        return EP_PENDING;
+    }
+
+    // Check if stalled
+    if (ep[PHY_TO_LOG(endpoint)].in[bf] & CMDSTS_S) {
+        return EP_STALLED;
+    }
+
+    return EP_COMPLETED;
+}
+
+void USBHAL::stallEndpoint(uint8_t endpoint) {
+
+    // FIX: should this clear active bit?
+    if (IN_EP(endpoint)) {
+        ep[PHY_TO_LOG(endpoint)].in[0] |= CMDSTS_S;
+        ep[PHY_TO_LOG(endpoint)].in[1] |= CMDSTS_S;
+    } else {
+        ep[PHY_TO_LOG(endpoint)].out[0] |= CMDSTS_S;
+        ep[PHY_TO_LOG(endpoint)].out[1] |= CMDSTS_S;
+    }
+}
+
+void USBHAL::unstallEndpoint(uint8_t endpoint) {
+    if (LPC_USB->EPBUFCFG & EP(endpoint)) {
+        // Double buffered
+        if (IN_EP(endpoint)) {
+            ep[PHY_TO_LOG(endpoint)].in[0] = 0; // S = 0
+            ep[PHY_TO_LOG(endpoint)].in[1] = 0; // S = 0
+
+            if (LPC_USB->EPINUSE & EP(endpoint)) {
+                ep[PHY_TO_LOG(endpoint)].in[1] = CMDSTS_TR; // S = 0, TR = 1, TV = 0
+            } else {
+                ep[PHY_TO_LOG(endpoint)].in[0] = CMDSTS_TR; // S = 0, TR = 1, TV = 0
+            }
+        } else {
+            ep[PHY_TO_LOG(endpoint)].out[0] = 0; // S = 0
+            ep[PHY_TO_LOG(endpoint)].out[1] = 0; // S = 0
+
+            if (LPC_USB->EPINUSE & EP(endpoint)) {
+                ep[PHY_TO_LOG(endpoint)].out[1] = CMDSTS_TR; // S = 0, TR = 1, TV = 0
+            } else {
+                ep[PHY_TO_LOG(endpoint)].out[0] = CMDSTS_TR; // S = 0, TR = 1, TV = 0
+            }
+        }
+    } else {
+        // Single buffered
+        if (IN_EP(endpoint)) {
+            ep[PHY_TO_LOG(endpoint)].in[0] = CMDSTS_TR;     // S = 0, TR = 1, TV = 0
+        } else {
+            ep[PHY_TO_LOG(endpoint)].out[0] = CMDSTS_TR;    // S = 0, TR = 1, TV = 0
+        }
+    }
+}
+
+bool USBHAL::getEndpointStallState(unsigned char endpoint) {
+    if (IN_EP(endpoint)) {
+        if (LPC_USB->EPINUSE & EP(endpoint)) {
+            if (ep[PHY_TO_LOG(endpoint)].in[1] & CMDSTS_S) {
+                return true;
+            }
+        } else {
+            if (ep[PHY_TO_LOG(endpoint)].in[0] & CMDSTS_S) {
+                return true;
+            }
+        }
+    } else {
+        if (LPC_USB->EPINUSE & EP(endpoint)) {
+            if (ep[PHY_TO_LOG(endpoint)].out[1] & CMDSTS_S) {
+                return true;
+            }
+        } else {
+            if (ep[PHY_TO_LOG(endpoint)].out[0] & CMDSTS_S) {
+                return true;
+            }
+        }
+    }
+
+    return false;
+}
+
+bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t options) {
+    uint32_t tmpEpRamPtr;
+
+    if (endpoint > LAST_PHYSICAL_ENDPOINT) {
+        return false;
+    }
+
+    // Not applicable to the control endpoints
+    if ((endpoint==EP0IN) || (endpoint==EP0OUT)) {
+        return false;
+    }
+
+    // Allocate buffers in USB RAM
+    tmpEpRamPtr = epRamPtr;
+
+    // Must be 64 byte aligned
+    tmpEpRamPtr = ROUND_UP_TO_MULTIPLE(tmpEpRamPtr, 64);
+
+    if ((tmpEpRamPtr + maxPacket) > (USB_RAM_START + USB_RAM_SIZE)) {
+        // Out of memory
+        return false;
+    }
+
+    // Allocate first buffer
+    endpointState[endpoint].buffer[0] = tmpEpRamPtr;
+    tmpEpRamPtr += maxPacket;
+
+    if (!(options & SINGLE_BUFFERED)) {
+        // Must be 64 byte aligned
+        tmpEpRamPtr = ROUND_UP_TO_MULTIPLE(tmpEpRamPtr, 64);
+
+        if ((tmpEpRamPtr + maxPacket) > (USB_RAM_START + USB_RAM_SIZE)) {
+            // Out of memory
+            return false;
+        }
+
+        // Allocate second buffer
+        endpointState[endpoint].buffer[1] = tmpEpRamPtr;
+        tmpEpRamPtr += maxPacket;
+    }
+
+    // Commit to this USB RAM allocation
+    epRamPtr = tmpEpRamPtr;
+
+    // Remaining endpoint state values
+    endpointState[endpoint].maxPacket = maxPacket;
+    endpointState[endpoint].options = options;
+
+    // Enable double buffering if required
+    if (options & SINGLE_BUFFERED) {
+        LPC_USB->EPBUFCFG &= ~EP(endpoint);
+    } else {
+        // Double buffered
+        LPC_USB->EPBUFCFG |= EP(endpoint);
+    }
+
+    // Enable interrupt
+    LPC_USB->INTEN |= EP(endpoint);
+
+    // Enable endpoint
+    unstallEndpoint(endpoint);
+    return true;
+}
+
+void USBHAL::remoteWakeup(void) {
+    // Clearing DSUS bit initiates a remote wakeup if the
+    // device is currently enabled and suspended - otherwise
+    // it has no effect.
+    LPC_USB->DEVCMDSTAT = devCmdStat & ~DSUS;
+}
+
+
+static void disableEndpoints(void) {
+    uint32_t logEp;
+
+    // Ref. Table 158 "When a bus reset is received, software
+    // must set the disable bit of all endpoints to 1".
+
+    for (logEp = 1; logEp < NUMBER_OF_LOGICAL_ENDPOINTS; logEp++) {
+        ep[logEp].out[0] = CMDSTS_D;
+        ep[logEp].out[1] = CMDSTS_D;
+        ep[logEp].in[0] =  CMDSTS_D;
+        ep[logEp].in[1] =  CMDSTS_D;
+    }
+
+    // Start of USB RAM for endpoints > 0
+    epRamPtr = usbRamPtr;
+}
+
+
+
+void USBHAL::_usbisr(void) {
+    instance->usbisr();
+}
+
+void USBHAL::usbisr(void) {
+    // Start of frame
+    if (LPC_USB->INTSTAT & FRAME_INT) {
+        // Clear SOF interrupt
+        LPC_USB->INTSTAT = FRAME_INT;
+
+        // SOF event, read frame number
+        SOF(FRAME_NR(LPC_USB->INFO));
+    }
+
+    // Device state
+    if (LPC_USB->INTSTAT & DEV_INT) {
+        LPC_USB->INTSTAT = DEV_INT;
+
+        if (LPC_USB->DEVCMDSTAT & DSUS_C) {
+            // Suspend status changed
+            LPC_USB->DEVCMDSTAT = devCmdStat | DSUS_C;
+            if (LPC_USB->DEVCMDSTAT & DSUS) {
+                suspendStateChanged(1);
+            } else {
+                suspendStateChanged(0);
+            }
+        }
+
+        if (LPC_USB->DEVCMDSTAT & DRES_C) {
+            // Bus reset
+            LPC_USB->DEVCMDSTAT = devCmdStat | DRES_C;
+
+            // Disable endpoints > 0
+            disableEndpoints();
+
+            // Bus reset event
+            busReset();
+        }
+    }
+
+    // Endpoint 0
+    if (LPC_USB->INTSTAT & EP(EP0OUT)) {
+        // Clear EP0OUT/SETUP interrupt
+        LPC_USB->INTSTAT = EP(EP0OUT);
+
+        // Check if SETUP
+        if (LPC_USB->DEVCMDSTAT & SETUP) {
+            // Clear Active and Stall bits for EP0
+            // Documentation does not make it clear if we must use the
+            // EPSKIP register to achieve this, Fig. 16 and NXP reference
+            // code suggests we can just clear the Active bits - check with
+            // NXP to be sure.
+            ep[0].in[0] = 0;
+            ep[0].out[0] = 0;
+
+            // Clear EP0IN interrupt
+            LPC_USB->INTSTAT = EP(EP0IN);
+
+            // Clear SETUP (and INTONNAK_CI/O) in device status register
+            LPC_USB->DEVCMDSTAT = devCmdStat | SETUP;
+
+            // EP0 SETUP event (SETUP data received)
+            EP0setupCallback();
+        } else {
+            // EP0OUT ACK event (OUT data received)
+            EP0out();
+        }
+    }
+
+    if (LPC_USB->INTSTAT & EP(EP0IN)) {
+        // Clear EP0IN interrupt
+        LPC_USB->INTSTAT = EP(EP0IN);
+
+        // EP0IN ACK event (IN data sent)
+        EP0in();
+    }
+
+    for (uint8_t num = 2; num < 5*2; num++) {
+        if (LPC_USB->INTSTAT & EP(num)) {
+            LPC_USB->INTSTAT = EP(num);
+            epComplete |= EP(num);
+            if ((instance->*(epCallback[num - 2]))()) {
+                epComplete &= ~EP(num);
+            }
+        }
+    }
+}
+
+#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_NXP/USBHAL_LPC17.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_NXP/USBHAL_LPC17.cpp	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,623 @@
+/* Copyright (c) 2010-2011 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) || defined(TARGET_LPC2460)
+
+#include "USBHAL.h"
+
+
+// Get endpoint direction
+#define IN_EP(endpoint)     ((endpoint) & 1U ? true : false)
+#define OUT_EP(endpoint)    ((endpoint) & 1U ? false : true)
+
+// Convert physical endpoint number to register bit
+#define EP(endpoint) (1UL<<endpoint)
+
+// Power Control for Peripherals register
+#define PCUSB      (1UL<<31)
+
+// USB Clock Control register
+#define DEV_CLK_EN (1UL<<1)
+#define AHB_CLK_EN (1UL<<4)
+
+// USB Clock Status register
+#define DEV_CLK_ON (1UL<<1)
+#define AHB_CLK_ON (1UL<<4)
+
+// USB Device Interupt registers
+#define FRAME      (1UL<<0)
+#define EP_FAST    (1UL<<1)
+#define EP_SLOW    (1UL<<2)
+#define DEV_STAT   (1UL<<3)
+#define CCEMPTY    (1UL<<4)
+#define CDFULL     (1UL<<5)
+#define RxENDPKT   (1UL<<6)
+#define TxENDPKT   (1UL<<7)
+#define EP_RLZED   (1UL<<8)
+#define ERR_INT    (1UL<<9)
+
+// USB Control register
+#define RD_EN (1<<0)
+#define WR_EN (1<<1)
+#define LOG_ENDPOINT(endpoint) ((endpoint>>1)<<2)
+
+// USB Receive Packet Length register
+#define DV      (1UL<<10)
+#define PKT_RDY (1UL<<11)
+#define PKT_LNGTH_MASK (0x3ff)
+
+// Serial Interface Engine (SIE)
+#define SIE_WRITE   (0x01)
+#define SIE_READ    (0x02)
+#define SIE_COMMAND (0x05)
+#define SIE_CMD_CODE(phase, data) ((phase<<8)|(data<<16))
+
+// SIE Command codes
+#define SIE_CMD_SET_ADDRESS        (0xD0)
+#define SIE_CMD_CONFIGURE_DEVICE   (0xD8)
+#define SIE_CMD_SET_MODE           (0xF3)
+#define SIE_CMD_READ_FRAME_NUMBER  (0xF5)
+#define SIE_CMD_READ_TEST_REGISTER (0xFD)
+#define SIE_CMD_SET_DEVICE_STATUS  (0xFE)
+#define SIE_CMD_GET_DEVICE_STATUS  (0xFE)
+#define SIE_CMD_GET_ERROR_CODE     (0xFF)
+#define SIE_CMD_READ_ERROR_STATUS  (0xFB)
+
+#define SIE_CMD_SELECT_ENDPOINT(endpoint)                 (0x00+endpoint)
+#define SIE_CMD_SELECT_ENDPOINT_CLEAR_INTERRUPT(endpoint) (0x40+endpoint)
+#define SIE_CMD_SET_ENDPOINT_STATUS(endpoint)             (0x40+endpoint)
+
+#define SIE_CMD_CLEAR_BUFFER    (0xF2)
+#define SIE_CMD_VALIDATE_BUFFER (0xFA)
+
+// SIE Device Status register
+#define SIE_DS_CON    (1<<0)
+#define SIE_DS_CON_CH (1<<1)
+#define SIE_DS_SUS    (1<<2)
+#define SIE_DS_SUS_CH (1<<3)
+#define SIE_DS_RST    (1<<4)
+
+// SIE Device Set Address register
+#define SIE_DSA_DEV_EN  (1<<7)
+
+// SIE Configue Device register
+#define SIE_CONF_DEVICE (1<<0)
+
+// Select Endpoint register
+#define SIE_SE_FE       (1<<0)
+#define SIE_SE_ST       (1<<1)
+#define SIE_SE_STP      (1<<2)
+#define SIE_SE_PO       (1<<3)
+#define SIE_SE_EPN      (1<<4)
+#define SIE_SE_B_1_FULL (1<<5)
+#define SIE_SE_B_2_FULL (1<<6)
+
+// Set Endpoint Status command
+#define SIE_SES_ST      (1<<0)
+#define SIE_SES_DA      (1<<5)
+#define SIE_SES_RF_MO   (1<<6)
+#define SIE_SES_CND_ST  (1<<7)
+
+
+USBHAL * USBHAL::instance;
+
+static volatile int epComplete;
+static uint32_t endpointStallState;
+
+static void SIECommand(uint32_t command) {
+    // The command phase of a SIE transaction
+    LPC_USB->USBDevIntClr = CCEMPTY;
+    LPC_USB->USBCmdCode = SIE_CMD_CODE(SIE_COMMAND, command);
+    while (!(LPC_USB->USBDevIntSt & CCEMPTY));
+}
+
+static void SIEWriteData(uint8_t data) {
+    // The data write phase of a SIE transaction
+    LPC_USB->USBDevIntClr = CCEMPTY;
+    LPC_USB->USBCmdCode = SIE_CMD_CODE(SIE_WRITE, data);
+    while (!(LPC_USB->USBDevIntSt & CCEMPTY));
+}
+
+static uint8_t SIEReadData(uint32_t command) {
+    // The data read phase of a SIE transaction
+    LPC_USB->USBDevIntClr = CDFULL;
+    LPC_USB->USBCmdCode = SIE_CMD_CODE(SIE_READ, command);
+    while (!(LPC_USB->USBDevIntSt & CDFULL));
+    return (uint8_t)LPC_USB->USBCmdData;
+}
+
+static void SIEsetDeviceStatus(uint8_t status) {
+    // Write SIE device status register
+    SIECommand(SIE_CMD_SET_DEVICE_STATUS);
+    SIEWriteData(status);
+}
+
+static uint8_t SIEgetDeviceStatus(void) {
+    // Read SIE device status register
+    SIECommand(SIE_CMD_GET_DEVICE_STATUS);
+    return SIEReadData(SIE_CMD_GET_DEVICE_STATUS);
+}
+
+void SIEsetAddress(uint8_t address) {
+    // Write SIE device address register
+    SIECommand(SIE_CMD_SET_ADDRESS);
+    SIEWriteData((address & 0x7f) | SIE_DSA_DEV_EN);
+}
+
+static uint8_t SIEselectEndpoint(uint8_t endpoint) {
+    // SIE select endpoint command
+    SIECommand(SIE_CMD_SELECT_ENDPOINT(endpoint));
+    return SIEReadData(SIE_CMD_SELECT_ENDPOINT(endpoint));
+}
+
+static uint8_t SIEclearBuffer(void) {
+    // SIE clear buffer command
+    SIECommand(SIE_CMD_CLEAR_BUFFER);
+    return SIEReadData(SIE_CMD_CLEAR_BUFFER);
+}
+
+static void SIEvalidateBuffer(void) {
+    // SIE validate buffer command
+    SIECommand(SIE_CMD_VALIDATE_BUFFER);
+}
+
+static void SIEsetEndpointStatus(uint8_t endpoint, uint8_t status) {
+    // SIE set endpoint status command
+    SIECommand(SIE_CMD_SET_ENDPOINT_STATUS(endpoint));
+    SIEWriteData(status);
+}
+
+static uint16_t SIEgetFrameNumber(void) __attribute__ ((unused));
+static uint16_t SIEgetFrameNumber(void) {
+    // Read current frame number
+    uint16_t lowByte;
+    uint16_t highByte;
+
+    SIECommand(SIE_CMD_READ_FRAME_NUMBER);
+    lowByte = SIEReadData(SIE_CMD_READ_FRAME_NUMBER);
+    highByte = SIEReadData(SIE_CMD_READ_FRAME_NUMBER);
+
+    return (highByte << 8) | lowByte;
+}
+
+static void SIEconfigureDevice(void) {
+    // SIE Configure device command
+    SIECommand(SIE_CMD_CONFIGURE_DEVICE);
+    SIEWriteData(SIE_CONF_DEVICE);
+}
+
+static void SIEunconfigureDevice(void) {
+    // SIE Configure device command
+    SIECommand(SIE_CMD_CONFIGURE_DEVICE);
+    SIEWriteData(0);
+}
+
+static void SIEconnect(void) {
+    // Connect USB device
+    uint8_t status = SIEgetDeviceStatus();
+    SIEsetDeviceStatus(status | SIE_DS_CON);
+}
+
+
+static void SIEdisconnect(void) {
+    // Disconnect USB device
+    uint8_t status = SIEgetDeviceStatus();
+    SIEsetDeviceStatus(status & ~SIE_DS_CON);
+}
+
+
+static uint8_t selectEndpointClearInterrupt(uint8_t endpoint) {
+    // Implemented using using EP_INT_CLR.
+    LPC_USB->USBEpIntClr = EP(endpoint);
+    while (!(LPC_USB->USBDevIntSt & CDFULL));
+    return (uint8_t)LPC_USB->USBCmdData;
+}
+
+
+static void enableEndpointEvent(uint8_t endpoint) {
+    // Enable an endpoint interrupt
+    LPC_USB->USBEpIntEn |= EP(endpoint);
+}
+
+static void disableEndpointEvent(uint8_t endpoint) __attribute__ ((unused));
+static void disableEndpointEvent(uint8_t endpoint) {
+    // Disable an endpoint interrupt
+    LPC_USB->USBEpIntEn &= ~EP(endpoint);
+}
+
+static volatile uint32_t __attribute__((used)) dummyRead;
+uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) {
+    // Read from an OUT endpoint
+    uint32_t size;
+    uint32_t i;
+    uint32_t data = 0;
+    uint8_t offset;
+
+    LPC_USB->USBCtrl = LOG_ENDPOINT(endpoint) | RD_EN;
+    while (!(LPC_USB->USBRxPLen & PKT_RDY));
+
+    size = LPC_USB->USBRxPLen & PKT_LNGTH_MASK;
+
+    offset = 0;
+
+    if (size > 0) {
+        for (i=0; i<size; i++) {
+            if (offset==0) {
+                // Fetch up to four bytes of data as a word
+                data = LPC_USB->USBRxData;
+            }
+
+            // extract a byte
+            *buffer = (data>>offset) & 0xff;
+            buffer++;
+
+            // move on to the next byte
+            offset = (offset + 8) % 32;
+        }
+    } else {
+        dummyRead = LPC_USB->USBRxData;
+    }
+
+    LPC_USB->USBCtrl = 0;
+
+    if ((endpoint >> 1) % 3 || (endpoint >> 1) == 0) {
+        SIEselectEndpoint(endpoint);
+        SIEclearBuffer();
+    }
+
+    return size;
+}
+
+static void endpointWritecore(uint8_t endpoint, uint8_t *buffer, uint32_t size) {
+    // Write to an IN endpoint
+    uint32_t temp, data;
+    uint8_t offset;
+
+    LPC_USB->USBCtrl = LOG_ENDPOINT(endpoint) | WR_EN;
+
+    LPC_USB->USBTxPLen = size;
+    offset = 0;
+    data = 0;
+
+    if (size>0) {
+        do {
+            // Fetch next data byte into a word-sized temporary variable
+            temp = *buffer++;
+
+            // Add to current data word
+            temp = temp << offset;
+            data = data | temp;
+
+            // move on to the next byte
+            offset = (offset + 8) % 32;
+            size--;
+
+            if ((offset==0) || (size==0)) {
+                // Write the word to the endpoint
+                LPC_USB->USBTxData = data;
+                data = 0;
+            }
+        } while (size>0);
+    } else {
+        LPC_USB->USBTxData = 0;
+    }
+
+    // Clear WR_EN to cover zero length packet case
+    LPC_USB->USBCtrl=0;
+
+    SIEselectEndpoint(endpoint);
+    SIEvalidateBuffer();
+}
+
+USBHAL::USBHAL(void) {
+    // Disable IRQ
+    NVIC_DisableIRQ(USB_IRQn);
+
+    // fill in callback array
+    epCallback[0] = &USBHAL::EP1_OUT_callback;
+    epCallback[1] = &USBHAL::EP1_IN_callback;
+    epCallback[2] = &USBHAL::EP2_OUT_callback;
+    epCallback[3] = &USBHAL::EP2_IN_callback;
+    epCallback[4] = &USBHAL::EP3_OUT_callback;
+    epCallback[5] = &USBHAL::EP3_IN_callback;
+    epCallback[6] = &USBHAL::EP4_OUT_callback;
+    epCallback[7] = &USBHAL::EP4_IN_callback;
+    epCallback[8] = &USBHAL::EP5_OUT_callback;
+    epCallback[9] = &USBHAL::EP5_IN_callback;
+    epCallback[10] = &USBHAL::EP6_OUT_callback;
+    epCallback[11] = &USBHAL::EP6_IN_callback;
+    epCallback[12] = &USBHAL::EP7_OUT_callback;
+    epCallback[13] = &USBHAL::EP7_IN_callback;
+    epCallback[14] = &USBHAL::EP8_OUT_callback;
+    epCallback[15] = &USBHAL::EP8_IN_callback;
+    epCallback[16] = &USBHAL::EP9_OUT_callback;
+    epCallback[17] = &USBHAL::EP9_IN_callback;
+    epCallback[18] = &USBHAL::EP10_OUT_callback;
+    epCallback[19] = &USBHAL::EP10_IN_callback;
+    epCallback[20] = &USBHAL::EP11_OUT_callback;
+    epCallback[21] = &USBHAL::EP11_IN_callback;
+    epCallback[22] = &USBHAL::EP12_OUT_callback;
+    epCallback[23] = &USBHAL::EP12_IN_callback;
+    epCallback[24] = &USBHAL::EP13_OUT_callback;
+    epCallback[25] = &USBHAL::EP13_IN_callback;
+    epCallback[26] = &USBHAL::EP14_OUT_callback;
+    epCallback[27] = &USBHAL::EP14_IN_callback;
+    epCallback[28] = &USBHAL::EP15_OUT_callback;
+    epCallback[29] = &USBHAL::EP15_IN_callback;
+
+    // Enable power to USB device controller
+    LPC_SC->PCONP |= PCUSB;
+
+    // Enable USB clocks
+    LPC_USB->USBClkCtrl |= DEV_CLK_EN | AHB_CLK_EN;
+    while (LPC_USB->USBClkSt != (DEV_CLK_ON | AHB_CLK_ON));
+
+    // Configure pins P0.29 and P0.30 to be USB D+ and USB D-
+    LPC_PINCON->PINSEL1 &= 0xc3ffffff;
+    LPC_PINCON->PINSEL1 |= 0x14000000;
+
+    // Disconnect USB device
+    SIEdisconnect();
+
+    // Configure pin P2.9 to be Connect
+    LPC_PINCON->PINSEL4 &= 0xfffcffff;
+    LPC_PINCON->PINSEL4 |= 0x00040000;
+
+    // Connect must be low for at least 2.5uS
+    wait(0.3);
+
+    // Set the maximum packet size for the control endpoints
+    realiseEndpoint(EP0IN, MAX_PACKET_SIZE_EP0, 0);
+    realiseEndpoint(EP0OUT, MAX_PACKET_SIZE_EP0, 0);
+
+    // Attach IRQ
+    instance = this;
+    NVIC_SetVector(USB_IRQn, (uint32_t)&_usbisr);
+
+    // Enable interrupts for device events and EP0
+    LPC_USB->USBDevIntEn = EP_SLOW | DEV_STAT | FRAME;
+    enableEndpointEvent(EP0IN);
+    enableEndpointEvent(EP0OUT);
+}
+
+USBHAL::~USBHAL(void) {
+    // Ensure device disconnected
+    SIEdisconnect();
+    // Disable USB interrupts
+    NVIC_DisableIRQ(USB_IRQn);
+}
+
+void USBHAL::connect(void) {
+    NVIC_EnableIRQ(USB_IRQn);
+    // Connect USB device
+    SIEconnect();
+}
+
+void USBHAL::disconnect(void) {
+    NVIC_DisableIRQ(USB_IRQn);
+    // Disconnect USB device
+    SIEdisconnect();
+}
+
+void USBHAL::configureDevice(void) {
+    SIEconfigureDevice();
+}
+
+void USBHAL::unconfigureDevice(void) {
+    SIEunconfigureDevice();
+}
+
+void USBHAL::setAddress(uint8_t address) {
+    SIEsetAddress(address);
+}
+
+void USBHAL::EP0setup(uint8_t *buffer) {
+    endpointReadcore(EP0OUT, buffer);
+}
+
+void USBHAL::EP0read(void) {
+    // Not required
+}
+
+void USBHAL::EP0readStage(void) {
+    // Not required
+}
+
+uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) {
+    return endpointReadcore(EP0OUT, buffer);
+}
+
+void USBHAL::EP0write(uint8_t *buffer, uint32_t size) {
+    endpointWritecore(EP0IN, buffer, size);
+}
+
+void USBHAL::EP0getWriteResult(void) {
+    // Not required
+}
+
+void USBHAL::EP0stall(void) {
+    // This will stall both control endpoints
+    stallEndpoint(EP0OUT);
+}
+
+EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) {
+    return EP_PENDING;
+}
+
+EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_t *bytesRead) {
+
+    //for isochronous endpoint, we don't wait an interrupt
+    if ((endpoint >> 1) % 3 || (endpoint >> 1) == 0) {
+        if (!(epComplete & EP(endpoint)))
+            return EP_PENDING;
+    }
+
+    *bytesRead = endpointReadcore(endpoint, buffer);
+    epComplete &= ~EP(endpoint);
+    return EP_COMPLETED;
+}
+
+EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size) {
+    if (getEndpointStallState(endpoint)) {
+        return EP_STALLED;
+    }
+
+    epComplete &= ~EP(endpoint);
+
+    endpointWritecore(endpoint, data, size);
+    return EP_PENDING;
+}
+
+EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint) {
+    if (epComplete & EP(endpoint)) {
+        epComplete &= ~EP(endpoint);
+        return EP_COMPLETED;
+    }
+
+    return EP_PENDING;
+}
+
+bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t flags) {
+    // Realise an endpoint
+    LPC_USB->USBDevIntClr = EP_RLZED;
+    LPC_USB->USBReEp |= EP(endpoint);
+    LPC_USB->USBEpInd = endpoint;
+    LPC_USB->USBMaxPSize = maxPacket;
+
+    while (!(LPC_USB->USBDevIntSt & EP_RLZED));
+    LPC_USB->USBDevIntClr = EP_RLZED;
+
+    // Clear stall state
+    endpointStallState &= ~EP(endpoint);
+
+    enableEndpointEvent(endpoint);
+    return true;
+}
+
+void USBHAL::stallEndpoint(uint8_t endpoint) {
+    // Stall an endpoint
+    if ( (endpoint==EP0IN) || (endpoint==EP0OUT) ) {
+        // Conditionally stall both control endpoints
+        SIEsetEndpointStatus(EP0OUT, SIE_SES_CND_ST);
+    } else {
+        SIEsetEndpointStatus(endpoint, SIE_SES_ST);
+
+        // Update stall state
+        endpointStallState |= EP(endpoint);
+    }
+}
+
+void USBHAL::unstallEndpoint(uint8_t endpoint) {
+    // Unstall an endpoint. The endpoint will also be reinitialised
+    SIEsetEndpointStatus(endpoint, 0);
+
+    // Update stall state
+    endpointStallState &= ~EP(endpoint);
+}
+
+bool USBHAL::getEndpointStallState(uint8_t endpoint) {
+    // Returns true if endpoint stalled
+    return endpointStallState & EP(endpoint);
+}
+
+void USBHAL::remoteWakeup(void) {
+    // Remote wakeup
+    uint8_t status;
+
+    // Enable USB clocks
+    LPC_USB->USBClkCtrl |= DEV_CLK_EN | AHB_CLK_EN;
+    while (LPC_USB->USBClkSt != (DEV_CLK_ON | AHB_CLK_ON));
+
+    status = SIEgetDeviceStatus();
+    SIEsetDeviceStatus(status & ~SIE_DS_SUS);
+}
+
+void USBHAL::_usbisr(void) {
+    instance->usbisr();
+}
+
+
+void USBHAL::usbisr(void) {
+    uint8_t devStat;
+
+    if (LPC_USB->USBDevIntSt & FRAME) {
+        // Start of frame event
+        SOF(SIEgetFrameNumber());
+        // Clear interrupt status flag
+        LPC_USB->USBDevIntClr = FRAME;
+    }
+
+    if (LPC_USB->USBDevIntSt & DEV_STAT) {
+        // Device Status interrupt
+        // Must clear the interrupt status flag before reading the device status from the SIE
+        LPC_USB->USBDevIntClr = DEV_STAT;
+
+        // Read device status from SIE
+        devStat = SIEgetDeviceStatus();
+        //printf("devStat: %d\r\n", devStat);
+
+        if (devStat & SIE_DS_SUS_CH) {
+            // Suspend status changed
+            if((devStat & SIE_DS_SUS) != 0) {
+                suspendStateChanged(0);
+            }
+        }
+
+        if (devStat & SIE_DS_RST) {
+            // Bus reset
+            if((devStat & SIE_DS_SUS) == 0) {
+                suspendStateChanged(1);
+            }
+            busReset();
+        }
+    }
+
+    if (LPC_USB->USBDevIntSt & EP_SLOW) {
+        // (Slow) Endpoint Interrupt
+
+        // Process each endpoint interrupt
+        if (LPC_USB->USBEpIntSt & EP(EP0OUT)) {
+            if (selectEndpointClearInterrupt(EP0OUT) & SIE_SE_STP) {
+                // this is a setup packet
+                EP0setupCallback();
+            } else {
+                EP0out();
+            }
+            LPC_USB->USBDevIntClr = EP_SLOW;
+        }
+
+        if (LPC_USB->USBEpIntSt & EP(EP0IN)) {
+            selectEndpointClearInterrupt(EP0IN);
+            LPC_USB->USBDevIntClr = EP_SLOW;
+            EP0in();
+        }
+
+        for (uint8_t num = 2; num < 16*2; num++) {
+            if (LPC_USB->USBEpIntSt & EP(num)) {
+                selectEndpointClearInterrupt(num);
+                epComplete |= EP(num);
+                LPC_USB->USBDevIntClr = EP_SLOW;
+                if ((instance->*(epCallback[num - 2]))()) {
+                    epComplete &= ~EP(num);
+                }
+            }
+        }
+    }
+}
+
+#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_NXP/USBHAL_LPC40.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_NXP/USBHAL_LPC40.cpp	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,628 @@
+/* Copyright (c) 2010-2011 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#if defined(TARGET_LPC4088) || defined(TARGET_LPC4088_DM)
+
+#include "USBHAL.h"
+
+
+// Get endpoint direction
+#define IN_EP(endpoint)     ((endpoint) & 1U ? true : false)
+#define OUT_EP(endpoint)    ((endpoint) & 1U ? false : true)
+
+// Convert physical endpoint number to register bit
+#define EP(endpoint) (1UL<<endpoint)
+
+// Power Control for Peripherals register
+#define PCUSB      (1UL<<31)
+
+// USB Clock Control register
+#define DEV_CLK_EN  (1UL<<1)
+#define PORT_CLK_EN (1UL<<3)
+#define AHB_CLK_EN  (1UL<<4)
+
+// USB Clock Status register
+#define DEV_CLK_ON (1UL<<1)
+#define AHB_CLK_ON (1UL<<4)
+
+// USB Device Interupt registers
+#define FRAME      (1UL<<0)
+#define EP_FAST    (1UL<<1)
+#define EP_SLOW    (1UL<<2)
+#define DEV_STAT   (1UL<<3)
+#define CCEMPTY    (1UL<<4)
+#define CDFULL     (1UL<<5)
+#define RxENDPKT   (1UL<<6)
+#define TxENDPKT   (1UL<<7)
+#define EP_RLZED   (1UL<<8)
+#define ERR_INT    (1UL<<9)
+
+// USB Control register
+#define RD_EN (1<<0)
+#define WR_EN (1<<1)
+#define LOG_ENDPOINT(endpoint) ((endpoint>>1)<<2)
+
+// USB Receive Packet Length register
+#define DV      (1UL<<10)
+#define PKT_RDY (1UL<<11)
+#define PKT_LNGTH_MASK (0x3ff)
+
+// Serial Interface Engine (SIE)
+#define SIE_WRITE   (0x01)
+#define SIE_READ    (0x02)
+#define SIE_COMMAND (0x05)
+#define SIE_CMD_CODE(phase, data) ((phase<<8)|(data<<16))
+
+// SIE Command codes
+#define SIE_CMD_SET_ADDRESS        (0xD0)
+#define SIE_CMD_CONFIGURE_DEVICE   (0xD8)
+#define SIE_CMD_SET_MODE           (0xF3)
+#define SIE_CMD_READ_FRAME_NUMBER  (0xF5)
+#define SIE_CMD_READ_TEST_REGISTER (0xFD)
+#define SIE_CMD_SET_DEVICE_STATUS  (0xFE)
+#define SIE_CMD_GET_DEVICE_STATUS  (0xFE)
+#define SIE_CMD_GET_ERROR_CODE     (0xFF)
+#define SIE_CMD_READ_ERROR_STATUS  (0xFB)
+
+#define SIE_CMD_SELECT_ENDPOINT(endpoint)                 (0x00+endpoint)
+#define SIE_CMD_SELECT_ENDPOINT_CLEAR_INTERRUPT(endpoint) (0x40+endpoint)
+#define SIE_CMD_SET_ENDPOINT_STATUS(endpoint)             (0x40+endpoint)
+
+#define SIE_CMD_CLEAR_BUFFER    (0xF2)
+#define SIE_CMD_VALIDATE_BUFFER (0xFA)
+
+// SIE Device Status register
+#define SIE_DS_CON    (1<<0)
+#define SIE_DS_CON_CH (1<<1)
+#define SIE_DS_SUS    (1<<2)
+#define SIE_DS_SUS_CH (1<<3)
+#define SIE_DS_RST    (1<<4)
+
+// SIE Device Set Address register
+#define SIE_DSA_DEV_EN  (1<<7)
+
+// SIE Configue Device register
+#define SIE_CONF_DEVICE (1<<0)
+
+// Select Endpoint register
+#define SIE_SE_FE       (1<<0)
+#define SIE_SE_ST       (1<<1)
+#define SIE_SE_STP      (1<<2)
+#define SIE_SE_PO       (1<<3)
+#define SIE_SE_EPN      (1<<4)
+#define SIE_SE_B_1_FULL (1<<5)
+#define SIE_SE_B_2_FULL (1<<6)
+
+// Set Endpoint Status command
+#define SIE_SES_ST      (1<<0)
+#define SIE_SES_DA      (1<<5)
+#define SIE_SES_RF_MO   (1<<6)
+#define SIE_SES_CND_ST  (1<<7)
+
+
+USBHAL * USBHAL::instance;
+
+static volatile int epComplete;
+static uint32_t endpointStallState;
+
+static void SIECommand(uint32_t command) {
+    // The command phase of a SIE transaction
+    LPC_USB->DevIntClr = CCEMPTY;
+    LPC_USB->CmdCode = SIE_CMD_CODE(SIE_COMMAND, command);
+    while (!(LPC_USB->DevIntSt & CCEMPTY));
+}
+
+static void SIEWriteData(uint8_t data) {
+    // The data write phase of a SIE transaction
+    LPC_USB->DevIntClr = CCEMPTY;
+    LPC_USB->CmdCode = SIE_CMD_CODE(SIE_WRITE, data);
+    while (!(LPC_USB->DevIntSt & CCEMPTY));
+}
+
+static uint8_t SIEReadData(uint32_t command) {
+    // The data read phase of a SIE transaction
+    LPC_USB->DevIntClr = CDFULL;
+    LPC_USB->CmdCode = SIE_CMD_CODE(SIE_READ, command);
+    while (!(LPC_USB->DevIntSt & CDFULL));
+    return (uint8_t)LPC_USB->CmdData;
+}
+
+static void SIEsetDeviceStatus(uint8_t status) {
+    // Write SIE device status register
+    SIECommand(SIE_CMD_SET_DEVICE_STATUS);
+    SIEWriteData(status);
+}
+
+static uint8_t SIEgetDeviceStatus(void) {
+    // Read SIE device status register
+    SIECommand(SIE_CMD_GET_DEVICE_STATUS);
+    return SIEReadData(SIE_CMD_GET_DEVICE_STATUS);
+}
+
+void SIEsetAddress(uint8_t address) {
+    // Write SIE device address register
+    SIECommand(SIE_CMD_SET_ADDRESS);
+    SIEWriteData((address & 0x7f) | SIE_DSA_DEV_EN);
+}
+
+static uint8_t SIEselectEndpoint(uint8_t endpoint) {
+    // SIE select endpoint command
+    SIECommand(SIE_CMD_SELECT_ENDPOINT(endpoint));
+    return SIEReadData(SIE_CMD_SELECT_ENDPOINT(endpoint));
+}
+
+static uint8_t SIEclearBuffer(void) {
+    // SIE clear buffer command
+    SIECommand(SIE_CMD_CLEAR_BUFFER);
+    return SIEReadData(SIE_CMD_CLEAR_BUFFER);
+}
+
+static void SIEvalidateBuffer(void) {
+    // SIE validate buffer command
+    SIECommand(SIE_CMD_VALIDATE_BUFFER);
+}
+
+static void SIEsetEndpointStatus(uint8_t endpoint, uint8_t status) {
+    // SIE set endpoint status command
+    SIECommand(SIE_CMD_SET_ENDPOINT_STATUS(endpoint));
+    SIEWriteData(status);
+}
+
+static uint16_t SIEgetFrameNumber(void) __attribute__ ((unused));
+static uint16_t SIEgetFrameNumber(void) {
+    // Read current frame number
+    uint16_t lowByte;
+    uint16_t highByte;
+
+    SIECommand(SIE_CMD_READ_FRAME_NUMBER);
+    lowByte = SIEReadData(SIE_CMD_READ_FRAME_NUMBER);
+    highByte = SIEReadData(SIE_CMD_READ_FRAME_NUMBER);
+
+    return (highByte << 8) | lowByte;
+}
+
+static void SIEconfigureDevice(void) {
+    // SIE Configure device command
+    SIECommand(SIE_CMD_CONFIGURE_DEVICE);
+    SIEWriteData(SIE_CONF_DEVICE);
+}
+
+static void SIEunconfigureDevice(void) {
+    // SIE Configure device command
+    SIECommand(SIE_CMD_CONFIGURE_DEVICE);
+    SIEWriteData(0);
+}
+
+static void SIEconnect(void) {
+    // Connect USB device
+    uint8_t status = SIEgetDeviceStatus();
+    SIEsetDeviceStatus(status | SIE_DS_CON);
+}
+
+
+static void SIEdisconnect(void) {
+    // Disconnect USB device
+    uint8_t status = SIEgetDeviceStatus();
+    SIEsetDeviceStatus(status & ~SIE_DS_CON);
+}
+
+
+static uint8_t selectEndpointClearInterrupt(uint8_t endpoint) {
+    // Implemented using using EP_INT_CLR.
+    LPC_USB->EpIntClr = EP(endpoint);
+    while (!(LPC_USB->DevIntSt & CDFULL));
+    return (uint8_t)LPC_USB->CmdData;
+}
+
+
+static void enableEndpointEvent(uint8_t endpoint) {
+    // Enable an endpoint interrupt
+    LPC_USB->EpIntEn |= EP(endpoint);
+}
+
+static void disableEndpointEvent(uint8_t endpoint) __attribute__ ((unused));
+static void disableEndpointEvent(uint8_t endpoint) {
+    // Disable an endpoint interrupt
+    LPC_USB->EpIntEn &= ~EP(endpoint);
+}
+
+static volatile uint32_t __attribute__((used)) dummyRead;
+uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) {
+    // Read from an OUT endpoint
+    uint32_t size;
+    uint32_t i;
+    uint32_t data = 0;
+    uint8_t offset;
+
+    LPC_USB->Ctrl = LOG_ENDPOINT(endpoint) | RD_EN;
+    while (!(LPC_USB->RxPLen & PKT_RDY));
+
+    size = LPC_USB->RxPLen & PKT_LNGTH_MASK;
+
+    offset = 0;
+
+    if (size > 0) {
+        for (i=0; i<size; i++) {
+            if (offset==0) {
+                // Fetch up to four bytes of data as a word
+                data = LPC_USB->RxData;
+            }
+
+            // extract a byte
+            *buffer = (data>>offset) & 0xff;
+            buffer++;
+
+            // move on to the next byte
+            offset = (offset + 8) % 32;
+        }
+    } else {
+        dummyRead = LPC_USB->RxData;
+    }
+
+    LPC_USB->Ctrl = 0;
+
+    if ((endpoint >> 1) % 3 || (endpoint >> 1) == 0) {
+        SIEselectEndpoint(endpoint);
+        SIEclearBuffer();
+    }
+
+    return size;
+}
+
+static void endpointWritecore(uint8_t endpoint, uint8_t *buffer, uint32_t size) {
+    // Write to an IN endpoint
+    uint32_t temp, data;
+    uint8_t offset;
+
+    LPC_USB->Ctrl = LOG_ENDPOINT(endpoint) | WR_EN;
+
+    LPC_USB->TxPLen = size;
+    offset = 0;
+    data = 0;
+
+    if (size>0) {
+        do {
+            // Fetch next data byte into a word-sized temporary variable
+            temp = *buffer++;
+
+            // Add to current data word
+            temp = temp << offset;
+            data = data | temp;
+
+            // move on to the next byte
+            offset = (offset + 8) % 32;
+            size--;
+
+            if ((offset==0) || (size==0)) {
+                // Write the word to the endpoint
+                LPC_USB->TxData = data;
+                data = 0;
+            }
+        } while (size>0);
+    } else {
+        LPC_USB->TxData = 0;
+    }
+
+    // Clear WR_EN to cover zero length packet case
+    LPC_USB->Ctrl=0;
+
+    SIEselectEndpoint(endpoint);
+    SIEvalidateBuffer();
+}
+
+USBHAL::USBHAL(void) {
+    // Disable IRQ
+    NVIC_DisableIRQ(USB_IRQn);
+
+    // fill in callback array
+    epCallback[0] = &USBHAL::EP1_OUT_callback;
+    epCallback[1] = &USBHAL::EP1_IN_callback;
+    epCallback[2] = &USBHAL::EP2_OUT_callback;
+    epCallback[3] = &USBHAL::EP2_IN_callback;
+    epCallback[4] = &USBHAL::EP3_OUT_callback;
+    epCallback[5] = &USBHAL::EP3_IN_callback;
+    epCallback[6] = &USBHAL::EP4_OUT_callback;
+    epCallback[7] = &USBHAL::EP4_IN_callback;
+    epCallback[8] = &USBHAL::EP5_OUT_callback;
+    epCallback[9] = &USBHAL::EP5_IN_callback;
+    epCallback[10] = &USBHAL::EP6_OUT_callback;
+    epCallback[11] = &USBHAL::EP6_IN_callback;
+    epCallback[12] = &USBHAL::EP7_OUT_callback;
+    epCallback[13] = &USBHAL::EP7_IN_callback;
+    epCallback[14] = &USBHAL::EP8_OUT_callback;
+    epCallback[15] = &USBHAL::EP8_IN_callback;
+    epCallback[16] = &USBHAL::EP9_OUT_callback;
+    epCallback[17] = &USBHAL::EP9_IN_callback;
+    epCallback[18] = &USBHAL::EP10_OUT_callback;
+    epCallback[19] = &USBHAL::EP10_IN_callback;
+    epCallback[20] = &USBHAL::EP11_OUT_callback;
+    epCallback[21] = &USBHAL::EP11_IN_callback;
+    epCallback[22] = &USBHAL::EP12_OUT_callback;
+    epCallback[23] = &USBHAL::EP12_IN_callback;
+    epCallback[24] = &USBHAL::EP13_OUT_callback;
+    epCallback[25] = &USBHAL::EP13_IN_callback;
+    epCallback[26] = &USBHAL::EP14_OUT_callback;
+    epCallback[27] = &USBHAL::EP14_IN_callback;
+    epCallback[28] = &USBHAL::EP15_OUT_callback;
+    epCallback[29] = &USBHAL::EP15_IN_callback;
+
+    // Enable power to USB device controller
+    LPC_SC->PCONP |= PCUSB;
+
+    // Enable USB clocks
+    LPC_USB->USBClkCtrl |= DEV_CLK_EN | AHB_CLK_EN | PORT_CLK_EN;
+    while ((LPC_USB->USBClkSt & (DEV_CLK_EN | AHB_CLK_EN | PORT_CLK_EN)) != (DEV_CLK_ON | AHB_CLK_ON | PORT_CLK_EN));
+
+    // Select port USB2
+    LPC_USB->StCtrl |= 3;
+
+
+    // Configure pin P0.31 to be USB2
+    LPC_IOCON->P0_31 &= ~0x07;
+    LPC_IOCON->P0_31 |= 0x01;
+
+    // Disconnect USB device
+    SIEdisconnect();
+
+    // Configure pin P0.14 to be Connect
+    LPC_IOCON->P0_14 &= ~0x07;
+    LPC_IOCON->P0_14 |= 0x03;
+
+    // Connect must be low for at least 2.5uS
+    wait(0.3);
+
+    // Set the maximum packet size for the control endpoints
+    realiseEndpoint(EP0IN, MAX_PACKET_SIZE_EP0, 0);
+    realiseEndpoint(EP0OUT, MAX_PACKET_SIZE_EP0, 0);
+
+    // Attach IRQ
+    instance = this;
+    NVIC_SetVector(USB_IRQn, (uint32_t)&_usbisr);
+
+    // Enable interrupts for device events and EP0
+    LPC_USB->DevIntEn = EP_SLOW | DEV_STAT | FRAME;
+    enableEndpointEvent(EP0IN);
+    enableEndpointEvent(EP0OUT);
+}
+
+USBHAL::~USBHAL(void) {
+    // Ensure device disconnected
+    SIEdisconnect();
+    // Disable USB interrupts
+    NVIC_DisableIRQ(USB_IRQn);
+}
+
+void USBHAL::connect(void) {
+    NVIC_EnableIRQ(USB_IRQn);
+    // Connect USB device
+    SIEconnect();
+}
+
+void USBHAL::disconnect(void) {
+    NVIC_DisableIRQ(USB_IRQn);
+    // Disconnect USB device
+    SIEdisconnect();
+}
+
+void USBHAL::configureDevice(void) {
+    SIEconfigureDevice();
+}
+
+void USBHAL::unconfigureDevice(void) {
+    SIEunconfigureDevice();
+}
+
+void USBHAL::setAddress(uint8_t address) {
+    SIEsetAddress(address);
+}
+
+void USBHAL::EP0setup(uint8_t *buffer) {
+    endpointReadcore(EP0OUT, buffer);
+}
+
+void USBHAL::EP0read(void) {
+    // Not required
+}
+
+void USBHAL::EP0readStage(void) {
+    // Not required
+}
+
+uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) {
+    return endpointReadcore(EP0OUT, buffer);
+}
+
+void USBHAL::EP0write(uint8_t *buffer, uint32_t size) {
+    endpointWritecore(EP0IN, buffer, size);
+}
+
+void USBHAL::EP0getWriteResult(void) {
+    // Not required
+}
+
+void USBHAL::EP0stall(void) {
+    // This will stall both control endpoints
+    stallEndpoint(EP0OUT);
+}
+
+EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) {
+    return EP_PENDING;
+}
+
+EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_t *bytesRead) {
+
+    //for isochronous endpoint, we don't wait an interrupt
+    if ((endpoint >> 1) % 3 || (endpoint >> 1) == 0) {
+        if (!(epComplete & EP(endpoint)))
+            return EP_PENDING;
+    }
+
+    *bytesRead = endpointReadcore(endpoint, buffer);
+    epComplete &= ~EP(endpoint);
+    return EP_COMPLETED;
+}
+
+EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size) {
+    if (getEndpointStallState(endpoint)) {
+        return EP_STALLED;
+    }
+
+    epComplete &= ~EP(endpoint);
+
+    endpointWritecore(endpoint, data, size);
+    return EP_PENDING;
+}
+
+EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint) {
+    if (epComplete & EP(endpoint)) {
+        epComplete &= ~EP(endpoint);
+        return EP_COMPLETED;
+    }
+
+    return EP_PENDING;
+}
+
+bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t flags) {
+    // Realise an endpoint
+    LPC_USB->DevIntClr = EP_RLZED;
+    LPC_USB->ReEp |= EP(endpoint);
+    LPC_USB->EpInd = endpoint;
+    LPC_USB->MaxPSize = maxPacket;
+
+    while (!(LPC_USB->DevIntSt & EP_RLZED));
+    LPC_USB->DevIntClr = EP_RLZED;
+
+    // Clear stall state
+    endpointStallState &= ~EP(endpoint);
+
+    enableEndpointEvent(endpoint);
+    return true;
+}
+
+void USBHAL::stallEndpoint(uint8_t endpoint) {
+    // Stall an endpoint
+    if ( (endpoint==EP0IN) || (endpoint==EP0OUT) ) {
+        // Conditionally stall both control endpoints
+        SIEsetEndpointStatus(EP0OUT, SIE_SES_CND_ST);
+    } else {
+        SIEsetEndpointStatus(endpoint, SIE_SES_ST);
+
+        // Update stall state
+        endpointStallState |= EP(endpoint);
+    }
+}
+
+void USBHAL::unstallEndpoint(uint8_t endpoint) {
+    // Unstall an endpoint. The endpoint will also be reinitialised
+    SIEsetEndpointStatus(endpoint, 0);
+
+    // Update stall state
+    endpointStallState &= ~EP(endpoint);
+}
+
+bool USBHAL::getEndpointStallState(uint8_t endpoint) {
+    // Returns true if endpoint stalled
+    return endpointStallState & EP(endpoint);
+}
+
+void USBHAL::remoteWakeup(void) {
+    // Remote wakeup
+    uint8_t status;
+
+    // Enable USB clocks
+    LPC_USB->USBClkCtrl |= DEV_CLK_EN | AHB_CLK_EN;
+    while (LPC_USB->USBClkSt != (DEV_CLK_ON | AHB_CLK_ON));
+
+    status = SIEgetDeviceStatus();
+    SIEsetDeviceStatus(status & ~SIE_DS_SUS);
+}
+
+void USBHAL::_usbisr(void) {
+    instance->usbisr();
+}
+
+
+void USBHAL::usbisr(void) {
+    uint8_t devStat;
+
+    if (LPC_USB->DevIntSt & FRAME) {
+        // Start of frame event
+        SOF(SIEgetFrameNumber());
+        // Clear interrupt status flag
+        LPC_USB->DevIntClr = FRAME;
+    }
+
+    if (LPC_USB->DevIntSt & DEV_STAT) {
+        // Device Status interrupt
+        // Must clear the interrupt status flag before reading the device status from the SIE
+        LPC_USB->DevIntClr = DEV_STAT;
+
+        // Read device status from SIE
+        devStat = SIEgetDeviceStatus();
+        //printf("devStat: %d\r\n", devStat);
+
+        if (devStat & SIE_DS_SUS_CH) {
+            // Suspend status changed
+            if((devStat & SIE_DS_SUS) != 0) {
+                suspendStateChanged(0);
+            }
+        }
+
+        if (devStat & SIE_DS_RST) {
+            // Bus reset
+            if((devStat & SIE_DS_SUS) == 0) {
+                suspendStateChanged(1);
+            }
+            busReset();
+        }
+    }
+
+    if (LPC_USB->DevIntSt & EP_SLOW) {
+        // (Slow) Endpoint Interrupt
+
+        // Process each endpoint interrupt
+        if (LPC_USB->EpIntSt & EP(EP0OUT)) {
+            if (selectEndpointClearInterrupt(EP0OUT) & SIE_SE_STP) {
+                // this is a setup packet
+                EP0setupCallback();
+            } else {
+                EP0out();
+            }
+            LPC_USB->DevIntClr = EP_SLOW;
+        }
+
+        if (LPC_USB->EpIntSt & EP(EP0IN)) {
+            selectEndpointClearInterrupt(EP0IN);
+            LPC_USB->DevIntClr = EP_SLOW;
+            EP0in();
+        }
+
+        for (uint8_t num = 2; num < 16*2; num++) {
+            if (LPC_USB->EpIntSt & EP(num)) {
+                selectEndpointClearInterrupt(num);
+                epComplete |= EP(num);
+                LPC_USB->DevIntClr = EP_SLOW;
+                if ((instance->*(epCallback[num - 2]))()) {
+                    epComplete &= ~EP(num);
+                }
+            }
+        }
+    }
+}
+
+#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/inc/devdrv_usb_function_api.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/inc/devdrv_usb_function_api.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,365 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : devdrv_usb_function_api.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description  : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB_FUNCTION_API_H
+#define USB_FUNCTION_API_H
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include <MBRZA1H.h>
+#include "r_typedefs.h"
+#include "usb0_function_api.h"
+#include "usb1_function_api.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+typedef struct
+{
+    uint32_t fifo;
+    uint32_t buffer;
+    uint32_t bytes;
+    uint32_t dir;
+    uint32_t size;
+} USB_FUNCTION_DMA_t;
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+#define USBFCLOCK_X1_48MHZ                          (0x0000u)       /* USB_X1_48MHz */
+#define USBFCLOCK_EXTAL_12MHZ                       (0x0004u)       /* EXTAL_12MHz  */
+
+#define DEVDRV_USBF_ON                              (1)
+#define DEVDRV_USBF_OFF                             (0)
+#define DEVDRV_USBF_YES                             (1)
+#define DEVDRV_USBF_NO                              (0)
+
+#define DEVDRV_USBF_STALL                           (-2)
+
+#define DEVDRV_USBF_WRITEEND                        (0)
+#define DEVDRV_USBF_WRITESHRT                       (1)
+#define DEVDRV_USBF_WRITING                         (2)
+#define DEVDRV_USBF_WRITEDMA                        (3)
+
+#define DEVDRV_USBF_FIFOERROR                       (0xffff)
+
+#define DEVDRV_USBF_PIPE_IDLE                       (0x00)
+#define DEVDRV_USBF_PIPE_WAIT                       (0x01)
+#define DEVDRV_USBF_PIPE_DONE                       (0x02)
+#define DEVDRV_USBF_PIPE_NORES                      (0x03)
+#define DEVDRV_USBF_PIPE_STALL                      (0x04)
+
+#define DEVDRV_USBF_PID_NAK                         (0x0000u)
+#define DEVDRV_USBF_PID_BUF                         (0x0001u)
+#define DEVDRV_USBF_PID_STALL                       (0x0002u)
+#define DEVDRV_USBF_PID_STALL2                      (0x0003u)
+
+#define USB_FUNCTION_NON_SPEED                      (0)
+#define USB_FUNCTION_LOW_SPEED                      (1)
+#define USB_FUNCTION_FULL_SPEED                     (2)
+#define USB_FUNCTION_HIGH_SPEED                     (3)
+
+#define USB_FUNCTION_READEND                        (0)
+#define USB_FUNCTION_READSHRT                       (1)
+#define USB_FUNCTION_READING                        (2)
+#define USB_FUNCTION_READOVER                       (3)
+#define USB_FUNCTION_READZERO                       (4)
+
+#define USB_FUNCTION_MAX_PIPE_NO                    (15u)
+#define USB_FUNCTION_PIPE0                          (0)
+#define USB_FUNCTION_PIPE1                          (1)
+#define USB_FUNCTION_PIPE2                          (2)
+#define USB_FUNCTION_PIPE3                          (3)
+#define USB_FUNCTION_PIPE4                          (4)
+#define USB_FUNCTION_PIPE5                          (5)
+#define USB_FUNCTION_PIPE6                          (6)
+#define USB_FUNCTION_PIPE7                          (7)
+#define USB_FUNCTION_PIPE8                          (8)
+#define USB_FUNCTION_PIPE9                          (9)
+#define USB_FUNCTION_PIPEA                          (10)
+#define USB_FUNCTION_PIPEB                          (11)
+#define USB_FUNCTION_PIPEC                          (12)
+#define USB_FUNCTION_PIPED                          (13)
+#define USB_FUNCTION_PIPEE                          (14)
+#define USB_FUNCTION_PIPEF                          (15)
+
+#define USB_FUNCTION_ISO                            (0xc000u)
+#define USB_FUNCTION_INTERRUPT                      (0x8000u)
+#define USB_FUNCTION_BULK                           (0x4000u)
+
+#define USB_FUNCTION_NONE                           (0x0000u)
+#define USB_FUNCTON_BFREFIELD                       (0x0400u)
+#define USB_FUNCTION_BFREON                         (0x0400u)
+#define USB_FUNCTION_BFREOFF                        (0x0000u)
+#define USB_FUNCTION_DBLBFIELD                      (0x0200u)
+#define USB_FUNCTION_DBLBON                         (0x0200u)
+#define USB_FUNCTION_DBLBOFF                        (0x0000u)
+#define USB_FUNCTION_CNTMDFIELD                     (0x0100u)
+#define USB_FUNCTION_CNTMDON                        (0x0100u)
+#define USB_FUNCTION_CNTMDOFF                       (0x0000u)
+#define USB_FUNCTION_SHTNAKON                       (0x0080u)
+#define USB_FUNCTION_SHTNAKOFF                      (0x0000u)
+#define USB_FUNCTION_DIRFIELD                       (0x0010u)
+#define USB_FUNCTION_DIR_P_OUT                      (0x0000u)
+#define USB_FUNCTION_DIR_P_IN                       (0x0010u)
+#define USB_FUNCTION_EPNUMFIELD                     (0x000fu)
+#define USB_FUNCTION_MAX_EP_NO                      (15u)
+#define USB_FUNCTION_EP0                            (0u)
+#define USB_FUNCTION_EP1                            (1u)
+#define USB_FUNCTION_EP2                            (2u)
+#define USB_FUNCTION_EP3                            (3u)
+#define USB_FUNCTION_EP4                            (4u)
+#define USB_FUNCTION_EP5                            (5u)
+#define USB_FUNCTION_EP6                            (6u)
+#define USB_FUNCTION_EP7                            (7u)
+#define USB_FUNCTION_EP8                            (8u)
+#define USB_FUNCTION_EP9                            (9u)
+#define USB_FUNCTION_EP10                           (10u)
+#define USB_FUNCTION_EP11                           (11u)
+#define USB_FUNCTION_EP12                           (12u)
+#define USB_FUNCTION_EP13                           (13u)
+#define USB_FUNCTION_EP14                           (14u)
+#define USB_FUNCTION_EP15                           (15u)
+
+#define USB_FUNCTION_EPTABLE_LENGTH                 (5u)
+
+#define USB_FUNCTION_CUSE                           (0)
+#define USB_FUNCTION_D0USE                          (1)
+#define USB_FUNCTION_D0DMA                          (2)
+#define USB_FUNCTION_D1USE                          (3)
+#define USB_FUNCTION_D1DMA                          (4)
+
+#define USB_FUNCTION_CFIFO_USE                      (0x0000)
+#define USB_FUNCTION_D0FIFO_USE                     (0x1000)
+#define USB_FUNCTION_D1FIFO_USE                     (0x2000)
+#define USB_FUNCTION_D0FIFO_DMA                     (0x5000)
+#define USB_FUNCTION_D1FIFO_DMA                     (0x6000)
+
+#define USB_FUNCTION_BUF2FIFO                       (0)
+#define USB_FUNCTION_FIFO2BUF                       (1)
+
+#define USB_FUNCTION_DVST_POWERED                   (0x0001)
+#define USB_FUNCTION_DVST_DEFAULT                   (0x0002)
+#define USB_FUNCTION_DVST_ADDRESS                   (0x0003)
+#define USB_FUNCTION_DVST_CONFIGURED                (0x0004)
+#define USB_FUNCTION_DVST_SUSPEND                   (0x0005)
+#define USB_FUNCTION_DVST_CONFIGURED_SUSPEND        (0x0006)
+
+#define USB_FUNCTION_FUNCTION_TEST_SELECT           (0xff00u)
+#define USB_FUNCTION_FUNCTION_TEST_J                (0x0100u)
+#define USB_FUNCTION_FUNCTION_TEST_K                (0x0200u)
+#define USB_FUNCTION_FUNCTION_TEST_SE0_NAK          (0x0300u)
+#define USB_FUNCTION_FUNCTION_TEST_PACKET           (0x0400u)
+#define USB_FUNCTION_FUNCTION_TEST_FORCE_ENABLE     (0x0500u)
+#define USB_FUNCTION_FUNCTION_TEST_STSelectors      (0x0600u)
+#define USB_FUNCTION_FUNCTION_TEST_Reserved         (0x4000u)
+#define USB_FUNCTION_FUNCTION_TEST_VSTModes         (0xc000u)
+
+#define USB_FUNCTION_DT_TYPE                        (0xff00u)
+#define USB_FUNCTION_DT_INDEX                       (0xff)
+#define USB_FUNCTION_DT_DEVICE                      (0x01)
+#define USB_FUNCTION_DT_CONFIGURATION               (0x02)
+#define USB_FUNCTION_DT_STRING                      (0x03)
+#define USB_FUNCTION_DT_INTERFACE                   (0x04)
+#define USB_FUNCTION_DT_ENDPOINT                    (0x05)
+#define USB_FUNCTION_DT_DEVICE_QUALIFIER            (0x06)
+#define USB_FUNCTION_DT_OTHER_SPEED_CONFIGURATION   (0x07)
+#define USB_FUNCTION_DT_INTERFACE_POWER             (0x08)
+
+#define USB_FUNCTION_CF_RESERVED                    (0x80)
+#define USB_FUNCTION_CF_SELF                        (0x40)
+#define USB_FUNCTION_CF_RWUP                        (0x20)
+#define USB_FUNCTION_CF_NORWUP                      (0x00)
+#define USB_FUNCTION_EP_ERROR                       (0xff)
+
+#define USB_FUNCTION_EP_OUT                         (0x00)
+#define USB_FUNCTION_EP_IN                          (0x80)
+#define USB_FUNCTION_EP_CNTRL                       (0x00)
+#define USB_FUNCTION_EP_ISO                         (0x01)
+#define USB_FUNCTION_EP_BULK                        (0x02)
+#define USB_FUNCTION_EP_INT                         (0x03)
+
+#define USB_FUNCTION_STANDARD_REQUEST               (0x0000u)
+#define USB_FUNCTION_CLASS_REQUEST                  (0x0020u)
+#define USB_FUNCTION_VENDOR_REQUEST                 (0x0040u)
+#define USB_FUNCTION_DEVICE_REQUEST                 (0x0000u)
+#define USB_FUNCTION_INTERFACE_REQUEST              (0x0001u)
+#define USB_FUNCTION_ENDPOINT_REQUEST               (0x0002u)
+
+#define USB_FUNCTION_GETSTATUS_BUSPOWERD            (0x0000u)
+#define USB_FUNCTION_GETSTATUS_SELFPOWERD           (0x0001u)
+#define USB_FUNCTION_GETSTATUS_REMOTEWAKEUP         (0x0002u)
+#define USB_FUNCTION_GETSTATUS_NOTHALT              (0x0000u)
+#define USB_FUNCTION_GETSTATUS_HALT                 (0x0001u)
+
+#define USB_FUNCTION_FEATURE_ENDPOINT_HALT          (0x0000u)
+#define USB_FUNCTION_FEATURE_REMOTE_WAKEUP          (0x0001u)
+#define USB_FUNCTION_FEATURE_TEST_MODE              (0x0002u)
+
+#define USB_FUNCTION_bRequest                       (0xff00u)       /* b15-8:bRequest */
+#define USB_FUNCTION_bmRequestType                  (0x00ffu)       /* b7-0: bmRequestType */
+#define USB_FUNCTION_bmRequestTypeDir               (0x0080u)       /* b7  : Data transfer direction */
+#define USB_FUNCTION_bmRequestTypeType              (0x0060u)       /* b6-5: Type */
+#define USB_FUNCTION_bmRequestTypeRecip             (0x001fu)       /* b4-0: Recipient */
+
+
+/*******************************************************************************
+Variable Externs
+*******************************************************************************/
+
+
+/*******************************************************************************
+Functions Prototypes
+*******************************************************************************/
+#if 0
+void     R_USB_api_function_init(uint16_t root, uint8_t int_level, uint16_t mode, uint16_t clockmode);
+uint16_t R_USB_api_function_IsConfigured(uint16_t root);
+uint16_t R_USB_api_function_CtrlReadStart(uint16_t root, uint32_t size, uint8_t *data);
+void     R_USB_api_function_CtrlWriteStart(uint16_t root, uint32_t size, uint8_t *data);
+uint16_t R_USB_api_function_start_send_transfer(uint16_t root, uint16_t pipe, uint32_t size, uint8_t *data);
+uint16_t R_USB_api_function_check_pipe_status(uint16_t root, uint16_t pipe, uint32_t *size);
+void     R_USB_api_function_clear_pipe_status(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_start_receive_transfer(uint16_t root, uint16_t pipe, uint32_t size, uint8_t *data);
+void     R_USB_api_function_set_pid_buf(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_set_pid_nak(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_set_pid_stall(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_clear_pid_stall(uint16_t root, uint16_t pipe);
+uint16_t R_USB_api_function_get_pid(uint16_t root, uint16_t pipe);
+int32_t  R_USB_api_function_check_stall(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_set_sqclr(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_set_sqset(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_set_csclr(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_set_curpipe(uint16_t root, uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
+void     R_USB_api_function_clear_brdy_sts(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_clear_bemp_sts(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_clear_nrdy_sts(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_enable_brdy_int(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_disable_brdy_int(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_enable_bemp_int(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_disable_bemp_int(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_enable_nrdy_int(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_disable_nrdy_int(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_stop_transfer(uint16_t root, uint16_t pipe);
+#endif
+
+#ifdef USB0_FUNCTION_API_H
+void     usb0_function_interrupt(uint32_t int_sense);
+void     usb0_function_dma_interrupt_d0fifo(uint32_t int_sense);
+void     usb0_function_dma_interrupt_d1fifo(uint32_t int_sense);
+
+void     usb0_function_Class0(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Class1(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Class2(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Class3(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Class4(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Class5(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Vendor0(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Vendor1(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Vendor2(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Vendor3(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Vendor4(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Vendor5(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_ResetDescriptor(uint16_t mode);
+
+IRQn_Type Userdef_USB_usb0_function_d0fifo_dmaintid(void);
+IRQn_Type Userdef_USB_usb0_function_d1fifo_dmaintid(void);
+void     Userdef_USB_usb0_function_attach(void);
+void     Userdef_USB_usb0_function_detach(void);
+void     Userdef_USB_usb0_function_delay_1ms(void);
+void     Userdef_USB_usb0_function_delay_xms(uint32_t msec);
+void     Userdef_USB_usb0_function_delay_10us(uint32_t usec);
+void     Userdef_USB_usb0_function_delay_500ns(void);
+void     Userdef_USB_usb0_function_start_dma(USB_FUNCTION_DMA_t *dma, uint16_t dfacc);
+uint32_t Userdef_USB_usb0_function_stop_dma0(void);
+uint32_t Userdef_USB_usb0_function_stop_dma1(void);
+
+void     usb0_function_stop_transfer(uint16_t pipe);
+void     usb0_function_enable_brdy_int(uint16_t pipe);
+void     usb0_function_disable_brdy_int(uint16_t pipe);
+void     usb0_function_enable_bemp_int(uint16_t pipe);
+void     usb0_function_disable_bemp_int(uint16_t pipe);
+void     usb0_function_enable_nrdy_int(uint16_t pipe);
+void     usb0_function_disable_nrdy_int(uint16_t pipe);
+#endif
+
+#ifdef  USB1_FUNCTION_API_H
+void     usb1_function_interrupt(uint32_t int_sense);
+void     usb1_function_dma_interrupt_d0fifo(uint32_t int_sense);
+void     usb1_function_dma_interrupt_d1fifo(uint32_t int_sense);
+
+void     usb1_function_Class0(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Class1(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Class2(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Class3(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Class4(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Class5(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Vendor0(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Vendor1(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Vendor2(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Vendor3(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Vendor4(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Vendor5(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_ResetDescriptor(uint16_t mode);
+
+IRQn_Type Userdef_USB_usb1_function_d0fifo_dmaintid(void);
+IRQn_Type Userdef_USB_usb1_function_d1fifo_dmaintid(void);
+void     Userdef_USB_usb1_function_attach(void);
+void     Userdef_USB_usb1_function_detach(void);
+void     Userdef_USB_usb1_function_delay_1ms(void);
+void     Userdef_USB_usb1_function_delay_xms(uint32_t msec);
+void     Userdef_USB_usb1_function_delay_10us(uint32_t usec);
+void     Userdef_USB_usb1_function_delay_500ns(void);
+void     Userdef_USB_usb1_function_start_dma(USB_FUNCTION_DMA_t *dma, uint16_t dfacc);
+uint32_t Userdef_USB_usb1_function_stop_dma0(void);
+uint32_t Userdef_USB_usb1_function_stop_dma1(void);
+
+void     usb1_function_stop_transfer(uint16_t pipe);
+void     usb1_function_enable_brdy_int(uint16_t pipe);
+void     usb1_function_disable_brdy_int(uint16_t pipe);
+void     usb1_function_enable_bemp_int(uint16_t pipe);
+void     usb1_function_disable_bemp_int(uint16_t pipe);
+void     usb1_function_enable_nrdy_int(uint16_t pipe);
+void     usb1_function_disable_nrdy_int(uint16_t pipe);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* USB_FUNCTION_API_H */
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/inc/usb_function.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/inc/usb_function.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,143 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb_function.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description  : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB_FUNCTION_H
+#define USB_FUNCTION_H
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "r_typedefs.h"
+#include "iodefine.h"
+#include "rza_io_regrw.h"
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+#define USB_FUNCTION_ALT_NO         (255)
+#define USB_FUNCTION_ALT_SET        (0xff)
+
+#define USB_FUNCTION_BITUPLLE       (0x0002u)
+#define USB_FUNCTION_BITUCKSEL      (0x0004u)
+#define USB_FUNCTION_BITBWAIT       (0x003fu)
+
+#define USB_FUNCTION_BUSWAIT_02     (0x0000u)
+#define USB_FUNCTION_BUSWAIT_03     (0x0001u)
+#define USB_FUNCTION_BUSWAIT_04     (0x0002u)
+#define USB_FUNCTION_BUSWAIT_05     (0x0003u)
+#define USB_FUNCTION_BUSWAIT_06     (0x0004u)
+#define USB_FUNCTION_BUSWAIT_07     (0x0005u)
+#define USB_FUNCTION_BUSWAIT_08     (0x0006u)
+#define USB_FUNCTION_BUSWAIT_09     (0x0007u)
+#define USB_FUNCTION_BUSWAIT_10     (0x0008u)
+#define USB_FUNCTION_BUSWAIT_11     (0x0009u)
+#define USB_FUNCTION_BUSWAIT_12     (0x000au)
+#define USB_FUNCTION_BUSWAIT_13     (0x000bu)
+#define USB_FUNCTION_BUSWAIT_14     (0x000cu)
+#define USB_FUNCTION_BUSWAIT_15     (0x000du)
+#define USB_FUNCTION_BUSWAIT_16     (0x000eu)
+#define USB_FUNCTION_BUSWAIT_17     (0x000fu)
+
+#define USB_FUNCTION_BITRESUME      (0x0020u)
+#define USB_FUNCTION_BITUACT        (0x0010u)
+#define USB_FUNCTION_HSPROC         (0x0004u)
+#define USB_FUNCTION_HSMODE         (0x0003u)
+#define USB_FUNCTION_FSMODE         (0x0002u)
+#define USB_FUNCTION_LSMODE         (0x0001u)
+#define USB_FUNCTION_UNDECID        (0x0000u)
+
+#define USB_FUNCTION_BITRCNT        (0x8000u)
+#define USB_FUNCTION_BITDREQE       (0x1000u)
+#define USB_FUNCTION_BITMBW         (0x0c00u)
+#define USB_FUNCTION_BITMBW_8       (0x0000u)
+#define USB_FUNCTION_BITMBW_16      (0x0400u)
+#define USB_FUNCTION_BITMBW_32      (0x0800u)
+#define USB_FUNCTION_BITBYTE_LITTLE (0x0000u)
+#define USB_FUNCTION_BITBYTE_BIG    (0x0100u)
+#define USB_FUNCTION_BITISEL        (0x0020u)
+#define USB_FUNCTION_BITCURPIPE     (0x000fu)
+
+#define USB_FUNCTION_CFIFO_READ     (0x0000u)
+#define USB_FUNCTION_CFIFO_WRITE    (0x0020u)
+
+#define USB_FUNCTION_BITBVAL        (0x8000u)
+#define USB_FUNCTION_BITBCLR        (0x4000u)
+#define USB_FUNCTION_BITFRDY        (0x2000u)
+#define USB_FUNCTION_BITDTLN        (0x0fffu)
+
+#define USB_FUNCTION_BITVBSE        (0x8000u)
+#define USB_FUNCTION_BITRSME        (0x4000u)
+#define USB_FUNCTION_BITSOFE        (0x2000u)
+#define USB_FUNCTION_BITDVSE        (0x1000u)
+#define USB_FUNCTION_BITCTRE        (0x0800u)
+#define USB_FUNCTION_BITVBINT       (0x8000u)
+#define USB_FUNCTION_BITRESM        (0x4000u)
+#define USB_FUNCTION_BITSOFR        (0x2000u)
+#define USB_FUNCTION_BITDVST        (0x1000u)
+#define USB_FUNCTION_BITCTRT        (0x0800u)
+
+#define USB_FUNCTION_BITBEMPE       (0x0400u)
+#define USB_FUNCTION_BITNRDYE       (0x0200u)
+#define USB_FUNCTION_BITBRDYE       (0x0100u)
+#define USB_FUNCTION_BITBEMP        (0x0400u)
+#define USB_FUNCTION_BITNRDY        (0x0200u)
+#define USB_FUNCTION_BITBRDY        (0x0100u)
+
+#define USB_FUNCTION_BITDVSQ        (0x0070u)
+#define USB_FUNCTION_BITDVSQS       (0x0030u)
+#define USB_FUNCTION_DS_SPD_CNFG    (0x0070u)
+#define USB_FUNCTION_DS_SPD_ADDR    (0x0060u)
+#define USB_FUNCTION_DS_SPD_DFLT    (0x0050u)
+#define USB_FUNCTION_DS_SPD_POWR    (0x0040u)
+#define USB_FUNCTION_DS_CNFG        (0x0030u)
+#define USB_FUNCTION_DS_ADDS        (0x0020u)
+#define USB_FUNCTION_DS_DFLT        (0x0010u)
+#define USB_FUNCTION_DS_POWR        (0x0000u)
+#define USB_FUNCTION_BITVALID       (0x0008u)
+#define USB_FUNCTION_BITCTSQ        (0x0007u)
+#define USB_FUNCTION_CS_SQER        (0x0006u)
+#define USB_FUNCTION_CS_WRND        (0x0005u)
+#define USB_FUNCTION_CS_WRSS        (0x0004u)
+#define USB_FUNCTION_CS_WRDS        (0x0003u)
+#define USB_FUNCTION_CS_RDSS        (0x0002u)
+#define USB_FUNCTION_CS_RDDS        (0x0001u)
+#define USB_FUNCTION_CS_IDST        (0x0000u)
+
+#define USB_FUNCTION_PIPExBUF       (64u)
+
+#define USB_FUNCTION_D0FIFO         (0)
+#define USB_FUNCTION_D1FIFO         (1)
+#define USB_FUNCTION_DMA_READY      (0)
+#define USB_FUNCTION_DMA_BUSY       (1)
+#define USB_FUNCTION_DMA_BUSYEND    (2)
+
+#define USB_FUNCTION_FIFO_USE       (0x7000)
+
+#endif /* USB_FUNCTION_FUNCTION_H */
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/inc/usb_function_version.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/inc/usb_function_version.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,32 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb_function_version.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description  : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+
+#define USB_FUNCTION_LOCAL_Rev  "VER080_140709"
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,171 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description  : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB0_FUNCTION_H
+#define USB0_FUNCTION_H
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "devdrv_usb_function_api.h"
+#include "usb_function.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+extern const uint16_t       g_usb0_function_bit_set[];
+extern uint32_t             g_usb0_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint8_t              *g_usb0_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+extern uint16_t             g_usb0_function_PipeIgnore[];
+extern uint16_t             g_usb0_function_PipeTbl[];
+extern uint16_t             g_usb0_function_pipe_status[];
+extern uint32_t             g_usb0_function_PipeDataSize[];
+
+extern USB_FUNCTION_DMA_t   g_usb0_function_DmaInfo[];
+extern uint16_t             g_usb0_function_DmaPipe[];
+extern uint16_t             g_usb0_function_DmaBval[];
+extern uint16_t             g_usb0_function_DmaStatus[];
+
+extern uint16_t             g_usb0_function_CtrZeroLengthFlag;
+
+extern uint16_t             g_usb0_function_ConfigNum;
+extern uint16_t             g_usb0_function_Alternate[USB_FUNCTION_ALT_NO];
+extern uint16_t             g_usb0_function_RemoteWakeupFlag;
+extern uint16_t             g_usb0_function_TestModeFlag;
+extern uint16_t             g_usb0_function_TestModeSelectors;
+
+extern uint16_t             g_usb0_function_ReqType;
+extern uint16_t             g_usb0_function_ReqTypeType;
+extern uint16_t             g_usb0_function_ReqTypeRecip;
+extern uint16_t             g_usb0_function_ReqRequest;
+extern uint16_t             g_usb0_function_ReqValue;
+extern uint16_t             g_usb0_function_ReqIndex;
+extern uint16_t             g_usb0_function_ReqLength;
+
+extern uint16_t             g_usb0_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
+
+extern uint16_t             g_usb0_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint16_t             g_usb0_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint16_t             g_usb0_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint16_t             g_usb0_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+/* ==== common ==== */
+void     usb0_function_dma_stop_d0(uint16_t pipe, uint32_t remain);
+void     usb0_function_dma_stop_d1(uint16_t pipe, uint32_t remain);
+uint16_t usb0_function_is_hispeed(void);
+uint16_t usb0_function_is_hispeed_enable(void);
+uint16_t usb0_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+uint16_t usb0_function_write_buffer(uint16_t pipe);
+uint16_t usb0_function_write_buffer_c(uint16_t pipe);
+uint16_t usb0_function_write_buffer_d0(uint16_t pipe);
+uint16_t usb0_function_write_buffer_d1(uint16_t pipe);
+void     usb0_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+uint16_t usb0_function_read_buffer(uint16_t pipe);
+uint16_t usb0_function_read_buffer_c(uint16_t pipe);
+uint16_t usb0_function_read_buffer_d0(uint16_t pipe);
+uint16_t usb0_function_read_buffer_d1(uint16_t pipe);
+uint16_t usb0_function_change_fifo_port(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
+void     usb0_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
+void     usb0_function_set_curpipe2(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc);
+uint16_t usb0_function_get_mbw(uint32_t trncount, uint32_t dtptr);
+uint16_t usb0_function_read_dma(uint16_t pipe);
+void     usb0_function_brdy_int(uint16_t status, uint16_t int_enb);
+void     usb0_function_nrdy_int(uint16_t status, uint16_t int_enb);
+void     usb0_function_bemp_int(uint16_t status, uint16_t int_enb);
+void     usb0_function_setting_interrupt(uint8_t level);
+void     usb0_function_reset_module(uint16_t clockmode);
+uint16_t usb0_function_get_buf_size(uint16_t pipe);
+uint16_t usb0_function_get_mxps(uint16_t pipe);
+void     usb0_function_clear_brdy_sts(uint16_t pipe);
+void     usb0_function_clear_bemp_sts(uint16_t pipe);
+void     usb0_function_clear_nrdy_sts(uint16_t pipe);
+void     usb0_function_set_pid_buf(uint16_t pipe);
+void     usb0_function_set_pid_nak(uint16_t pipe);
+void     usb0_function_set_pid_stall(uint16_t pipe);
+void     usb0_function_clear_pid_stall(uint16_t pipe);
+uint16_t usb0_function_get_pid(uint16_t pipe);
+void     usb0_function_set_sqclr(uint16_t pipe);
+void     usb0_function_set_sqset(uint16_t pipe);
+void     usb0_function_set_csclr(uint16_t pipe);
+void     usb0_function_aclrm(uint16_t pipe);
+void     usb0_function_set_aclrm(uint16_t pipe);
+void     usb0_function_clr_aclrm(uint16_t pipe);
+uint16_t usb0_function_get_sqmon(uint16_t pipe);
+uint16_t usb0_function_get_inbuf(uint16_t pipe);
+
+/* ==== function ==== */
+void     usb0_function_init_status(void);
+void     usb0_function_InitModule(uint16_t mode);
+uint16_t usb0_function_CheckVBUStaus(void);
+void     usb0_function_USB_FUNCTION_Attach(void);
+void     usb0_function_USB_FUNCTION_Detach(void);
+void     usb0_function_USB_FUNCTION_BusReset(void);
+void     usb0_function_USB_FUNCTION_Resume(void);
+void     usb0_function_USB_FUNCTION_Suspend(void);
+void     usb0_function_USB_FUNCTION_TestMode(void);
+void     usb0_function_ResetDCP(void);
+void     usb0_function_ResetEP(uint16_t num);
+uint16_t usb0_function_EpToPipe(uint16_t ep);
+void     usb0_function_InitEPTable(uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num);
+uint16_t usb0_function_GetConfigNum(void);
+uint16_t usb0_function_GetAltNum(uint16_t Con_Num, uint16_t Int_Num);
+uint16_t usb0_function_CheckRemoteWakeup(void);
+void     usb0_function_clear_alt(void);
+void     usb0_function_clear_pipe_tbl(void);
+void     usb0_function_clear_ep_table_index(void);
+uint16_t usb0_function_GetInterfaceNum(uint16_t num);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* USB0_FUNCTION_H */
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function_api.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function_api.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,104 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_api.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description  : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB0_FUNCTION_API_H
+#define USB0_FUNCTION_API_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Variable Externs
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+void     usb0_api_function_init(uint8_t int_level, uint16_t mode, uint16_t clockmode);
+uint16_t usb0_api_function_IsConfigured(void);
+uint16_t usb0_function_GetDeviceState(void);
+uint16_t usb0_api_function_CtrlReadStart(uint32_t size, uint8_t *data);
+void     usb0_api_function_CtrlWriteStart(uint32_t size, uint8_t *data);
+uint16_t usb0_api_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+uint16_t usb0_api_function_check_pipe_status(uint16_t pipe, uint32_t *size);
+void     usb0_api_function_clear_pipe_status(uint16_t pipe);
+void     usb0_api_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+void     usb0_api_function_set_pid_buf(uint16_t pipe);
+void     usb0_api_function_set_pid_nak(uint16_t pipe);
+void     usb0_api_function_set_pid_stall(uint16_t pipe);
+void     usb0_api_function_clear_pid_stall(uint16_t pipe);
+uint16_t usb0_api_function_get_pid(uint16_t pipe);
+int32_t  usb0_api_function_check_stall(uint16_t pipe);
+void     usb0_api_function_set_sqclr(uint16_t pipe);
+void     usb0_api_function_set_sqset(uint16_t pipe);
+void     usb0_api_function_set_csclr(uint16_t pipe);
+void     usb0_api_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
+void     usb0_api_function_clear_brdy_sts(uint16_t pipe);
+void     usb0_api_function_clear_bemp_sts(uint16_t pipe);
+void     usb0_api_function_clear_nrdy_sts(uint16_t pipe);
+
+void     usb0_function_ClearFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_SetFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_SetAddress(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_SetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_SetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_SetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_SynchFrame(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_GetStatus(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_GetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_GetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_GetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Resrv_0(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Resrv_123(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Resrv_4(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Resrv_5(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* USB0_FUNCTION_API_H */
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function_dmacdrv.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function_dmacdrv.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,142 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_dmacdrv.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description  : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB0_FUNCTION_DMACDRV_H
+#define USB0_FUNCTION_DMACDRV_H
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+typedef struct dmac_transinfo
+{
+    uint32_t src_addr;      /* Transfer source address                */
+    uint32_t dst_addr;      /* Transfer destination address           */
+    uint32_t count;         /* Transfer byte count                    */
+    uint32_t src_size;      /* Transfer source data size              */
+    uint32_t dst_size;      /* Transfer destination data size         */
+    uint32_t saddr_dir;     /* Transfer source address direction      */
+    uint32_t daddr_dir;     /* Transfer destination address direction */
+} dmac_transinfo_t;
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+/* ==== Transfer specification of the sample program ==== */
+#define DMAC_SAMPLE_SINGLE          (0)     /* Single transfer                   */
+#define DMAC_SAMPLE_CONTINUATION    (1)     /* Continuous transfer (use REN bit) */
+
+/* ==== DMA modes ==== */
+#define DMAC_MODE_REGISTER          (0)     /* Register mode */
+#define DMAC_MODE_LINK              (1)     /* Link mode     */
+
+/* ==== Transfer requests ==== */
+#define DMAC_REQ_MODE_EXT           (0)     /* External request                   */
+#define DMAC_REQ_MODE_PERI          (1)     /* On-chip peripheral module request  */
+#define DMAC_REQ_MODE_SOFT          (2)     /* Auto-request (request by software) */
+
+/* ==== DMAC transfer sizes ==== */
+#define DMAC_TRANS_SIZE_8           (0)     /* 8 bits    */
+#define DMAC_TRANS_SIZE_16          (1)     /* 16 bits   */
+#define DMAC_TRANS_SIZE_32          (2)     /* 32 bits   */
+#define DMAC_TRANS_SIZE_64          (3)     /* 64 bits   */
+#define DMAC_TRANS_SIZE_128         (4)     /* 128 bits  */
+#define DMAC_TRANS_SIZE_256         (5)     /* 256 bits  */
+#define DMAC_TRANS_SIZE_512         (6)     /* 512 bits  */
+#define DMAC_TRANS_SIZE_1024        (7)     /* 1024 bits */
+
+/* ==== Address increment for transferring ==== */
+#define DMAC_TRANS_ADR_NO_INC       (1)     /* Not increment */
+#define DMAC_TRANS_ADR_INC          (0)     /* Increment     */
+
+/* ==== Method for detecting DMA request ==== */
+#define DMAC_REQ_DET_FALL           (0)     /* Falling edge detection */
+#define DMAC_REQ_DET_RISE           (1)     /* Rising edge detection  */
+#define DMAC_REQ_DET_LOW            (2)     /* Low level detection    */
+#define DMAC_REQ_DET_HIGH           (3)     /* High level detection   */
+
+/* ==== Request Direction ==== */
+#define DMAC_REQ_DIR_SRC            (0)     /* DMAREQ is the source/ DMAACK is active when reading      */
+#define DMAC_REQ_DIR_DST            (1)     /* DMAREQ is the destination/ DMAACK is active when writing */
+
+/* ==== Descriptors ==== */
+#define DMAC_DESC_HEADER            (0)     /* Header              */
+#define DMAC_DESC_SRC_ADDR          (1)     /* Source Address      */
+#define DMAC_DESC_DST_ADDR          (2)     /* Destination Address */
+#define DMAC_DESC_COUNT             (3)     /* Transaction Byte    */
+#define DMAC_DESC_CHCFG             (4)     /* Channel Confg       */
+#define DMAC_DESC_CHITVL            (5)     /* Channel Interval    */
+#define DMAC_DESC_CHEXT             (6)     /* Channel Extension   */
+#define DMAC_DESC_LINK_ADDR         (7)     /* Link Address        */
+
+/* ==== On-chip peripheral module requests ===== */
+typedef enum dmac_request_factor
+{
+    DMAC_REQ_USB0_DMA0_TX,      /* USB_0 channel 0 transmit FIFO empty            */
+    DMAC_REQ_USB0_DMA0_RX,      /* USB_0 channel 0 receive FIFO full              */
+    DMAC_REQ_USB0_DMA1_TX,      /* USB_0 channel 1 transmit FIFO empty            */
+    DMAC_REQ_USB0_DMA1_RX,      /* USB_0 channel 1 receive FIFO full              */
+    DMAC_REQ_USB1_DMA0_TX,      /* USB_1 channel 0 transmit FIFO empty            */
+    DMAC_REQ_USB1_DMA0_RX,      /* USB_1 channel 0 receive FIFO full              */
+    DMAC_REQ_USB1_DMA1_TX,      /* USB_1 channel 1 transmit FIFO empty            */
+    DMAC_REQ_USB1_DMA1_RX,      /* USB_1 channel 1 receive FIFO full              */
+} dmac_request_factor_t;
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+void usb0_function_DMAC1_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
+                                        uint32_t request_factor, uint32_t req_direction);
+int32_t usb0_function_DMAC1_Open(uint32_t req);
+void usb0_function_DMAC1_Close(uint32_t *remain);
+void usb0_function_DMAC1_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
+
+void usb0_function_DMAC2_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
+                                        uint32_t request_factor, uint32_t req_direction);
+int32_t usb0_function_DMAC2_Open(uint32_t req);
+void usb0_function_DMAC2_Close(uint32_t *remain);
+void usb0_function_DMAC2_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* USB0_FUNCTION_DMACDRV_H */
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_dataio.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_dataio.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,2933 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_dataio.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb0_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+static uint16_t g_usb0_function_mbw[(USB_FUNCTION_MAX_PIPE_NO + 1)];
+
+static void     usb0_function_start_receive_trns_c(uint16_t pipe, uint32_t size, uint8_t *data);
+static void     usb0_function_start_receive_trns_d0(uint16_t pipe, uint32_t size, uint8_t *data);
+static void     usb0_function_start_receive_trns_d1(uint16_t pipe, uint32_t size, uint8_t *data);
+static void     usb0_function_start_receive_dma_d0(uint16_t pipe, uint32_t size, uint8_t *data);
+static void     usb0_function_start_receive_dma_d1(uint16_t pipe, uint32_t size, uint8_t *data);
+static uint16_t usb0_function_read_dma_d0(uint16_t pipe);
+static uint16_t usb0_function_read_dma_d1(uint16_t pipe);
+static uint16_t usb0_function_write_dma_d0(uint16_t pipe);
+static uint16_t usb0_function_write_dma_d1(uint16_t pipe);
+
+static void     usb0_function_read_c_fifo(uint16_t pipe, uint16_t count);
+static void     usb0_function_write_c_fifo(uint16_t Pipe, uint16_t count);
+static void     usb0_function_read_d0_fifo(uint16_t pipe, uint16_t count);
+static void     usb0_function_write_d0_fifo(uint16_t pipe, uint16_t count);
+static void     usb0_function_read_d1_fifo(uint16_t pipe, uint16_t count);
+static void     usb0_function_write_d1_fifo(uint16_t pipe, uint16_t count);
+
+static void     usb0_function_clear_transaction_counter(uint16_t pipe);
+static void     usb0_function_set_transaction_counter(uint16_t pipe, uint32_t count);
+
+static uint32_t usb0_function_com_get_dmasize(uint32_t trncount, uint32_t dtptr);
+
+static uint16_t usb0_function_set_dfacc_d0(uint16_t mbw, uint32_t count);
+static uint16_t usb0_function_set_dfacc_d1(uint16_t mbw, uint32_t count);
+
+
+/*******************************************************************************
+* Function Name: usb0_function_start_send_transfer
+* Description  : Starts the USB data communication using pipe specified by the argument.
+* Arguments    : uint16_t  pipe    ; Pipe Number
+*              : uint32_t size     ; Data Size
+*              : uint8_t  *data    ; Data Address
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t status;
+    uint16_t usefifo;
+    uint16_t mbw;
+
+    g_usb0_function_data_count[pipe]   = size;
+    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    usb0_function_clear_bemp_sts(pipe);
+    usb0_function_clear_brdy_sts(pipe);
+    usb0_function_clear_nrdy_sts(pipe);
+
+    mbw = usb0_function_get_mbw(size, (uint32_t)data);
+
+    usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+    switch (usefifo)
+    {
+        case USB_FUNCTION_D0FIFO_USE:
+        case USB_FUNCTION_D0FIFO_DMA:
+            usefifo = USB_FUNCTION_D0USE;
+        break;
+
+        case USB_FUNCTION_D1FIFO_USE:
+        case USB_FUNCTION_D1FIFO_DMA:
+            usefifo = USB_FUNCTION_D1USE;
+        break;
+
+        default:
+            usefifo = USB_FUNCTION_CUSE;
+        break;
+    };
+
+    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, usefifo, DEVDRV_USBF_NO, mbw);
+
+    usb0_function_clear_transaction_counter(pipe);
+
+    usb0_function_aclrm(pipe);
+
+    status = usb0_function_write_buffer(pipe);
+
+    if (status != DEVDRV_USBF_FIFOERROR)
+    {
+        usb0_function_set_pid_buf(pipe);
+    }
+
+    return status;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_buffer
+* Description  : Writes data in the buffer allocated in the pipe specified by
+*              : the argument. The FIFO for using is set in the pipe definition table.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_write_buffer (uint16_t pipe)
+{
+    uint16_t status;
+    uint16_t usefifo;
+
+    g_usb0_function_PipeIgnore[pipe] = 0;
+    usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+    switch (usefifo)
+    {
+        case USB_FUNCTION_D0FIFO_USE:
+            status = usb0_function_write_buffer_d0(pipe);
+        break;
+
+        case USB_FUNCTION_D1FIFO_USE:
+            status = usb0_function_write_buffer_d1(pipe);
+        break;
+
+        case USB_FUNCTION_D0FIFO_DMA:
+            status = usb0_function_write_dma_d0(pipe);
+        break;
+
+        case USB_FUNCTION_D1FIFO_DMA:
+            status = usb0_function_write_dma_d1(pipe);
+        break;
+
+        default:
+            status = usb0_function_write_buffer_c(pipe);
+        break;
+    };
+
+    switch (status)
+    {
+        case DEVDRV_USBF_WRITING:                       /* Continue of data write */
+            usb0_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
+            usb0_function_enable_brdy_int(pipe);        /* Enable Ready Interrupt */
+        break;
+
+        case DEVDRV_USBF_WRITEEND:                      /* End of data write */
+        case DEVDRV_USBF_WRITESHRT:                     /* End of data write */
+            usb0_function_disable_brdy_int(pipe);       /* Disable Ready Interrupt */
+            usb0_function_clear_nrdy_sts(pipe);
+            usb0_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
+            /* for last transfer */
+            usb0_function_enable_bemp_int(pipe);        /* Enable Empty Interrupt */
+        break;
+
+        case DEVDRV_USBF_WRITEDMA:                      /* DMA write */
+            usb0_function_clear_nrdy_sts(pipe);
+            usb0_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
+        break;
+
+        case DEVDRV_USBF_FIFOERROR:                     /* FIFO access status */
+        default:
+            usb0_function_disable_brdy_int(pipe);       /* Disable Ready Interrupt */
+            usb0_function_disable_bemp_int(pipe);       /* Disable Empty Interrupt */
+            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+        break;
+    }
+
+    return status;                      /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_buffer_c
+* Description  : Writes data in the buffer allocated in the pipe specified in
+*              : the argument. Writes data by CPU transfer using CFIFO.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_write_buffer_c (uint16_t pipe)
+{
+    uint32_t count;
+    uint16_t size;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+
+    if (g_usb0_function_CtrZeroLengthFlag == 1)
+    {
+        g_usb0_function_CtrZeroLengthFlag = 0;                  /* Zero Length Packet Flag CLR */
+        return DEVDRV_USBF_WRITEEND;
+    }
+
+    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+    if (pipe == USB_FUNCTION_PIPE0)
+    {
+        buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
+    }
+    else
+    {
+        buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
+    }
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    size = usb0_function_get_buf_size(pipe);                    /* Data buffer size */
+    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb0_function_data_count[pipe] <= (uint32_t)size)
+    {
+        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
+        count  = g_usb0_function_data_count[pipe];
+
+        if (count == 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
+        }
+    }
+    else
+    {
+        status = DEVDRV_USBF_WRITING;                           /* write continues */
+        count  = (uint32_t)size;
+    }
+
+    usb0_function_write_c_fifo(pipe, (uint16_t)count);
+
+    if (g_usb0_function_data_count[pipe] < (uint32_t)size)
+    {
+        g_usb0_function_data_count[pipe] = 0;
+
+        if (RZA_IO_RegRead_16(&USB200.CFIFOCTR, USB_CFIFOCTR_BVAL_SHIFT, USB_CFIFOCTR_BVAL) == 0)
+        {
+            USB200.CFIFOCTR = USB_FUNCTION_BITBVAL;             /* Short Packet */
+            g_usb0_function_CtrZeroLengthFlag = 1;              /* Zero Length Packet Flag */
+        }
+    }
+    else
+    {
+        g_usb0_function_data_count[pipe] -= count;
+    }
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_buffer_d0
+* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
+*              : Writes data by CPU transfer using D0FIFO.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_write_buffer_d0 (uint16_t pipe)
+{
+    uint32_t count;
+    uint16_t size;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+
+    mbw    = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    size = usb0_function_get_buf_size(pipe);                    /* Data buffer size */
+    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb0_function_data_count[pipe] <= (uint32_t)size)
+    {
+        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
+        count  = g_usb0_function_data_count[pipe];
+
+        if (count == 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
+        }
+    }
+    else
+    {
+        status = DEVDRV_USBF_WRITING;                           /* write continues */
+        count  = (uint32_t)size;
+    }
+
+    usb0_function_write_d0_fifo(pipe, (uint16_t)count);
+
+    if (g_usb0_function_data_count[pipe] < (uint32_t)size)
+    {
+        g_usb0_function_data_count[pipe] = 0;
+        if (RZA_IO_RegRead_16(&USB200.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+        {
+            USB200.D0FIFOCTR = USB_FUNCTION_BITBVAL;            /* Short Packet */
+        }
+    }
+    else
+    {
+        g_usb0_function_data_count[pipe] -= count;
+    }
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_buffer_d1
+* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
+*              : Writes data by CPU transfer using D1FIFO.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_write_buffer_d1 (uint16_t pipe)
+{
+    uint32_t count;
+    uint16_t size;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+
+    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    size = usb0_function_get_buf_size(pipe);                    /* Data buffer size */
+    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb0_function_data_count[pipe] <= (uint32_t)size)
+    {
+        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
+        count  = g_usb0_function_data_count[pipe];
+
+        if (count == 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
+        }
+    }
+    else
+    {
+        status = DEVDRV_USBF_WRITING;                           /* write continues */
+        count  = (uint32_t)size;
+    }
+
+    usb0_function_write_d1_fifo(pipe, (uint16_t)count);
+
+    if (g_usb0_function_data_count[pipe] < (uint32_t)size)
+    {
+        g_usb0_function_data_count[pipe] = 0;
+
+        if (RZA_IO_RegRead_16(&USB200.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+        {
+            USB200.D1FIFOCTR = USB_FUNCTION_BITBVAL;            /* Short Packet */
+        }
+    }
+    else
+    {
+        g_usb0_function_data_count[pipe] -= count;
+    }
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_dma_d0
+* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
+*              : Writes data by DMA transfer using D0FIFO.
+*              : The DMA-ch for using is specified by Userdef_USB_usb0_function_start_dma().
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           : Write end
+*              : DEVDRV_USBF_WRITESHRT          : short data
+*              : DEVDRV_USBF_WRITING            : Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           : Write DMA
+*              : DEVDRV_USBF_FIFOERROR          : FIFO status
+*******************************************************************************/
+static uint16_t usb0_function_write_dma_d0 (uint16_t pipe)
+{
+    uint32_t count;
+    uint16_t size;
+    uint16_t buffer;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t dfacc = 0;
+
+    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                            /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    size  = usb0_function_get_buf_size(pipe);                       /* Data buffer size */
+    count = g_usb0_function_data_count[pipe];
+
+    if (count != 0)
+    {
+        g_usb0_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe;
+
+        if ((count % size) != 0)
+        {
+            g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] = 1;
+        }
+        else
+        {
+            g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] = 0;
+        }
+
+        dfacc = usb0_function_set_dfacc_d0(mbw, count);
+
+        if (mbw == USB_FUNCTION_BITMBW_32)
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2;  /* 32bit transfer */
+        }
+        else if (mbw == USB_FUNCTION_BITMBW_16)
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1;  /* 16bit transfer */
+        }
+        else
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0;  /* 8bit transfer */
+        }
+
+        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo   = USB_FUNCTION_D0FIFO_DMA;
+        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].dir    = USB_FUNCTION_BUF2FIFO;
+        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
+        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes  = count;
+
+        Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
+
+        usb0_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+        RZA_IO_RegWrite_16(&USB200.D0FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+
+        g_usb0_function_data_count[pipe]    = 0;
+        g_usb0_function_data_pointer[pipe] += count;
+        status = DEVDRV_USBF_WRITEDMA;                              /* DMA write  */
+    }
+    else
+    {
+        if (RZA_IO_RegRead_16(&USB200.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+        {
+            RZA_IO_RegWrite_16(&USB200.D0FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
+        }
+        status = DEVDRV_USBF_WRITESHRT;                             /* Short Packet is end of write */
+    }
+
+    return status;                                                  /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_dma_d1
+* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
+*              : Writes data by DMA transfer using D1FIFO.
+*              : The DMA-ch for using is specified by Userdef_USB_usb0_function_start_dma().
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           : Write end
+*              : DEVDRV_USBF_WRITESHRT          : short data
+*              : DEVDRV_USBF_WRITING            : Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           : Write DMA
+*              : DEVDRV_USBF_FIFOERROR          : FIFO status
+*******************************************************************************/
+static uint16_t usb0_function_write_dma_d1 (uint16_t pipe)
+{
+    uint32_t count;
+    uint16_t size;
+    uint16_t buffer;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t dfacc=0;
+
+    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                            /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    size  = usb0_function_get_buf_size(pipe);                       /* Data buffer size */
+    count = g_usb0_function_data_count[pipe];
+
+    if (count != 0)
+    {
+        g_usb0_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe;
+        if ((count % size) != 0)
+        {
+            g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] = 1;
+        }
+        else
+        {
+            g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] = 0;
+        }
+
+        dfacc = usb0_function_set_dfacc_d1(mbw, count);
+
+        if (mbw == USB_FUNCTION_BITMBW_32)
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2;  /* 32bit transfer */
+        }
+        else if (mbw == USB_FUNCTION_BITMBW_16)
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1;  /* 16bit transfer */
+        }
+        else
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0;  /* 8bit transfer */
+        }
+
+        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo   = USB_FUNCTION_D1FIFO_DMA;
+        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].dir    = USB_FUNCTION_BUF2FIFO;
+        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
+        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes  = count;
+
+        Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
+
+        usb0_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+        RZA_IO_RegWrite_16(&USB200.D1FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+
+        g_usb0_function_data_count[pipe]    = 0;
+        g_usb0_function_data_pointer[pipe] += count;
+
+        status = DEVDRV_USBF_WRITEDMA;                             /* DMA write  */
+    }
+    else
+    {
+        if (RZA_IO_RegRead_16(&USB200.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+        {
+            RZA_IO_RegWrite_16(&USB200.D1FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
+        }
+        status = DEVDRV_USBF_WRITESHRT;                             /* Short Packet is end of write */
+    }
+
+    return status;                                                  /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_start_receive_transfer
+* Description  : Starts USB data reception using the pipe specified in the argument.
+*              : The FIFO for using is set in the pipe definition table.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+void usb0_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t usefifo;
+
+    usb0_function_clear_bemp_sts(pipe);
+    usb0_function_clear_brdy_sts(pipe);
+    usb0_function_clear_nrdy_sts(pipe);
+
+    usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+    switch (usefifo)
+    {
+        case USB_FUNCTION_D0FIFO_USE:
+            usb0_function_start_receive_trns_d0(pipe, size, data);
+        break;
+
+        case USB_FUNCTION_D1FIFO_USE:
+            usb0_function_start_receive_trns_d1(pipe, size, data);
+        break;
+
+        case USB_FUNCTION_D0FIFO_DMA:
+            usb0_function_start_receive_dma_d0(pipe, size, data);
+        break;
+
+        case USB_FUNCTION_D1FIFO_DMA:
+            usb0_function_start_receive_dma_d1(pipe, size, data);
+        break;
+
+        default:
+            usb0_function_start_receive_trns_c(pipe, size, data);
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_start_receive_trns_c
+* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by CPU transfer using CFIFO.
+*              : When storing data in the buffer allocated in the pipe specified in the
+*              : argument, BRDY interrupt is generated to read data
+*              : in the interrupt.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_start_receive_trns_c (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb0_function_set_pid_nak(pipe);
+    g_usb0_function_data_count[pipe]   = size;
+    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb0_function_PipeIgnore[pipe]   = 0;
+
+    g_usb0_function_PipeDataSize[pipe] = size;
+    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    mbw = usb0_function_get_mbw(size, (uint32_t)data);
+    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_READ, mbw);
+    USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;
+
+    usb0_function_set_transaction_counter(pipe, size);
+
+    usb0_function_aclrm(pipe);
+
+    usb0_function_enable_nrdy_int(pipe);
+    usb0_function_enable_brdy_int(pipe);
+
+    usb0_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_start_receive_trns_d0
+* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by CPU transfer using D0FIFO.
+*              : This function does not read data from the buffer.
+*              : When storing data in the buffer allocated in the pipe specified
+*              : in the argument, BRDY interrupt is generated to read data in the
+*              : interrupt.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_start_receive_trns_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb0_function_set_pid_nak(pipe);
+    g_usb0_function_data_count[pipe]   = size;
+    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb0_function_PipeIgnore[pipe]   = 0;
+
+    g_usb0_function_PipeDataSize[pipe] = size;
+    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    mbw = usb0_function_get_mbw(size, (uint32_t)data);
+    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+
+    usb0_function_set_transaction_counter(pipe, size);
+
+    usb0_function_aclrm(pipe);
+
+    usb0_function_enable_nrdy_int(pipe);
+    usb0_function_enable_brdy_int(pipe);
+
+    usb0_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_start_receive_trns_d1
+* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by CPU transfer using D1FIFO.
+*              : This function does not read data from the buffer.
+*              : When storing data in the buffer allocated in the pipe specified
+*              : in the argument, BRDY interrupt is generated to read data.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_start_receive_trns_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb0_function_set_pid_nak(pipe);
+    g_usb0_function_data_count[pipe]   = size;
+    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb0_function_PipeIgnore[pipe]   = 0;
+
+    g_usb0_function_PipeDataSize[pipe] = size;
+    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    mbw = usb0_function_get_mbw(size, (uint32_t)data);
+    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+    usb0_function_set_transaction_counter(pipe, size);
+
+    usb0_function_aclrm(pipe);
+
+    usb0_function_enable_nrdy_int(pipe);
+    usb0_function_enable_brdy_int(pipe);
+
+    usb0_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_start_receive_dma_d0
+* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by DMA transfer using D0FIFO.
+*              : This function does not read data from the buffer.
+*              : When storing data in the buffer allocated in the pipe specified
+*              : in the argument, delivered read request to DMAC to read data from
+*              : the buffer by DMAC.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_start_receive_dma_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb0_function_set_pid_nak(pipe);
+    g_usb0_function_data_count[pipe]   = size;
+    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb0_function_PipeIgnore[pipe]   = 0;
+
+    g_usb0_function_PipeDataSize[pipe] = 0;
+    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    mbw = usb0_function_get_mbw(size, (uint32_t)data);
+    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+
+    usb0_function_set_transaction_counter(pipe, size);
+
+    usb0_function_aclrm(pipe);
+
+    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        usb0_function_read_dma(pipe);
+
+        usb0_function_enable_nrdy_int(pipe);
+        usb0_function_enable_brdy_int(pipe);
+    }
+    else
+    {
+        usb0_function_enable_nrdy_int(pipe);
+        usb0_function_enable_brdy_int(pipe);
+    }
+
+    usb0_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_start_receive_dma_d1
+* Description  : Read data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by DMA transfer using D0FIFO.
+*              : This function does not read data from the buffer.
+*              : When storing data in the buffer allocated in the pipe specified
+*              : in the argument, delivered read request to DMAC to read data from
+*              : the buffer by DMAC.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_start_receive_dma_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb0_function_set_pid_nak(pipe);
+    g_usb0_function_data_count[pipe]   = size;
+    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb0_function_PipeIgnore[pipe]   = 0;
+
+    g_usb0_function_PipeDataSize[pipe] = 0;
+    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    mbw = usb0_function_get_mbw(size, (uint32_t)data);
+    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+    usb0_function_set_transaction_counter(pipe, size);
+
+    usb0_function_aclrm(pipe);
+
+    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        usb0_function_read_dma(pipe);
+
+        usb0_function_enable_nrdy_int(pipe);
+        usb0_function_enable_brdy_int(pipe);
+    }
+    else
+    {
+        usb0_function_enable_nrdy_int(pipe);
+        usb0_function_enable_brdy_int(pipe);
+    }
+
+    usb0_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_buffer
+* Description  : Reads data from the buffer allocated in the pipe specified
+*              : in the argument.
+*              : Uses FIF0 set in the pipe definition table.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_read_buffer (uint16_t pipe)
+{
+    uint16_t status;
+
+    g_usb0_function_PipeIgnore[pipe] = 0;
+
+    if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
+    {
+        status = usb0_function_read_buffer_d0(pipe);
+    }
+    else if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
+    {
+        status = usb0_function_read_buffer_d1(pipe);
+    }
+    else
+    {
+        status = usb0_function_read_buffer_c(pipe);
+    }
+
+    switch (status)
+    {
+        case USB_FUNCTION_READING:                                      /* Continue of data read */
+        break;
+
+        case USB_FUNCTION_READEND:                                      /* End of data read */
+        case USB_FUNCTION_READSHRT:                                     /* End of data read */
+            usb0_function_disable_brdy_int(pipe);
+            g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
+            g_usb0_function_pipe_status[pipe]   = DEVDRV_USBF_PIPE_DONE;
+        break;
+
+        case USB_FUNCTION_READOVER:                                     /* buffer over */
+            if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
+            {
+                USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+            }
+            else if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
+            {
+                USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+            }
+            else
+            {
+                USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;                 /* Clear BCLR */
+            }
+            usb0_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
+            g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
+            g_usb0_function_pipe_status[pipe]   = DEVDRV_USBF_FIFOERROR;
+        break;
+
+        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access status */
+        default:
+            usb0_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
+            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+        break;
+    }
+
+    return status;                                                      /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_buffer_c
+* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by CPU transfer using CFIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_read_buffer_c (uint16_t pipe)
+{
+    uint32_t count;
+    uint32_t dtln;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+
+    mbw    = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb0_function_data_count[pipe] < dtln)                /* Buffer Over ? */
+    {
+        status = USB_FUNCTION_READOVER;
+        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = g_usb0_function_data_count[pipe];
+    }
+    else if (g_usb0_function_data_count[pipe] == dtln)          /* just Receive Size */
+    {
+        status = USB_FUNCTION_READEND;
+        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = dtln;
+
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+        }
+    }
+    else                                                        /* continue Receive data */
+    {
+        status = USB_FUNCTION_READING;
+        count  = dtln;
+
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+    }
+
+    if (count == 0)                                             /* 0 length packet */
+    {
+        USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;                 /* Clear BCLR */
+    }
+    else
+    {
+        usb0_function_read_c_fifo(pipe, (uint16_t)count);
+    }
+
+    g_usb0_function_data_count[pipe] -= count;
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_buffer_d0
+* Description  : Reads data from the buffer allocated in the pipe specified in
+*              : the argument.
+*              : Reads data by CPU transfer using D0FIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_read_buffer_d0 (uint16_t pipe)
+{
+    uint32_t count;
+    uint32_t dtln;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t pipebuf_size;
+
+    mbw    = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb0_function_data_count[pipe] < dtln)                /* Buffer Over ? */
+    {
+        status = USB_FUNCTION_READOVER;
+        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = g_usb0_function_data_count[pipe];
+    }
+    else if (g_usb0_function_data_count[pipe] == dtln)          /* just Receive Size */
+    {
+        status = USB_FUNCTION_READEND;
+        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = dtln;
+
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+        }
+    }
+    else                                                        /* continue Receive data */
+    {
+        status = USB_FUNCTION_READING;
+        count  = dtln;
+
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+        else
+        {
+            pipebuf_size = usb0_function_get_buf_size(pipe);    /* Data buffer size */
+
+            if (count != pipebuf_size)
+            {
+                status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
+                usb0_function_set_pid_nak(pipe);                /* Set NAK */
+            }
+        }
+    }
+
+    if (count == 0)                                             /* 0 length packet */
+    {
+        USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+    }
+    else
+    {
+        usb0_function_read_d0_fifo(pipe, (uint16_t)count);
+    }
+
+    g_usb0_function_data_count[pipe] -= count;
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_buffer_d1
+* Description  : Reads data from the buffer allocated in the pipe specified
+*              : in the argument.
+*              : Reads data by CPU transfer using D1FIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_read_buffer_d1 (uint16_t pipe)
+{
+    uint32_t count;
+    uint32_t dtln;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t pipebuf_size;
+
+    mbw    = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb0_function_data_count[pipe] < dtln)                /* Buffer Over ? */
+    {
+        status = USB_FUNCTION_READOVER;
+        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = g_usb0_function_data_count[pipe];
+    }
+    else if (g_usb0_function_data_count[pipe] == dtln)          /* just Receive Size */
+    {
+        status = USB_FUNCTION_READEND;
+        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = dtln;
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+        }
+    }
+    else                                                        /* continue Receive data */
+    {
+        status = USB_FUNCTION_READING;
+        count  = dtln;
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+        else
+        {
+            pipebuf_size = usb0_function_get_buf_size(pipe);    /* Data buffer size */
+
+            if (count != pipebuf_size)
+            {
+                status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
+                usb0_function_set_pid_nak(pipe);                /* Set NAK */
+            }
+        }
+    }
+
+    if (count == 0)                                             /* 0 length packet */
+    {
+        USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+    }
+    else
+    {
+        usb0_function_read_d1_fifo(pipe, (uint16_t)count);
+    }
+
+    g_usb0_function_data_count[pipe] -= count;
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_dma
+* Description  : Reads data from the buffer allocated in the pipe specified
+*              : in the argument.
+*              : Reads data by DMA transfer using D0FIFO or D1FIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_read_dma (uint16_t pipe)
+{
+    uint16_t status;
+
+    g_usb0_function_PipeIgnore[pipe] = 0;
+    if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
+    {
+        status = usb0_function_read_dma_d0(pipe);
+    }
+    else
+    {
+        status = usb0_function_read_dma_d1(pipe);
+    }
+
+    switch (status)
+    {
+        case USB_FUNCTION_READING:                                      /* Continue of data read */
+        break;
+
+        case USB_FUNCTION_READZERO:                                     /* End of data read */
+            usb0_function_disable_brdy_int(pipe);
+            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+        break;
+
+        case USB_FUNCTION_READEND:                                      /* End of data read */
+        case USB_FUNCTION_READSHRT:                                     /* End of data read */
+            usb0_function_disable_brdy_int(pipe);
+
+            if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+            {
+                g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
+            }
+        break;
+
+        case USB_FUNCTION_READOVER:                                     /* buffer over */
+            usb0_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
+
+            if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+            {
+                g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
+            }
+            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+        break;
+
+        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access status */
+        default:
+            usb0_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
+            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+        break;
+    }
+
+    return status;                                                      /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_dma_d0
+* Description  : Writes data in the buffer allocated in the pipe specified
+*              : in the argument.
+*              : Reads data by DMA transfer using D0FIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READZERO         ; zero data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+static uint16_t usb0_function_read_dma_d0 (uint16_t pipe)
+{
+    uint32_t count;
+    uint32_t dtln;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t dfacc = 0;
+    uint16_t pipebuf_size;
+
+    g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
+
+    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+
+    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        count  = g_usb0_function_data_count[pipe];
+        status = USB_FUNCTION_READING;
+    }
+    else
+    {
+        buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
+
+        if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+        {
+            return DEVDRV_USBF_FIFOERROR;
+        }
+
+        dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+        mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
+
+        if (g_usb0_function_data_count[pipe] < dtln)                /* Buffer Over ? */
+        {
+            status = USB_FUNCTION_READOVER;
+            count  = g_usb0_function_data_count[pipe];
+        }
+        else if (g_usb0_function_data_count[pipe] == dtln)          /* just Receive Size */
+        {
+            status = USB_FUNCTION_READEND;
+            count  = dtln;
+            if (count == 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            }
+
+            if ((count % mxps) != 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            }
+        }
+        else                                                        /* continue Receive data */
+        {
+            status = USB_FUNCTION_READING;
+            count  = dtln;
+
+            if (count == 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            }
+
+            if ((count % mxps) != 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            }
+            else
+            {
+                pipebuf_size = usb0_function_get_buf_size(pipe);    /* Data buffer size */
+                if (count != pipebuf_size)
+                {
+                    status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
+                }
+            }
+        }
+    }
+
+    if (count == 0)                                                 /* 0 length packet */
+    {
+        if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+        {
+            USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+            status = USB_FUNCTION_READZERO;                         /* Null Packet receive */
+        }
+        else
+        {
+            usb0_function_set_curpipe(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
+                                                                    /* transaction counter No set */
+                                                                    /* FRDY = 1, DTLN = 0 -> BRDY */
+        }
+    }
+    else
+    {
+        dfacc = usb0_function_set_dfacc_d0(mbw, count);
+
+        if (mbw == USB_FUNCTION_BITMBW_32)
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2;  /* 32bit transfer */
+        }
+        else if (mbw == USB_FUNCTION_BITMBW_16)
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1;  /* 16bit transfer */
+        }
+        else
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0;  /* 8bit transfer */
+        }
+
+        g_usb0_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe;        /* not use in read operation */
+        g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] = 0;           /* not use in read operation */
+
+        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo   = USB_FUNCTION_D0FIFO_DMA;
+        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].dir    = USB_FUNCTION_FIFO2BUF;
+        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
+        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes  = count;
+
+        if (status == USB_FUNCTION_READING)
+        {
+            g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSY;
+        }
+        else
+        {
+            g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSYEND;
+        }
+
+        Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
+
+        usb0_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+        RZA_IO_RegWrite_16(&USB200.D0FIFOSEL,
+                            1,
+                            USB_DnFIFOSEL_DREQE_SHIFT,
+                            USB_DnFIFOSEL_DREQE);
+    }
+
+    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+    {
+        g_usb0_function_data_count[pipe]   -= count;
+        g_usb0_function_data_pointer[pipe] += count;
+        g_usb0_function_PipeDataSize[pipe] += count;
+    }
+
+    return status;                                                  /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_dma_d1
+* Description  : Reads data from the buffer allocated in the pipe specified in
+*              : the argument.
+*              : Reads data by DMA transfer using D1FIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READZERO         ; zero data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+static uint16_t usb0_function_read_dma_d1 (uint16_t pipe)
+{
+    uint32_t count;
+    uint32_t dtln;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t dfacc=0;
+    uint16_t pipebuf_size;
+
+    g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
+
+    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+
+    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        count  = g_usb0_function_data_count[pipe];
+        status = USB_FUNCTION_READING;
+    }
+    else
+    {
+        buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
+        if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+        {
+            return DEVDRV_USBF_FIFOERROR;
+        }
+
+        dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+        mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
+
+        if (g_usb0_function_data_count[pipe] < dtln)                /* Buffer Over ? */
+        {
+            status = USB_FUNCTION_READOVER;
+            count  = g_usb0_function_data_count[pipe];
+        }
+        else if (g_usb0_function_data_count[pipe] == dtln)          /* just Receive Size */
+        {
+            status = USB_FUNCTION_READEND;
+            count  = dtln;
+            if (count == 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            }
+
+            if ((count % mxps) != 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            }
+        }
+        else                                                        /* continue Receive data */
+        {
+            status = USB_FUNCTION_READING;
+            count  = dtln;
+            if (count == 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            }
+
+            if ((count % mxps) != 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            }
+            else
+            {
+                pipebuf_size = usb0_function_get_buf_size(pipe);    /* Data buffer size */
+                if (count != pipebuf_size)
+                {
+                    status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
+                }
+            }
+        }
+    }
+
+    if (count == 0)                                                 /* 0 length packet */
+    {
+        if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+        {
+            USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+            status = USB_FUNCTION_READZERO;                         /* Null Packet receive */
+        }
+        else
+        {
+            usb0_function_set_curpipe(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
+                                                                    /* transaction counter No set */
+                                                                    /* FRDY = 1, DTLN = 0 -> BRDY */
+        }
+    }
+    else
+    {
+        dfacc = usb0_function_set_dfacc_d1(mbw, count);
+
+        if (mbw == USB_FUNCTION_BITMBW_32)
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2;  /* 32bit transfer */
+        }
+        else if (mbw == USB_FUNCTION_BITMBW_16)
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1;  /* 16bit transfer */
+        }
+        else
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0;  /* 8bit transfer */
+        }
+
+        g_usb0_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe;        /* not use in read operation */
+        g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] = 0;           /* not use in read operation */
+
+        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo   = USB_FUNCTION_D1FIFO_DMA;
+        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].dir    = USB_FUNCTION_FIFO2BUF;
+        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
+        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes  = count;
+
+        if (status == USB_FUNCTION_READING)
+        {
+            g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSY;
+        }
+        else
+        {
+            g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSYEND;
+        }
+
+        Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
+
+        usb0_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+        RZA_IO_RegWrite_16(&USB200.D1FIFOSEL,
+                            1,
+                            USB_DnFIFOSEL_DREQE_SHIFT,
+                            USB_DnFIFOSEL_DREQE);
+    }
+
+    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+    {
+        g_usb0_function_data_count[pipe]   -= count;
+        g_usb0_function_data_pointer[pipe] += count;
+        g_usb0_function_PipeDataSize[pipe] += count;
+    }
+
+    return status;                                                  /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_change_fifo_port
+* Description  : Allocates FIF0 specified by the argument in the pipe assigned
+*              : by the argument. After allocating FIF0, waits in the software
+*              : till the corresponding pipe becomes ready.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t fifosel   ; Select FIFO
+*              : uint16_t isel      ; FIFO Access Direction
+*              : uint16_t mbw       ; FIFO Port Access Bit Width
+* Return Value : DEVDRV_USBF_FIFOERROR         ; Error
+*              : Others            ; CFIFOCTR/D0FIFOCTR/D1FIFOCTR Register Value
+*******************************************************************************/
+uint16_t usb0_function_change_fifo_port (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
+{
+    uint16_t buffer;
+    uint32_t loop;
+    volatile uint32_t loop2;
+
+    usb0_function_set_curpipe(pipe, fifosel, isel, mbw);
+
+    for (loop = 0; loop < 4; loop++)
+    {
+        switch (fifosel)
+        {
+            case USB_FUNCTION_CUSE:
+                buffer = USB200.CFIFOCTR;
+            break;
+
+            case USB_FUNCTION_D0USE:
+            case USB_FUNCTION_D0DMA:
+                buffer = USB200.D0FIFOCTR;
+            break;
+
+            case USB_FUNCTION_D1USE:
+            case USB_FUNCTION_D1DMA:
+                buffer = USB200.D1FIFOCTR;
+            break;
+
+            default:
+                buffer = 0;
+            break;
+        }
+
+        if ((buffer & USB_FUNCTION_BITFRDY) == USB_FUNCTION_BITFRDY)
+        {
+            return buffer;
+        }
+
+        loop2 = 25;
+        while (loop2-- > 0)
+        {
+            /* wait */
+        }
+    }
+
+    return DEVDRV_USBF_FIFOERROR;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_curpipe
+* Description  : Allocates FIF0 specified by the argument in the pipe assigned
+*              : by the argument.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t fifosel   ; Select FIFO
+*              : uint16_t isel      ; FIFO Access Direction
+*              : uint16_t mbw       ; FIFO Port Access Bit Width
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
+{
+    uint16_t buffer;
+    uint32_t loop;
+    volatile uint32_t loop2;
+
+    g_usb0_function_mbw[pipe] = mbw;
+
+    switch (fifosel)
+    {
+        case USB_FUNCTION_CUSE:
+            buffer  = USB200.CFIFOSEL;
+            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
+            buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
+            USB200.CFIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(isel | pipe | mbw);
+            USB200.CFIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        case USB_FUNCTION_D0DMA:
+        case USB_FUNCTION_D0USE:
+            buffer  = USB200.D0FIFOSEL;
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+            USB200.D0FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+                        (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(pipe | mbw);
+            USB200.D0FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+                        (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        case USB_FUNCTION_D1DMA:
+        case USB_FUNCTION_D1USE:
+            buffer  = USB200.D1FIFOSEL;
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+            USB200.D1FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+                        (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(pipe | mbw);
+            USB200.D1FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+                        (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        default:
+        break;
+    }
+
+    /* Cautions !!!
+     * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
+     * For details, please look at the data sheet.   */
+    loop2 = 100;
+
+    while (loop2-- > 0)
+    {
+        /* wait */
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_curpipe2
+* Description  : Allocates FIF0 specified by the argument in the pipe assigned
+*              : by the argument.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t fifosel   ; Select FIFO
+*              : uint16_t isel      ; FIFO Access Direction
+*              : uint16_t mbw       ; FIFO Port Access Bit Width
+*              : uint16_t dfacc     ; DFACC Access mode
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_curpipe2 (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc)
+{
+    uint16_t buffer;
+    uint32_t loop;
+#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
+    uint32_t dummy;
+#endif
+    volatile uint32_t loop2;
+
+    g_usb0_function_mbw[pipe] = mbw;
+
+    switch (fifosel)
+    {
+        case USB_FUNCTION_CUSE:
+            buffer  = USB200.CFIFOSEL;
+            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
+            buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
+            USB200.CFIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(isel | pipe | mbw);
+            USB200.CFIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        case USB_FUNCTION_D0DMA:
+        case USB_FUNCTION_D0USE:
+            buffer  = USB200.D0FIFOSEL;
+#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+
+            if (dfacc != 0)
+            {
+                buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
+            }
+#else
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+#endif
+            USB200.D0FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+
+#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
+            if (dfacc != 0)
+            {
+                dummy = USB200.D0FIFO.UINT32;
+            }
+#endif
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(pipe | mbw);
+            USB200.D0FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        case USB_FUNCTION_D1DMA:
+        case USB_FUNCTION_D1USE:
+            buffer  = USB200.D1FIFOSEL;
+#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+
+            if (dfacc != 0)
+            {
+                buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
+            }
+#else
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+#endif
+            USB200.D1FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
+            if (dfacc != 0)
+            {
+                dummy = USB200.D1FIFO.UINT32;
+                loop = dummy;                   // avoid warning.
+            }
+#endif
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(pipe | mbw);
+            USB200.D1FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        default:
+        break;
+    }
+
+    /* Cautions !!!
+     * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
+     * For details, please look at the data sheet.   */
+    loop2 = 100;
+
+    while (loop2-- > 0)
+    {
+        /* wait */
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_c_fifo
+* Description  : Writes data in CFIFO.
+*              : Writes data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating CFIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb0_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_write_c_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            USB200.CFIFO.UINT8[HH] = *g_usb0_function_data_pointer[pipe];
+            g_usb0_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)(count / 2); even; --even)
+        {
+            USB200.CFIFO.UINT16[H] = *((uint16_t *)g_usb0_function_data_pointer[pipe]);
+            g_usb0_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)(count / 4); even; --even)
+        {
+            USB200.CFIFO.UINT32 = *((uint32_t *)g_usb0_function_data_pointer[pipe]);
+            g_usb0_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_c_fifo
+* Description  : Reads data from CFIFO.
+*              : Reads data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating CFIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb0_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_read_c_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            *g_usb0_function_data_pointer[pipe] = USB200.CFIFO.UINT8[HH];
+            g_usb0_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)((count + 1) / 2); even; --even)
+        {
+            *((uint16_t *)g_usb0_function_data_pointer[pipe]) = USB200.CFIFO.UINT16[H];
+            g_usb0_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)((count + 3) / 4); even; --even)
+        {
+            *((uint32_t *)g_usb0_function_data_pointer[pipe]) = USB200.CFIFO.UINT32;
+            g_usb0_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_d0_fifo
+* Description  : Writes data in D0FIFO.
+*              : Writes data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating CFIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb0_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_write_d0_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            USB200.D0FIFO.UINT8[HH] = *g_usb0_function_data_pointer[pipe];
+            g_usb0_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)(count / 2); even; --even)
+        {
+            USB200.D0FIFO.UINT16[H] = *((uint16_t *)g_usb0_function_data_pointer[pipe]);
+            g_usb0_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)(count / 4); even; --even)
+        {
+            USB200.D0FIFO.UINT32 = *((uint32_t *)g_usb0_function_data_pointer[pipe]);
+            g_usb0_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_d0_fifo
+* Description  : Reads data from D0FIFO.
+*              : Reads data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating DOFIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb0_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_read_d0_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            *g_usb0_function_data_pointer[pipe] = USB200.D0FIFO.UINT8[HH];
+            g_usb0_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)((count + 1) / 2); even; --even)
+        {
+            *((uint16_t *)g_usb0_function_data_pointer[pipe]) = USB200.D0FIFO.UINT16[H];
+            g_usb0_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)((count + 3) / 4); even; --even)
+        {
+            *((uint32_t *)g_usb0_function_data_pointer[pipe]) = USB200.D0FIFO.UINT32;
+            g_usb0_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_d1_fifo
+* Description  : Writes data in D1FIFO.
+*              : Writes data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating D1FIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb0_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_write_d1_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            USB200.D1FIFO.UINT8[HH] = *g_usb0_function_data_pointer[pipe];
+            g_usb0_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)(count / 2); even; --even)
+        {
+            USB200.D1FIFO.UINT16[H] = *((uint16_t *)g_usb0_function_data_pointer[pipe]);
+            g_usb0_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)(count / 4); even; --even)
+        {
+            USB200.D1FIFO.UINT32 = *((uint32_t *)g_usb0_function_data_pointer[pipe]);
+            g_usb0_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_d1_fifo
+* Description  : Reads data from D1FIFO.
+*              : Reads data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating D1FIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb0_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_read_d1_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            *g_usb0_function_data_pointer[pipe] = USB200.D1FIFO.UINT8[HH];
+            g_usb0_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)((count + 1) / 2); even; --even)
+        {
+            *((uint16_t *)g_usb0_function_data_pointer[pipe]) = USB200.D1FIFO.UINT16[H];
+            g_usb0_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)((count + 3) / 4); even; --even)
+        {
+            *((uint32_t *)g_usb0_function_data_pointer[pipe]) = USB200.D1FIFO.UINT32;
+            g_usb0_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_com_get_dmasize
+* Description  : Calculates access width of DMA transfer by the argument to
+*              : return as the Return Value.
+* Arguments    : uint32_t trncount   : transfer byte
+*              : uint32_t dtptr      : transfer data pointer
+* Return Value : DMA transfer size    : 0   8bit
+*              :                      : 1  16bit
+*              :                      : 2  32bit
+*******************************************************************************/
+static uint32_t usb0_function_com_get_dmasize (uint32_t trncount, uint32_t dtptr)
+{
+    uint32_t size;
+
+    if (((trncount & 0x0001) != 0) || ((dtptr & 0x00000001) != 0))
+    {
+        /*  When transfer byte count is odd         */
+        /* or transfer data area is 8-bit alignment */
+        size = 0;           /* 8bit */
+    }
+    else if (((trncount & 0x0003) != 0) || ((dtptr & 0x00000003) != 0))
+    {
+        /* When the transfer byte count is multiples of 2 */
+        /* or the transfer data area is 16-bit alignment */
+        size = 1;           /* 16bit */
+    }
+    else
+    {
+        /* When the transfer byte count is multiples of 4 */
+        /* or the transfer data area is 32-bit alignment */
+        size = 2;           /* 32bit */
+    }
+
+    return size;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_get_mbw
+* Description  : Calculates access width of DMA to return the value set in MBW.
+* Arguments    : uint32_t trncount   : transfer byte
+*              : uint32_t dtptr      : transfer data pointer
+* Return Value : FIFO transfer size   : USB_FUNCTION_BITMBW_8    8bit
+*              :                      : USB_FUNCTION_BITMBW_16  16bit
+*              :                      : USB_FUNCTION_BITMBW_32  32bit
+*******************************************************************************/
+uint16_t usb0_function_get_mbw (uint32_t trncount, uint32_t dtptr)
+{
+    uint32_t size;
+    uint16_t mbw;
+
+    size = usb0_function_com_get_dmasize(trncount, dtptr);
+
+    if (size == 0)
+    {
+        /* 8bit */
+        mbw = USB_FUNCTION_BITMBW_8;
+    }
+    else if (size == 1)
+    {
+        /* 16bit */
+        mbw = USB_FUNCTION_BITMBW_16;
+    }
+    else
+    {
+        /* 32bit */
+        mbw = USB_FUNCTION_BITMBW_32;
+    }
+
+    return mbw;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_transaction_counter
+* Description  : Sets transaction counter by the argument(PIPEnTRN).
+*              : Clears transaction before setting to enable transaction counter setting.
+* Arguments    : uint16_t pipe     ; Pipe number
+*              : uint32_t bsize    : Data transfer size
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_set_transaction_counter (uint16_t pipe, uint32_t bsize)
+{
+    uint16_t mxps;
+    uint16_t cnt;
+
+    if (bsize  == 0)
+    {
+        return;
+    }
+
+    mxps = usb0_function_get_mxps(pipe);            /* Max Packet Size */
+
+    if ((bsize % mxps) == 0)
+    {
+        cnt = (uint16_t)(bsize / mxps);
+    }
+    else
+    {
+        cnt = (uint16_t)((bsize / mxps) + 1);
+    }
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPE1TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPE2TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPE3TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPE4TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPE5TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPE9TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEATRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPEATRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPEATRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPEBTRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPECTRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPECTRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPEDTRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEETRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPEETRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPEETRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPEFTRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_transaction_counter
+* Description  : Clears the transaction counter by the argument.
+*              : After executing this function, the transaction counter is invalid.
+* Arguments    : uint16_t pipe     ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_clear_transaction_counter (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEATRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPEATRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECTRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPECTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEETRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPEETRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_stop_transfer
+* Description  : Stops the USB transfer in the pipe specified by the argument.
+*              : After stopping the USB transfer, clears the buffer allocated in
+*              : the pipe.
+*              : After executing this function, allocation in FIF0 becomes USB_FUNCTION_PIPE0;
+*              : invalid. After executing this function, BRDY/NRDY/BEMP interrupt
+*              : in the corresponding pipe becomes invalid. Sequence bit is also
+*              : cleared.
+* Arguments    : uint16_t  pipe     ; Pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_stop_transfer (uint16_t pipe)
+{
+    uint16_t usefifo;
+    uint32_t remain;
+    uint16_t fifo;
+
+    usb0_function_set_pid_nak(pipe);
+
+    usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+    switch (usefifo)
+    {
+        case USB_FUNCTION_D0FIFO_USE:
+            usb0_function_clear_transaction_counter(pipe);
+            USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
+            fifo = USB_FUNCTION_D0USE;
+        break;
+
+        case USB_FUNCTION_D1FIFO_USE:
+            usb0_function_clear_transaction_counter(pipe);
+            USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
+            fifo = USB_FUNCTION_D1USE;
+        break;
+
+        case USB_FUNCTION_D0FIFO_DMA:
+            remain = Userdef_USB_usb0_function_stop_dma0();
+            usb0_function_dma_stop_d0(pipe, remain);
+            usb0_function_clear_transaction_counter(pipe);
+            USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
+            fifo = USB_FUNCTION_D0DMA;
+        break;
+
+        case USB_FUNCTION_D1FIFO_DMA:
+            remain = Userdef_USB_usb0_function_stop_dma1();
+            usb0_function_dma_stop_d1(pipe, remain);
+            usb0_function_clear_transaction_counter(pipe);
+            USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
+            fifo = USB_FUNCTION_D1DMA;
+        break;
+
+        default:
+            usb0_function_clear_transaction_counter(pipe);
+            USB200.CFIFOCTR =  USB_FUNCTION_BITBCLR;        /* Buffer Clear */
+            fifo = USB_FUNCTION_CUSE;
+        break;
+    }
+
+    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, fifo, DEVDRV_USBF_NO, USB_FUNCTION_BITMBW_16);
+
+    /* Interrupt of pipe set is disabled */
+    usb0_function_disable_brdy_int(pipe);
+    usb0_function_disable_nrdy_int(pipe);
+    usb0_function_disable_bemp_int(pipe);
+
+    usb0_function_aclrm(pipe);
+    usb0_function_set_csclr(pipe);
+
+    if ( g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT )
+    {
+        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
+    }
+
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_dfacc_d0
+* Description  : Sets the DFACC setting value in D0FIFO using the transfer size.
+* Arguments    : uint16_t mbw     ; MBW
+*              : uint16_t count   ; data count
+* Return Value : DFACC Access mode
+*******************************************************************************/
+static uint16_t usb0_function_set_dfacc_d0 (uint16_t mbw, uint32_t count)
+{
+    uint16_t dfacc = 0;
+
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+    RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                        0,
+                        USB_DnFBCFG_DFACC_SHIFT,
+                        USB_DnFBCFG_DFACC);
+    RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                        0,
+                        USB_DnFBCFG_TENDE_SHIFT,
+                        USB_DnFBCFG_TENDE);
+    dfacc = 0;
+#else
+    if (mbw == USB_FUNCTION_BITMBW_32)
+    {
+        if ((count % 32) == 0)
+        {
+            /* 32byte transfer */
+            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                                2,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 2;
+        }
+        else if ((count % 16) == 0)
+        {
+            /* 16byte transfer */
+            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                                1,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 1;
+        }
+        else
+        {
+            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                                0,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 0;
+        }
+    }
+    else if (mbw == USB_FUNCTION_BITMBW_16)
+    {
+        RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                            0,
+                            USB_DnFBCFG_DFACC_SHIFT,
+                            USB_DnFBCFG_DFACC);
+        RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                            0,
+                            USB_DnFBCFG_TENDE_SHIFT,
+                            USB_DnFBCFG_TENDE);
+        dfacc = 0;
+    }
+    else
+    {
+        RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                            0,
+                            USB_DnFBCFG_DFACC_SHIFT,
+                            USB_DnFBCFG_DFACC);
+        RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                            0,
+                            USB_DnFBCFG_TENDE_SHIFT,
+                            USB_DnFBCFG_TENDE);
+        dfacc = 0;
+    }
+#endif
+    return dfacc;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_dfacc_d1
+* Description  : Set the DFACC setting value in D1FIFO using the transfer size.
+* Arguments    : uint16_t mbw     ; MBW
+*              : uint16_t count   ; data count
+* Return Value : DFACC Access mode
+*******************************************************************************/
+static uint16_t usb0_function_set_dfacc_d1 (uint16_t mbw, uint32_t count)
+{
+    uint16_t dfacc = 0;
+
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+    RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                        0,
+                        USB_DnFBCFG_DFACC_SHIFT,
+                        USB_DnFBCFG_DFACC);
+    RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                        0,
+                        USB_DnFBCFG_TENDE_SHIFT,
+                        USB_DnFBCFG_TENDE);
+    dfacc = 0;
+#else
+    if (mbw == USB_FUNCTION_BITMBW_32)
+    {
+        if ((count % 32) == 0)
+        {
+            /* 32byte transfer */
+            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                                2,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 2;
+        }
+        else if ((count % 16) == 0)
+        {
+            /* 16byte transfer */
+            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                                1,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 1;
+        }
+        else
+        {
+            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                                0,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 0;
+        }
+    }
+    else if (mbw == USB_FUNCTION_BITMBW_16)
+    {
+        RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                            0,
+                            USB_DnFBCFG_DFACC_SHIFT,
+                            USB_DnFBCFG_DFACC);
+        RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                            0,
+                            USB_DnFBCFG_TENDE_SHIFT,
+                            USB_DnFBCFG_TENDE);
+        dfacc = 0;
+    }
+    else
+    {
+        RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                            0,
+                            USB_DnFBCFG_DFACC_SHIFT,
+                            USB_DnFBCFG_DFACC);
+        RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                            0,
+                            USB_DnFBCFG_TENDE_SHIFT,
+                            USB_DnFBCFG_TENDE);
+        dfacc = 0;
+    }
+#endif
+
+    return dfacc;
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_dma.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_dma.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,346 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_dma.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb0_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+static void usb0_function_dmaint(uint16_t fifo);
+static void usb0_function_dmaint_buf2fifo(uint16_t pipe);
+static void usb0_function_dmaint_fifo2buf(uint16_t pipe);
+
+
+/*******************************************************************************
+* Function Name: usb0_function_dma_stop_d0
+* Description  : D0FIFO DMA stop
+* Arguments    : uint16_t pipe      : pipe number
+*              : uint32_t remain    : transfer byte
+* Return Value : none
+*******************************************************************************/
+void usb0_function_dma_stop_d0 (uint16_t pipe, uint32_t remain)
+{
+    uint16_t dtln;
+    uint16_t dfacc;
+    uint16_t buffer;
+    uint16_t sds_b = 1;
+
+    dfacc = RZA_IO_RegRead_16(&USB200.D0FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
+
+    if (dfacc == 2)
+    {
+        sds_b = 32;
+    }
+    else if (dfacc == 1)
+    {
+        sds_b = 16;
+    }
+    else
+    {
+        if (g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 2)
+        {
+            sds_b = 4;
+        }
+        else if (g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 1)
+        {
+            sds_b = 2;
+        }
+        else
+        {
+            sds_b = 1;
+        }
+    }
+
+    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
+        {
+            buffer = USB200.D0FIFOCTR;
+            dtln   = (buffer & USB_FUNCTION_BITDTLN);
+
+            if ((dtln % sds_b) != 0)
+            {
+                remain += (sds_b - (dtln % sds_b));
+            }
+            g_usb0_function_PipeDataSize[pipe] = (g_usb0_function_data_count[pipe] - remain);
+            g_usb0_function_data_count[pipe]   = remain;
+        }
+    }
+
+    RZA_IO_RegWrite_16(&USB200.D0FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_dma_stop_d1
+* Description  : D1FIFO DMA stop
+* Arguments    : uint16_t pipe      : pipe number
+*              : uint32_t remain    : transfer byte
+* Return Value : none
+*******************************************************************************/
+void usb0_function_dma_stop_d1 (uint16_t pipe, uint32_t remain)
+{
+    uint16_t dtln;
+    uint16_t dfacc;
+    uint16_t buffer;
+    uint16_t sds_b = 1;
+
+    dfacc = RZA_IO_RegRead_16(&USB200.D1FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
+
+    if (dfacc == 2)
+    {
+        sds_b = 32;
+    }
+    else if (dfacc == 1)
+    {
+        sds_b = 16;
+    }
+    else
+    {
+        if (g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 2)
+        {
+            sds_b = 4;
+        }
+        else if (g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 1)
+        {
+            sds_b = 2;
+        }
+        else
+        {
+            sds_b = 1;
+        }
+    }
+
+    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
+        {
+            buffer = USB200.D1FIFOCTR;
+            dtln   = (buffer & USB_FUNCTION_BITDTLN);
+
+            if ((dtln % sds_b) != 0)
+            {
+                remain += (sds_b - (dtln % sds_b));
+            }
+            g_usb0_function_PipeDataSize[pipe] = (g_usb0_function_data_count[pipe] - remain);
+            g_usb0_function_data_count[pipe]   = remain;
+        }
+    }
+
+    RZA_IO_RegWrite_16(&USB200.D1FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_dma_interrupt_d0fifo
+* Description  : This function is DMA interrupt handler entry.
+*              : Execute usb0_function_dmaint() after disabling DMA interrupt in this function.
+*              : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D0FIFO_DMA is
+*              : specified by dma->fifo.
+*              : Register this function as DMA complete interrupt.
+* Arguments    : uint32_t int_sense ; Interrupts detection mode
+*              :                    ;  INTC_LEVEL_SENSITIVE : Level sense
+*              :                    ;  INTC_EDGE_TRIGGER : Edge trigger
+* Return Value : none
+*******************************************************************************/
+void usb0_function_dma_interrupt_d0fifo (uint32_t int_sense)
+{
+    usb0_function_dmaint(USB_FUNCTION_D0FIFO);
+    g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_dma_interrupt_d1fifo
+* Description  : This function is DMA interrupt handler entry.
+*              : Execute usb0_function_dmaint() after disabling DMA interrupt in this function.
+*              : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D1FIFO_DMA is
+*              : specified by dma->fifo.
+*              : Register this function as DMA complete interrupt.
+* Arguments    : uint32_t int_sense ; Interrupts detection mode
+*              :                    ;  INTC_LEVEL_SENSITIVE : Level sense
+*              :                    ;  INTC_EDGE_TRIGGER : Edge trigger
+* Return Value : none
+*******************************************************************************/
+void usb0_function_dma_interrupt_d1fifo (uint32_t int_sense)
+{
+    usb0_function_dmaint(USB_FUNCTION_D1FIFO);
+    g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_dmaint
+* Description  : This function is DMA transfer end interrupt
+* Arguments    : uint16_t fifo  ; fifo number
+*              :                ;  USB_FUNCTION_D0FIFO
+*              :                ;  USB_FUNCTION_D1FIFO
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_dmaint (uint16_t fifo)
+{
+    uint16_t pipe;
+
+    pipe = g_usb0_function_DmaPipe[fifo];
+
+    if (g_usb0_function_DmaInfo[fifo].dir == USB_FUNCTION_BUF2FIFO)
+    {
+        usb0_function_dmaint_buf2fifo(pipe);
+    }
+    else
+    {
+        usb0_function_dmaint_fifo2buf(pipe);
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_dmaint_fifo2buf
+* Description  : Executes read completion from FIFO by DMAC.
+* Arguments    : uint16_t pipe      : pipe number
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_dmaint_fifo2buf (uint16_t pipe)
+{
+    uint32_t remain;
+    uint16_t useport;
+
+    if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
+    {
+        useport = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+        if (useport == USB_FUNCTION_D0FIFO_DMA)
+        {
+            remain = Userdef_USB_usb0_function_stop_dma0();
+            usb0_function_dma_stop_d0(pipe, remain);
+
+            if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+            {
+                if (g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] == USB_FUNCTION_DMA_BUSYEND)
+                {
+                    USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;
+                    g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                }
+                else
+                {
+                    usb0_function_enable_brdy_int(pipe);
+                }
+            }
+        }
+        else
+        {
+            remain = Userdef_USB_usb0_function_stop_dma1();
+            usb0_function_dma_stop_d1(pipe, remain);
+
+            if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+            {
+                if (g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] == USB_FUNCTION_DMA_BUSYEND)
+                {
+                    USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;
+                    g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                }
+                else
+                {
+                    usb0_function_enable_brdy_int(pipe);
+                }
+            }
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_dmaint_buf2fifo
+* Description  : Executes write completion in FIFO by DMAC.
+* Arguments    : uint16_t pipe      : pipe number
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_dmaint_buf2fifo (uint16_t pipe)
+{
+    uint32_t remain;
+    uint16_t useport;
+
+    useport = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+    if (useport == USB_FUNCTION_D0FIFO_DMA)
+    {
+        remain = Userdef_USB_usb0_function_stop_dma0();
+        usb0_function_dma_stop_d0(pipe, remain);
+
+        if (g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] != 0)
+        {
+            RZA_IO_RegWrite_16(&USB200.D0FIFOCTR,
+                                1,
+                                USB_DnFIFOCTR_BVAL_SHIFT,
+                                USB_DnFIFOCTR_BVAL);
+        }
+    }
+    else
+    {
+        remain = Userdef_USB_usb0_function_stop_dma1();
+        usb0_function_dma_stop_d1(pipe, remain);
+
+        if (g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] != 0)
+        {
+            RZA_IO_RegWrite_16(&USB200.D1FIFOCTR,
+                                1,
+                                USB_DnFIFOCTR_BVAL_SHIFT,
+                                USB_DnFIFOCTR_BVAL);
+        }
+    }
+
+    usb0_function_enable_bemp_int(pipe);
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_intrn.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_intrn.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,249 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_intrn.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb0_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb0_function_brdy_int
+* Description  : Executes BRDY interrupt(USB_FUNCTION_PIPE1-9).
+*              : According to the pipe that interrupt is generated in,
+*              : reads/writes buffer allocated in the pipe.
+*              : This function is executed in the BRDY interrupt handler.
+*              : This function clears BRDY interrupt status and BEMP interrupt
+*              : status.
+* Arguments    : uint16_t Status       ; BRDYSTS Register Value
+*              : uint16_t Int_enbl     ; BRDYENB Register Value
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb0_function_brdy_int (uint16_t status, uint16_t int_enb)
+{
+    uint32_t int_sense = 0;
+    uint16_t pipe;
+    uint16_t pipebit;
+
+    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+    {
+        pipebit = g_usb0_function_bit_set[pipe];
+
+        if ((status & pipebit) && (int_enb & pipebit))
+        {
+            USB200.BRDYSTS = (uint16_t)~pipebit;
+            USB200.BEMPSTS = (uint16_t)~pipebit;
+            if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
+            {
+                if (g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] != USB_FUNCTION_DMA_READY)
+                {
+                    usb0_function_dma_interrupt_d0fifo(int_sense);
+                }
+
+                if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+                {
+                    usb0_function_read_dma(pipe);
+                    usb0_function_disable_brdy_int(pipe);
+                }
+                else
+                {
+                    USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;
+                    g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                }
+            }
+            else if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA)
+            {
+                if (g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] != USB_FUNCTION_DMA_READY)
+                {
+                    usb0_function_dma_interrupt_d1fifo(int_sense);
+                }
+
+                if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+                {
+                    usb0_function_read_dma(pipe);
+                    usb0_function_disable_brdy_int(pipe);
+                }
+                else
+                {
+                    USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;
+                    g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                }
+            }
+            else
+            {
+                if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0)
+                {
+                    usb0_function_read_buffer(pipe);
+                }
+                else
+                {
+                    usb0_function_write_buffer(pipe);
+                }
+            }
+        }
+    }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_nrdy_int
+* Description  : Executes NRDY interrupt(USB_FUNCTION_PIPE1-9).
+*              : Checks NRDY interrupt cause by PID. When the cause if STALL,
+*              : regards the pipe state as STALL and ends the processing.
+*              : Then the cause is not STALL, increments the error count to
+*              : communicate again. When the error count is 3, determines
+*              : the pipe state as DEVDRV_USBF_PIPE_NORES and ends the processing.
+*              : This function is executed in the NRDY interrupt handler.
+*              : This function clears NRDY interrupt status.
+* Arguments    : uint16_t status       ; NRDYSTS Register Value
+*              : uint16_t int_enb      ; NRDYENB Register Value
+* Return Value : none
+*******************************************************************************/
+void usb0_function_nrdy_int (uint16_t status, uint16_t int_enb)
+{
+    uint16_t pid;
+    uint16_t pipe;
+    uint16_t bitcheck;
+
+    bitcheck = (uint16_t)(status & int_enb);
+
+    USB200.NRDYSTS = (uint16_t)~status;
+
+    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+    {
+        if ((bitcheck&g_usb0_function_bit_set[pipe]) == g_usb0_function_bit_set[pipe])
+        {
+            if (RZA_IO_RegRead_16(&USB200.SYSCFG0, USB_SYSCFG_DCFM_SHIFT, USB_SYSCFG_DCFM) == 1)
+            {
+                if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT)
+                {
+                    pid = usb0_function_get_pid(pipe);
+                    if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
+                    {
+                        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
+                    }
+                    else
+                    {
+                        g_usb0_function_PipeIgnore[pipe]++;
+                        if (g_usb0_function_PipeIgnore[pipe] == 3)
+                        {
+                            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
+                        }
+                        else
+                        {
+                            usb0_function_set_pid_buf(pipe);
+                        }
+                    }
+                }
+            }
+            else
+            {
+                /* USB Function */
+            }
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_bemp_int
+* Description  : Executes BEMP interrupt(USB_FUNCTION_PIPE1-9).
+* Arguments    : uint16_t status       ; BEMPSTS Register Value
+*              : uint16_t int_enb      ; BEMPENB Register Value
+* Return Value : none
+*******************************************************************************/
+void usb0_function_bemp_int (uint16_t status, uint16_t int_enb)
+{
+    uint16_t pid;
+    uint16_t pipe;
+    uint16_t bitcheck;
+    uint16_t inbuf;
+
+    bitcheck = (uint16_t)(status & int_enb);
+
+    USB200.BEMPSTS = (uint16_t)~status;
+
+    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+    {
+        if ((bitcheck&g_usb0_function_bit_set[pipe]) == g_usb0_function_bit_set[pipe])
+        {
+            pid = usb0_function_get_pid(pipe);
+
+            if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
+            {
+                g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
+            }
+            else
+            {
+                inbuf = usb0_function_get_inbuf(pipe);
+
+                if (inbuf == 0)
+                {
+                    usb0_function_disable_bemp_int(pipe);
+                    usb0_function_set_pid_nak(pipe);
+                    g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                }
+            }
+        }
+    }
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_lib.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_lib.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,2026 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_lib.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb0_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb0_function_enable_brdy_int
+* Description  : Enables BRDY interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
+*              : BRDY. Enables BRDY interrupt in the pipe specified by the argument
+*              : in the disabled status. After enabling BRDY, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe           ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_enable_brdy_int (uint16_t pipe)
+{
+    /* enable brdy interrupt */
+    USB200.BRDYENB |= (uint16_t)g_usb0_function_bit_set[pipe];
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_disable_brdy_int
+* Description  : Disables BRDY interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
+*              : BRDY. Enables BRDY interrupt in the pipe specified by the argument
+*              : in the disabled status. After disabling BRDY, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_disable_brdy_int (uint16_t pipe)
+{
+    /* disable brdy interrupt */
+    USB200.BRDYENB &= (uint16_t)~(g_usb0_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_brdy_sts
+* Description  : Clear BRDY interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_clear_brdy_sts (uint16_t pipe)
+{
+    /* clear brdy status */
+    USB200.BRDYSTS = (uint16_t)~(g_usb0_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_enable_bemp_int
+* Description  : Enables BEMP interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
+*              : BEMP. Enables BEMP interrupt in the pipe specified by the argument
+*              : in the disabled status. After enabling BEMP, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe           ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_enable_bemp_int (uint16_t pipe)
+{
+    /* enable bemp interrupt */
+    USB200.BEMPENB |= (uint16_t)g_usb0_function_bit_set[pipe];
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_disable_bemp_int
+* Description  : Disables BEMP interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
+*              : BEMP. Enables BEMP interrupt in the pipe specified by the argument
+*              : in the disabled status. After enabling BEMP, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe           ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_disable_bemp_int (uint16_t pipe)
+{
+    /* disable bemp interrupt */
+    USB200.BEMPENB &= (uint16_t)~(g_usb0_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_bemp_sts
+* Description  : Clear BEMP interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_clear_bemp_sts (uint16_t pipe)
+{
+    /* clear bemp status */
+    USB200.BEMPSTS = (uint16_t)~(g_usb0_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_enable_nrdy_int
+* Description  : Enables NRDY interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
+*              : NRDY. Enables NRDY interrupt in the pipe specified by the argument
+*              : in the disabled status. After enabling NRDY, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe             ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_enable_nrdy_int (uint16_t pipe)
+{
+    /* enable nrdy interrupt */
+    USB200.NRDYENB |= (uint16_t)g_usb0_function_bit_set[pipe];
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_disable_nrdy_int
+* Description  : Disables NRDY interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
+*              : NRDY. Disables NRDY interrupt in the pipe specified by the argument
+*              : in the disabled status. After disabling NRDY, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_disable_nrdy_int (uint16_t pipe)
+{
+    /* disable nrdy interrupt */
+    USB200.NRDYENB &= (uint16_t)~(g_usb0_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_nrdy_sts
+* Description  : Clear NRDY interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_clear_nrdy_sts (uint16_t pipe)
+{
+    /* clear nrdy status */
+    USB200.NRDYSTS = (uint16_t)~(g_usb0_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_is_hispeed
+* Description  : Returns the result of USB reset hand shake (RHST) as
+*              : return value.
+* Arguments    : none
+* Return Value : USB_FUNCTION_HIGH_SPEED    ; Hi-Speed
+*              : USB_FUNCTION_FULL_SPEED    ; Full-Speed
+*              : LOW_SPEED                  ; Low-Speed
+*              : USB_FUNCTION_NON_SPEED     ; error
+*******************************************************************************/
+uint16_t usb0_function_is_hispeed (void)
+{
+    uint16_t rhst;
+    uint16_t speed;
+
+    rhst = RZA_IO_RegRead_16(&USB200.DVSTCTR0, USB_DVSTCTR0_RHST_SHIFT, USB_DVSTCTR0_RHST);
+
+    if (rhst == USB_FUNCTION_HSMODE)
+    {
+        speed = USB_FUNCTION_HIGH_SPEED;
+    }
+    else if (rhst == USB_FUNCTION_FSMODE)
+    {
+        speed = USB_FUNCTION_FULL_SPEED;
+    }
+    else if (rhst == USB_FUNCTION_LSMODE)
+    {
+        speed = USB_FUNCTION_LOW_SPEED;
+    }
+    else
+    {
+        speed = USB_FUNCTION_NON_SPEED;
+    }
+
+    return speed;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_is_hispeed_enable
+* Description  : Returns the USB High-Speed connection enabled status as
+*              : return value.
+* Arguments    : none
+* Return Value : DEVDRV_USBF_YES  : Hi-Speed Enable
+*              : DEVDRV_USBF_NO   : Hi-Speed Disable
+*******************************************************************************/
+uint16_t usb0_function_is_hispeed_enable (void)
+{
+    uint16_t ret;
+
+    ret = DEVDRV_USBF_NO;
+
+    if (RZA_IO_RegRead_16(&USB200.SYSCFG0, USB_SYSCFG_HSE_SHIFT, USB_SYSCFG_HSE) == 1)
+    {
+        ret = DEVDRV_USBF_YES;
+    }
+
+    return ret;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_pid_buf
+* Description  : Enables communicaqtion in the pipe specified by the argument
+*              : (BUF).
+* Arguments    : uint16_t pipe             ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_pid_buf (uint16_t pipe)
+{
+    uint16_t pid;
+
+    pid = usb0_function_get_pid(pipe);
+
+    if (pid == DEVDRV_USBF_PID_STALL2)
+    {
+        usb0_function_set_pid_nak(pipe);
+    }
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB200.DCPCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_DCPCTR_PID_SHIFT,
+                                USB_DCPCTR_PID);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_9_PID_SHIFT,
+                                USB_PIPEnCTR_9_PID);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_pid_nak
+* Description  : Disables communication (NAK) in the pipe specified by the argument.
+*              : When the pipe status was enabling communication (BUF) before
+*              : executing before executing this function, waits in the software
+*              : until the pipe becomes ready after setting disabled.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_pid_nak (uint16_t pipe)
+{
+    uint16_t pid;
+    uint16_t pbusy;
+    uint32_t loop;
+
+    pid = usb0_function_get_pid(pipe);
+
+    if (pid == DEVDRV_USBF_PID_STALL2)
+    {
+        usb0_function_set_pid_stall(pipe);
+    }
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB200.DCPCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_DCPCTR_PID_SHIFT,
+                                USB_DCPCTR_PID);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_9_PID_SHIFT,
+                                USB_PIPEnCTR_9_PID);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        default:
+        break;
+    }
+
+    if (pid == DEVDRV_USBF_PID_BUF)
+    {
+        for (loop = 0; loop < 200; loop++)
+        {
+            switch (pipe)
+            {
+                case USB_FUNCTION_PIPE0:
+                    pbusy = RZA_IO_RegRead_16(&USB200.DCPCTR,
+                                                USB_DCPCTR_PBUSY_SHIFT,
+                                                USB_DCPCTR_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE1:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE2:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE3:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE4:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE5:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE6:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE6CTR,
+                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_6_8_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE7:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE7CTR,
+                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_6_8_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE8:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE8CTR,
+                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_6_8_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE9:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
+                                                USB_PIPEnCTR_9_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_9_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEA:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEACTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEB:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEC:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPECCTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPED:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEE:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEECTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEF:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                default:
+                    pbusy   = 1;
+                break;
+            }
+
+            if (pbusy == 0)
+            {
+                break;
+            }
+            Userdef_USB_usb0_function_delay_500ns();
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_pid_stall
+* Description  : Disables communication (STALL) in the pipe specified by the
+*              : argument.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_pid_stall (uint16_t pipe)
+{
+    uint16_t pid;
+
+    pid = usb0_function_get_pid(pipe);
+    if (pid == DEVDRV_USBF_PID_BUF)
+    {
+        switch (pipe)
+        {
+            case USB_FUNCTION_PIPE0:
+                RZA_IO_RegWrite_16(&USB200.DCPCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_DCPCTR_PID_SHIFT,
+                                    USB_DCPCTR_PID);
+            break;
+
+            case USB_FUNCTION_PIPE1:
+                RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE2:
+                RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE3:
+                RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE4:
+                RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE5:
+                RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE6:
+                RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE7:
+                RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE8:
+                RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE9:
+                RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_9_PID_SHIFT,
+                                    USB_PIPEnCTR_9_PID);
+            break;
+
+            case USB_FUNCTION_PIPEA:
+                RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEB:
+                RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEC:
+                RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPED:
+                RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEE:
+                RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEF:
+                RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            default:
+            break;
+        }
+    }
+    else
+    {
+        switch (pipe)
+        {
+            case USB_FUNCTION_PIPE0:
+                RZA_IO_RegWrite_16(&USB200.DCPCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_DCPCTR_PID_SHIFT,
+                                    USB_DCPCTR_PID);
+            break;
+
+            case USB_FUNCTION_PIPE1:
+                RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE2:
+                RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE3:
+                RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE4:
+                RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE5:
+                RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE6:
+                RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE7:
+                RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE8:
+                RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE9:
+                RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_9_PID_SHIFT,
+                                    USB_PIPEnCTR_9_PID);
+            break;
+
+            case USB_FUNCTION_PIPEA:
+                RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEB:
+                RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEC:
+                RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPED:
+                RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEE:
+                RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEF:
+                RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            default:
+            break;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_pid_stall
+* Description  : Disables communication (NAK) in the pipe specified by the argument.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_clear_pid_stall (uint16_t pipe)
+{
+    usb0_function_set_pid_nak(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_get_pid
+* Description  : Returns the pipe state specified by the argument.
+* Arguments    : uint16_t pipe          ; Pipe Number
+* Return Value : PID
+*******************************************************************************/
+uint16_t usb0_function_get_pid (uint16_t pipe)
+{
+    uint16_t pid;
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            pid = RZA_IO_RegRead_16(&USB200.DCPCTR,
+                                    USB_DCPCTR_PID_SHIFT,
+                                    USB_DCPCTR_PID);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE6CTR,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE7CTR,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE8CTR,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
+                                    USB_PIPEnCTR_9_PID_SHIFT,
+                                    USB_PIPEnCTR_9_PID);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            pid = RZA_IO_RegRead_16(&USB200.PIPEACTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            pid = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            pid = RZA_IO_RegRead_16(&USB200.PIPECCTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            pid = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            pid = RZA_IO_RegRead_16(&USB200.PIPEECTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            pid = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        default:
+            pid = 0;
+        break;
+    }
+
+    return pid;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_csclr
+* Description  : CSPLIT status clear setting of sprit transaction in specified
+*              : pipe is performed.
+*              : When SQSET bit or SQCLR bit, and SQSET bit or SQCLR bit
+*              : in DCPCTR register are continuously changed (when the sequence
+*              : toggle bit of data PID is continuously changed over two or more pipes),
+*              : the access cycle with 120 ns and more than 5 cycle bus clock is necessary.
+*              : Do not set both SQCLR bit and SQSET bit to 1 at the same time.
+*              : In addition, both bits should be operated after PID is set to NAK.
+*              : However, when it is set to the isochronous transfer as the transfer type
+*              : (TYPE=11), writing in SQSET bit is disabled.
+* Arguments    : uint16_t pipe     ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_csclr (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB200.DCPCTR,
+                                1,
+                                USB_DCPCTR_CSCLR_SHIFT,
+                                USB_DCPCTR_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                1,
+                                USB_PIPEnCTR_9_CSCLR_SHIFT,
+                                USB_PIPEnCTR_9_CSCLR);
+        break;
+
+        default:
+            /* PIPEA-F have not CSCLR */
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_sqclr
+* Description  : Sets the sequence bit of the pipe specified by the argument to
+*              : DATA0.
+* Arguments    : uint16_t pipe              ; Pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_sqclr (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB200.DCPCTR,
+                                1,
+                                USB_DCPCTR_SQCLR_SHIFT,
+                                USB_DCPCTR_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                1,
+                                USB_PIPEnCTR_9_SQCLR_SHIFT,
+                                USB_PIPEnCTR_9_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_sqset
+* Description  : Sets the sequence bit of the pipe specified by the argument to
+*              : DATA1.
+* Arguments    : uint16_t pipe   ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_sqset (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB200.DCPCTR,
+                                1,
+                                USB_DCPCTR_SQSET_SHIFT,
+                                USB_DCPCTR_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
+                                USB_PIPEnCTR_6_8_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
+                                USB_PIPEnCTR_6_8_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
+                                USB_PIPEnCTR_6_8_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                1,
+                                USB_PIPEnCTR_9_SQSET_SHIFT,
+                                USB_PIPEnCTR_9_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_get_sqmon
+* Description  : Toggle bit of specified pipe is obtained
+* Arguments    : uint16_t pipe   ; Pipe number
+* Return Value : sqmon
+*******************************************************************************/
+uint16_t usb0_function_get_sqmon (uint16_t pipe)
+{
+    uint16_t sqmon;
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            sqmon = RZA_IO_RegRead_16(&USB200.DCPCTR,
+                                        USB_DCPCTR_SQMON_SHIFT,
+                                        USB_DCPCTR_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE6CTR,
+                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
+                                        USB_PIPEnCTR_6_8_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE7CTR,
+                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
+                                        USB_PIPEnCTR_6_8_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE8CTR,
+                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
+                                        USB_PIPEnCTR_6_8_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
+                                        USB_PIPEnCTR_9_SQMON_SHIFT,
+                                        USB_PIPEnCTR_9_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPEACTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPECCTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPEECTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        default:
+            sqmon = 0;
+        break;
+    }
+
+    return sqmon;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_aclrm
+* Description  : The buffer of specified pipe is initialized
+* Arguments    : uint16_t pipe    : Pipe
+* Return Value : none
+*******************************************************************************/
+void usb0_function_aclrm (uint16_t pipe)
+{
+    usb0_function_set_aclrm(pipe);
+    usb0_function_clr_aclrm(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_aclrm
+* Description  : The auto buffer clear mode of specified pipe is enabled
+* Arguments    : uint16_t pipe    : Pipe
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_aclrm (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                1,
+                                USB_PIPEnCTR_9_ACLRM_SHIFT,
+                                USB_PIPEnCTR_9_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_clr_aclrm
+* Description  : The auto buffer clear mode of specified pipe is enabled
+* Arguments    : uint16_t pipe    : Pipe
+* Return Value : none
+*******************************************************************************/
+void usb0_function_clr_aclrm (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                0,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                0,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                0,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                0,
+                                USB_PIPEnCTR_9_ACLRM_SHIFT,
+                                USB_PIPEnCTR_9_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_get_inbuf
+* Description  : Returns INBUFM of the pipe specified by the argument.
+* Arguments    : uint16_t pipe             ; Pipe Number
+* Return Value : inbuf
+*******************************************************************************/
+uint16_t usb0_function_get_inbuf (uint16_t pipe)
+{
+    uint16_t inbuf;
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            inbuf = 0;
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            inbuf = 0;
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            inbuf = 0;
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            inbuf = 0;
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
+                                    USB_PIPEnCTR_9_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_9_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPEACTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPECCTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPEECTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        default:
+            inbuf = 0;
+        break;
+    }
+
+    return inbuf;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_setting_interrupt
+* Description  : Sets the USB module interrupt level.
+* Arguments    : uint8_t level ;interrupt level
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb0_function_setting_interrupt (uint8_t level)
+{
+    uint16_t d0fifo_dmaintid;
+    uint16_t d1fifo_dmaintid;
+
+    R_INTC_RegistIntFunc(INTC_ID_USBI0, usb0_function_interrupt);
+    R_INTC_SetPriority(INTC_ID_USBI0, level);
+    R_INTC_Enable(INTC_ID_USBI0);
+
+    d0fifo_dmaintid = Userdef_USB_usb0_function_d0fifo_dmaintid();
+
+    if (d0fifo_dmaintid != 0xFFFF)
+    {
+        R_INTC_RegistIntFunc(d0fifo_dmaintid, usb0_function_dma_interrupt_d0fifo);
+        R_INTC_SetPriority(d0fifo_dmaintid, level);
+        R_INTC_Enable(d0fifo_dmaintid);
+    }
+
+    d1fifo_dmaintid = Userdef_USB_usb0_function_d1fifo_dmaintid();
+
+    if (d1fifo_dmaintid != 0xFFFF)
+    {
+        R_INTC_RegistIntFunc(d1fifo_dmaintid, usb0_function_dma_interrupt_d1fifo);
+        R_INTC_SetPriority(d1fifo_dmaintid, level);
+        R_INTC_Enable(d1fifo_dmaintid);
+    }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_reset_module
+* Description  : Initializes the USB module.
+*              : Enables providing clock to the USB module.
+*              : Sets USB bus wait register.
+* Arguments    : uint16_t clockmode ; 48MHz ; USBFCLOCK_X1_48MHZ
+*              :                    ; 12MHz ; USBFCLOCK_EXTAL_12MHZ
+* Return Value : none
+*******************************************************************************/
+void usb0_function_reset_module (uint16_t clockmode)
+{
+    /* UPLLE bit is only USB0 */
+    if (RZA_IO_RegRead_16(&USB200.SYSCFG0,
+                                USB_SYSCFG_UPLLE_SHIFT,
+                                USB_SYSCFG_UPLLE) == 1)
+    {
+        if ((USB200.SYSCFG0 & USB_FUNCTION_BITUCKSEL) != clockmode)
+        {
+            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                                0,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+            USB200.SYSCFG0 = 0;
+            USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
+            Userdef_USB_usb0_function_delay_xms(1);
+            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                                1,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+        }
+        else
+        {
+            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                                0,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+            Userdef_USB_usb0_function_delay_xms(1);
+            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                                1,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+        }
+    }
+    else
+    {
+        RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                            0,
+                            USB_SUSPMODE_SUSPM_SHIFT,
+                            USB_SUSPMODE_SUSPM);
+        USB200.SYSCFG0 = 0;
+        USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
+        Userdef_USB_usb0_function_delay_xms(1);
+        RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                            1,
+                            USB_SUSPMODE_SUSPM_SHIFT,
+                            USB_SUSPMODE_SUSPM);
+    }
+
+    USB200.BUSWAIT = (uint16_t)(USB_FUNCTION_BUSWAIT_05 & USB_FUNCTION_BITBWAIT);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_get_buf_size
+* Description  : Obtains pipe buffer size specified by the argument and
+*              : maximum packet size of the USB device in use.
+*              : When USB_FUNCTION_PIPE0 is specified by the argument, obtains the maximum
+*              : packet size of the USB device using the corresponding pipe.
+*              : For the case that USB_FUNCTION_PIPE0 is not assigned by the argument, when the
+*              : corresponding pipe is in continuous transfer mode,
+*              : obtains the buffer size allocated in the corresponcing pipe,
+*              : when incontinuous transfer, obtains maximum packet size.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : Maximum packet size or buffer size
+*******************************************************************************/
+uint16_t usb0_function_get_buf_size (uint16_t pipe)
+{
+    uint16_t size;
+    uint16_t bufsize;
+
+    if (pipe == USB_FUNCTION_PIPE0)
+    {
+        size = RZA_IO_RegRead_16(&USB200.DCPMAXP,
+                                USB_DCPMAXP_MXPS_SHIFT,
+                                USB_DCPMAXP_MXPS);
+    }
+    else
+    {
+        if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_CNTMD_SHIFT, USB_PIPECFG_CNTMD) == 1)
+        {
+            bufsize = RZA_IO_RegRead_16(&g_usb0_function_pipebuf[pipe], USB_PIPEBUF_BUFSIZE_SHIFT, USB_PIPEBUF_BUFSIZE);
+            size = (uint16_t)((bufsize + 1) * USB_FUNCTION_PIPExBUF);
+        }
+        else
+        {
+            size = RZA_IO_RegRead_16(&g_usb0_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
+        }
+    }
+    return size;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_get_mxps
+* Description  : Obtains maximum packet size of the USB device using the pipe
+*              : specified by the argument.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : Max Packet Size
+*******************************************************************************/
+uint16_t usb0_function_get_mxps (uint16_t pipe)
+{
+    uint16_t size;
+
+    if (pipe == USB_FUNCTION_PIPE0)
+    {
+        size = RZA_IO_RegRead_16(&USB200.DCPMAXP,
+                                USB_DCPMAXP_MXPS_SHIFT,
+                                USB_DCPMAXP_MXPS);
+    }
+    else
+    {
+        size = RZA_IO_RegRead_16(&g_usb0_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
+    }
+    return size;
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_api.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_api.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,441 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_api.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb0_function.h"
+#include "dev_drv.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb0_api_function_init
+* Description  : Initializes the USB module in the USB function mode.
+* Arguments    : uint8_t  int_level ; interruput level
+*              : uint16_t mode      : Speed modes
+*              :                    :  USB_FUCNTION_HIGH_SPEED: High-speed device
+*              :                    :  USB_FUCNTION_FULL_SPEED: Full-speed device
+*              : uint16_t clockmode ; 48MHz ; USBFCLOCK_X1_48MHZ
+*              :                    ; 12MHz ; USBFCLOCK_EXTAL_12MHZ
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb0_api_function_init (uint8_t int_level, uint16_t mode, uint16_t clockmode)
+{
+    volatile uint8_t dummy_buf;
+
+    CPG.STBCR7  &= 0xfd;                        /* The clock of USB0 modules is permitted */
+    dummy_buf   = CPG.STBCR7;                   /* (Dummy read) */
+
+    usb0_function_setting_interrupt(int_level);
+
+    usb0_function_reset_module(clockmode);      /* reset USB module with setting tranciever */
+                                                /* and HSE=1                                */
+
+    usb0_function_init_status();                /* clear variables                          */
+
+    usb0_function_InitModule(mode);             /* select USB Function and Interrupt Enable */
+                                                /* Detect USB Device to attach or detach    */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_api_function_IsConfigured
+* Description  : Checks if the USB device is configured to return the result as
+*              : the return value.
+* Arguments    : none
+* Return Value : DEVDRV_USBF_YES  : Configured & Configured Suspend
+*              : DEVDRV_USBF_NO   : not Configured
+*******************************************************************************/
+uint16_t usb0_api_function_IsConfigured (void)
+{
+    uint16_t dvst;
+
+    dvst = usb0_function_GetDeviceState();
+
+    if ((dvst == USB_FUNCTION_DVST_CONFIGURED) ||
+        (dvst == USB_FUNCTION_DVST_CONFIGURED_SUSPEND))
+    {
+        return DEVDRV_USBF_YES;
+    }
+
+    return DEVDRV_USBF_NO;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_GetDeviceState
+* Description  : Returns the state of USB device.
+* Arguments    : none
+* Return Value : Device States
+*******************************************************************************/
+uint16_t usb0_function_GetDeviceState (void)
+{
+    uint16_t dvsq;
+    uint16_t dvst;
+
+    dvsq = USB200.INTSTS0;
+    switch(dvsq & USB_FUNCTION_BITDVSQ)
+    {
+        case USB_FUNCTION_DS_POWR:                      /* Power state *//* power-on */
+            dvst = USB_FUNCTION_DVST_POWERED;
+        break;
+
+        case USB_FUNCTION_DS_DFLT:                      /* Default state *//* bus-reset */
+            dvst = USB_FUNCTION_DVST_DEFAULT;
+        break;
+
+        case USB_FUNCTION_DS_ADDS:                      /* Address state */
+            dvst = USB_FUNCTION_DVST_ADDRESS;
+        break;
+
+        case USB_FUNCTION_DS_CNFG:                      /* Configured state */
+            dvst = USB_FUNCTION_DVST_CONFIGURED;
+        break;
+
+        case USB_FUNCTION_DS_SPD_CNFG:                  /* Configured Suspend state */
+            dvst = USB_FUNCTION_DVST_CONFIGURED_SUSPEND;
+        break;
+
+        case USB_FUNCTION_DS_SPD_POWR:                  /* Power      Suspend state */
+        case USB_FUNCTION_DS_SPD_DFLT:                  /* Default    Suspend state */
+        case USB_FUNCTION_DS_SPD_ADDR:                  /* Address    Suspend state */
+            dvst = USB_FUNCTION_DVST_SUSPEND;
+        break;
+
+        default:                                        /* error */
+            dvst = USB_FUNCTION_DVST_SUSPEND;
+        break;
+    }
+
+    return dvst;
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_start_receive_transfer
+* Description  : Starts USB data reception using the pipe specified in the argument.
+*              : The FIFO for using is set in the pipe definition table.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data data Address
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    usb0_function_start_receive_transfer(pipe, size, data);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_start_send_transfer
+* Description  : Starts the USB data communication using pipe specified by the argument.
+* Arguments    : uint16_t pipe     ; Pipe Number
+*              : uint32_t size     ; Data Size
+*              : uint8_t *data     ; Data data Address
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb0_api_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t status;
+
+    status = usb0_function_start_send_transfer(pipe, size, data);
+
+    return status;
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_check_pipe_status
+* Description  : Starts USB data reception using the pipe specified in the argument.
+*              : The FIFO for using is set in the pipe definition table.
+* Arguments    : uint16_t  pipe     ; Pipe Number
+*              : uint32_t *size     ; Data Size
+* Return Value : Pipe Status
+*******************************************************************************/
+uint16_t usb0_api_function_check_pipe_status (uint16_t pipe, uint32_t * size)
+{
+    if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_DONE)
+    {
+        *size = g_usb0_function_PipeDataSize[pipe];
+        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+        return DEVDRV_USBF_PIPE_DONE;
+    }
+    else if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_NORES)
+    {
+        *size = 0;
+        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+        return DEVDRV_USBF_PIPE_NORES;
+    }
+    else if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_STALL)
+    {
+        *size = 0;
+        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+        return DEVDRV_USBF_PIPE_STALL;
+    }
+    else if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_FIFOERROR)
+    {
+        *size = 0;
+        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+        return DEVDRV_USBF_FIFOERROR;
+    }
+    else
+    {
+        /* Do Nothing */
+    }
+
+    return g_usb0_function_pipe_status[pipe];
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_clear_pipe_status
+* Description  : Starts USB data reception using the pipe specified in the argument.
+*              : The FIFO for using is set in the pipe definition table.
+* Arguments    : uint16_t  pipe     ; Pipe Number
+* Return Value : Pipe Status
+*******************************************************************************/
+void usb0_api_function_clear_pipe_status (uint16_t pipe)
+{
+    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
+    g_usb0_function_PipeDataSize[pipe] = 0;
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_set_pid_buf
+* Description  : Enables communicaqtion in the pipe specified by the argument
+*              : (BUF).
+* Arguments    : uint16_t pipe             ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_set_pid_buf (uint16_t pipe)
+{
+    usb0_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_set_pid_nak
+* Description  : Disables communication (NAK) in the pipe specified by the argument.
+*              : When the pipe status was enabling communication (BUF) before
+*              : executing before executing this function, waits in the software
+*              : until the pipe becomes ready after setting disabled.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_set_pid_nak (uint16_t pipe)
+{
+    usb0_function_set_pid_nak(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_set_pid_stall
+* Description  : Disables communication (STALL) in the pipe specified by the
+*              : argument.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_set_pid_stall (uint16_t pipe)
+{
+    usb0_function_set_pid_stall(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_clear_pid_stall
+* Description  : Disables communication (NAK) in the pipe specified by the argument.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_clear_pid_stall (uint16_t pipe)
+{
+    usb0_function_clear_pid_stall(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_get_pid
+* Description  : Returns the pipe state specified by the argument.
+* Arguments    : uint16_t pipe          ; Pipe Number
+* Return Value : PID
+*******************************************************************************/
+uint16_t usb0_api_function_get_pid (uint16_t pipe)
+{
+    uint16_t pid;
+
+    pid = usb0_function_get_pid(pipe);
+
+    return pid;
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_check_stall
+* Description  :
+* Arguments    : uint16_t pipe          ; Pipe Number
+* Return Value : PID
+*******************************************************************************/
+int32_t usb0_api_function_check_stall (uint16_t pipe)
+{
+    uint16_t pid;
+
+    pid = usb0_function_get_pid(pipe);
+
+    if ((pid & DEVDRV_USBF_PID_STALL) == DEVDRV_USBF_PID_STALL)
+    {
+        return DEVDRV_USBF_STALL;
+    }
+
+    return DEVDRV_SUCCESS;
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_set_sqclr
+* Description  : Sets the sequence bit of the pipe specified by the argument to
+*              : DATA0.
+* Arguments    : uint16_t pipe              ; Pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_set_sqclr (uint16_t pipe)
+{
+    usb0_function_set_sqclr(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_set_sqset
+* Description  : Sets the sequence bit of the pipe specified by the argument to
+*              : DATA1.
+* Arguments    : uint16_t pipe   ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_set_sqset (uint16_t pipe)
+{
+    usb0_function_set_sqset(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_set_csclr
+* Description  : CSPLIT status clear setting of sprit transaction in specified
+*              : pipe is performed.
+*              : When SQSET bit or SQCLR bit, and SQSET bit or SQCLR bit
+*              : in DCPCTR register are continuously changed (when the sequence
+*              : toggle bit of data PID is continuously changed over two or more pipes),
+*              : the access cycle with 120 ns and more than 5 cycle bus clock is necessary.
+*              : Do not set both SQCLR bit and SQSET bit to 1 at the same time.
+*              : In addition, both bits should be operated after PID is set to NAK.
+*              : However, when it is set to the isochronous transfer as the transfer type
+*              : (TYPE=11), writing in SQSET bit is disabled.
+* Arguments    : uint16_t pipe     ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_set_csclr (uint16_t pipe)
+{
+    usb0_function_set_csclr(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_set_curpipe
+* Description  : Allocates FIF0 specifed by the argument in the pipe assigned
+*              : by the argument.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t fifosel   ; Select FIFO
+*              : uint16_t isel      ; FIFO Access Direction
+*              : uint16_t mbw       ; FIFO Port Access Bit Width
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
+{
+    usb0_function_set_curpipe(pipe, fifosel, isel, mbw);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_clear_brdy_sts
+* Description  : Clear BRDY interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_clear_brdy_sts (uint16_t pipe)
+{
+    usb0_function_clear_brdy_sts(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_clear_bemp_sts
+* Description  : Clear BEMP interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_clear_bemp_sts (uint16_t pipe)
+{
+    usb0_function_clear_bemp_sts(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_clear_nrdy_sts
+* Description  : Clear NRDY interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_clear_nrdy_sts (uint16_t pipe)
+{
+    usb0_function_clear_nrdy_sts(pipe);
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_controlrw.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_controlrw.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,142 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_controlrw.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb0_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb0_api_function_CtrlReadStart
+* Description  : Executes the USB control read transfer.
+*              : USB host controller <- USB device
+* Arguments    : uint16_t size     ; Data Size
+*              : uint8_t  *data    ; Data Address
+* Return Value : DEVDRV_USBF_WRITEEND          ; End of data write
+*              : DEVDRV_USBF_WRITESHRT         ; End of short data write
+*              : DEVDRV_USBF_WRITING           ; Continue of data write
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO access error
+*******************************************************************************/
+uint16_t usb0_api_function_CtrlReadStart (uint32_t size, uint8_t * data)
+{
+    uint16_t status;
+    uint16_t mbw;
+
+    usb0_function_set_pid_nak(USB_FUNCTION_PIPE0);
+
+    g_usb0_function_data_count[USB_FUNCTION_PIPE0]   = size;
+    g_usb0_function_data_pointer[USB_FUNCTION_PIPE0] = data;
+
+    mbw = usb0_function_get_mbw(g_usb0_function_data_count[USB_FUNCTION_PIPE0],
+                                 (uint32_t)g_usb0_function_data_pointer[USB_FUNCTION_PIPE0]);
+    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
+    USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;
+
+    status = usb0_function_write_buffer_c(USB_FUNCTION_PIPE0);
+
+    /* Peripheral Control sequence */
+    switch (status)
+    {
+        case DEVDRV_USBF_WRITESHRT:                                     /* End of data write */
+        case DEVDRV_USBF_WRITEEND:                                      /* End of data write (not null) */
+        case DEVDRV_USBF_WRITING:                                       /* Continue of data write */
+            usb0_function_enable_bemp_int(USB_FUNCTION_PIPE0);          /* Enable Empty Interrupt */
+            usb0_function_set_pid_buf(USB_FUNCTION_PIPE0);              /* Set BUF */
+        break;
+
+        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access error */
+        break;
+
+        default:
+        break;
+    }
+
+    return status;                                                      /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_CtrlWriteStart
+* Description  : Executes the USB control write transfer.
+*              : USB host controller -> USB device
+* Arguments    : uint16_t  size         ; Data Size
+*              : uint8_t  *data         ; Data Address
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_CtrlWriteStart (uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb0_function_set_pid_nak(USB_FUNCTION_PIPE0);
+
+    g_usb0_function_data_count[USB_FUNCTION_PIPE0]   = size;
+    g_usb0_function_data_pointer[USB_FUNCTION_PIPE0] = data;
+
+    mbw = usb0_function_get_mbw(g_usb0_function_data_count[USB_FUNCTION_PIPE0],
+                                (uint32_t)g_usb0_function_data_pointer[USB_FUNCTION_PIPE0]);
+    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
+    USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;
+
+    usb0_function_enable_brdy_int(USB_FUNCTION_PIPE0);
+    usb0_function_set_pid_buf(USB_FUNCTION_PIPE0);
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_global.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_global.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,144 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_global.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb0_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+const uint16_t g_usb0_function_bit_set[16] =
+{
+    0x0001, 0x0002, 0x0004, 0x0008,
+    0x0010, 0x0020, 0x0040, 0x0080,
+    0x0100, 0x0200, 0x0400, 0x0800,
+    0x1000, 0x2000, 0x4000, 0x8000
+};
+
+uint32_t g_usb0_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint8_t  * g_usb0_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+uint16_t g_usb0_function_PipeIgnore[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb0_function_PipeTbl[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb0_function_pipe_status[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint32_t g_usb0_function_PipeDataSize[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+USB_FUNCTION_DMA_t g_usb0_function_DmaInfo[2];
+uint16_t g_usb0_function_DmaPipe[2];
+uint16_t g_usb0_function_DmaBval[2];
+uint16_t g_usb0_function_DmaStatus[2];
+
+uint16_t g_usb0_function_CtrZeroLengthFlag;
+
+//uint16_t g_usb0_function_ConfigNum;
+//uint16_t g_usb0_function_Alternate[USB_FUNCTION_ALT_NO];
+//uint16_t g_usb0_function_RemoteWakeupFlag;
+uint16_t g_usb0_function_TestModeFlag;
+uint16_t g_usb0_function_TestModeSelectors;
+
+//uint16_t g_usb0_function_ReqType;
+//uint16_t g_usb0_function_ReqTypeType;
+//uint16_t g_usb0_function_ReqTypeRecip;
+//uint16_t g_usb0_function_ReqRequest;
+//uint16_t g_usb0_function_ReqValue;
+//uint16_t g_usb0_function_ReqIndex;
+//uint16_t g_usb0_function_ReqLength;
+
+//uint16_t g_usb0_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
+
+uint16_t g_usb0_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb0_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb0_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb0_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+
+/*******************************************************************************
+* Function Name: usb0_function_init_status
+* Description  : Initialization USB Sample Driver Variable.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb0_function_init_status (void)
+{
+    uint16_t pipe;
+
+    //g_usb0_function_ConfigNum         = 0;
+    //g_usb0_function_RemoteWakeupFlag  = DEVDRV_USBF_OFF;
+    g_usb0_function_TestModeFlag      = DEVDRV_USBF_OFF;
+    g_usb0_function_CtrZeroLengthFlag = 0;
+
+#if 0
+    usb0_function_clear_alt();
+#endif
+
+    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
+    {
+        g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
+        g_usb0_function_PipeDataSize[pipe] = 0;
+        g_usb0_function_data_count[pipe]   = 0;
+
+        /* pipe configuration in usb0_function_ResetEP() */
+        g_usb0_function_pipecfg[pipe]  = 0;
+        g_usb0_function_pipebuf[pipe]  = 0;
+        g_usb0_function_pipemaxp[pipe] = 0;
+        g_usb0_function_pipeperi[pipe] = 0;
+    }
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_sig.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_sig.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,330 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_sig.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb0_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+static void usb0_function_EnableINTModule(void);
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb0_function_InitModule
+* Description  : Initializes the USB module in the USB function mode.
+* Arguments    : uint16_t mode  ; USB_FUNCTION_HIGH_SPEED ; Hi-Speed Mode
+*              :                ; other                   ; Full-speed Mode
+* Return Value : none
+*******************************************************************************/
+void usb0_function_InitModule (uint16_t mode)
+{
+    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+                        0,
+                        USB_SYSCFG_DCFM_SHIFT,
+                        USB_SYSCFG_DCFM);           /* USB function */
+
+    /* USB module operation enabled     */
+    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+                        1,
+                        USB_SYSCFG_USBE_SHIFT,
+                        USB_SYSCFG_USBE);
+
+    if (mode == USB_FUNCTION_HIGH_SPEED)
+    {
+        RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+                            1,
+                            USB_SYSCFG_HSE_SHIFT,
+                            USB_SYSCFG_HSE);        /* Hi-Speed Mode */
+    }
+    else
+    {
+        RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+                            0,
+                            USB_SYSCFG_HSE_SHIFT,
+                            USB_SYSCFG_HSE);
+    }
+
+    /* for power-on                     */
+    if (usb0_function_CheckVBUStaus() == DEVDRV_USBF_ON)
+    {
+        usb0_function_EnableINTModule();            /* Interrupt Enable         */
+        usb0_function_USB_FUNCTION_Attach();        /* pull-up D+ and open D-   */
+    }
+    else
+    {
+        usb0_function_USB_FUNCTION_Detach();        /* USB Detach               */
+                                                    /* with Interrupt Enable    */
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_CheckVBUStaus
+* Description  : Checks the USB-VBUS state to returns the connection state to
+*              : the USB host.
+* Arguments    : none
+* Return Value : DEVDRV_USBF_ON     :   VBUS ON
+*              : DEVDRV_USBF_OFF    :   VBUS OFF
+*******************************************************************************/
+uint16_t usb0_function_CheckVBUStaus (void)
+{
+    uint16_t buf1;
+    uint16_t buf2;
+    uint16_t buf3;
+
+    /* monitor VBUS pins */
+    do
+    {
+        buf1 = RZA_IO_RegRead_16(&USB200.INTSTS0,
+                                USB_INTSTS0_VBSTS_SHIFT,
+                                USB_INTSTS0_VBSTS);
+        Userdef_USB_usb0_function_delay_10us(1);
+        buf2 = RZA_IO_RegRead_16(&USB200.INTSTS0,
+                                USB_INTSTS0_VBSTS_SHIFT,
+                                USB_INTSTS0_VBSTS);
+        Userdef_USB_usb0_function_delay_10us(1);
+        buf3 = RZA_IO_RegRead_16(&USB200.INTSTS0,
+                                USB_INTSTS0_VBSTS_SHIFT,
+                                USB_INTSTS0_VBSTS);
+    } while ((buf1 != buf2) || (buf2 != buf3));
+
+    if (buf1 == DEVDRV_USBF_OFF)
+    {
+        return DEVDRV_USBF_OFF;         /* detach */
+    }
+
+    return DEVDRV_USBF_ON;              /* attach */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_USB_FUNCTION_Attach
+* Description  : Connects to the USB host controller.
+*              : This function pulls up D+.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb0_function_USB_FUNCTION_Attach (void)
+{
+    Userdef_USB_usb0_function_attach();
+
+    Userdef_USB_usb0_function_delay_xms(10);
+
+    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+                        1,
+                        USB_SYSCFG_DPRPU_SHIFT,
+                        USB_SYSCFG_DPRPU);      /* Pull-up D+ and open D- */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_USB_FUNCTION_Detach
+* Description  : Disconnects from the USB host controller.
+*              : This function opens D+/D-.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb0_function_USB_FUNCTION_Detach (void)
+{
+    uint16_t pipe;
+
+    Userdef_USB_usb0_function_detach();
+
+    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
+    {
+        if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_IDLE)
+        {
+            usb0_function_stop_transfer(pipe);
+        }
+    }
+
+    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+                        0,
+                        USB_SYSCFG_DPRPU_SHIFT,
+                        USB_SYSCFG_DPRPU);                  /* open D+ and D- */
+
+    /* Detach Recovery */
+    Userdef_USB_usb0_function_delay_500ns();                /* need 1us=500ns * 2 wait */
+    Userdef_USB_usb0_function_delay_500ns();
+
+    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+                        1,
+                        USB_SYSCFG_DCFM_SHIFT,
+                        USB_SYSCFG_DCFM);
+    Userdef_USB_usb0_function_delay_500ns();                /* need 100ns wait but 500ns S/W wait */
+
+    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+                        0,
+                        USB_SYSCFG_DCFM_SHIFT,
+                        USB_SYSCFG_DCFM);
+
+    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+                        0,
+                        USB_SYSCFG_USBE_SHIFT,
+                        USB_SYSCFG_USBE);       /* soft reset module */
+    Userdef_USB_usb0_function_delay_500ns();
+
+    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+                        1,
+                        USB_SYSCFG_USBE_SHIFT,
+                        USB_SYSCFG_USBE);
+
+    usb0_function_EnableINTModule();            /* Interrupt Enable */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_USB_FUNCTION_BusReset
+* Description  : This function is executed when the USB device is transitioned
+*              : to POWERD_STATE. Sets the device descriptor according to the
+*              : connection speed determined by the USB reset hand shake.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+#if 0	/*The USBHAL in mbed does not need this function*/
+void usb0_function_USB_FUNCTION_BusReset (void)
+{
+    usb0_function_init_status();                                    /* memory clear */
+
+    if (usb0_function_is_hispeed() == USB_FUNCTION_HIGH_SPEED)
+    {
+        usb0_function_ResetDescriptor(USB_FUNCTION_HIGH_SPEED);     /* Device Descriptor reset */
+    }
+    else
+    {
+        usb0_function_ResetDescriptor(USB_FUNCTION_FULL_SPEED);     /* Device Descriptor reset */
+    }
+
+    usb0_function_ResetDCP();                                       /* Default Control PIPE reset */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_USB_FUNCTION_Resume
+* Description  : This function is executed when the USB device detects a resume
+*              : signal.
+*              : The USB sample driver does not operate for this function.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+#if 0	/*The USBHAL in mbed does not need this function*/
+void usb0_function_USB_FUNCTION_Resume (void)
+{
+    /* NOP */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_USB_FUNCTION_Suspend
+* Description  : This function is executed when the USB device detects a suspend
+*              : signal.
+*              : The USB sample driver does not operate for this function.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+#if 0	/*The USBHAL in mbed does not need this function*/
+void usb0_function_USB_FUNCTION_Suspend (void)
+{
+    /* NOP */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_USB_FUNCTION_TestMode
+* Description  : This function is executed when the USB device is transitioned U
+*              : to TEST_MODE by the USB standard request.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb0_function_USB_FUNCTION_TestMode (void)
+{
+    switch (g_usb0_function_TestModeSelectors & USB_FUNCTION_FUNCTION_TEST_SELECT)
+    {
+        case USB_FUNCTION_FUNCTION_TEST_J:
+        case USB_FUNCTION_FUNCTION_TEST_K:
+        case USB_FUNCTION_FUNCTION_TEST_SE0_NAK:
+        case USB_FUNCTION_FUNCTION_TEST_PACKET:
+            RZA_IO_RegWrite_16(&USB200.TESTMODE,
+                                (g_usb0_function_TestModeSelectors >> 8),
+                                USB_TESTMODE_UTST_SHIFT,
+                                USB_TESTMODE_UTST);
+        break;
+
+        case USB_FUNCTION_FUNCTION_TEST_FORCE_ENABLE:
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_EnableINTModule
+* Description  : Enables USB interrupt.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_EnableINTModule (void)
+{
+    uint16_t buf;
+
+    buf  = USB200.INTENB0;
+    buf |= (USB_FUNCTION_BITVBSE | USB_FUNCTION_BITDVSE | USB_FUNCTION_BITCTRE |
+             USB_FUNCTION_BITBEMPE | USB_FUNCTION_BITNRDYE | USB_FUNCTION_BITBRDYE);
+    USB200.INTENB0 = buf;
+
+    usb0_function_enable_bemp_int(USB_FUNCTION_PIPE0);
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_sub.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_sub.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,453 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_sub.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb0_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+#if 0
+extern const uint16_t *g_usb0_function_EndPntPtr[];
+extern uint8_t         g_usb0_function_DeviceDescriptor[];
+extern uint8_t        *g_usb0_function_ConfigurationPtr[];
+#endif
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb0_function_ResetDCP
+* Description  : Initializes the default control pipe(DCP).
+* Outline      : Reset default control pipe
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb0_function_ResetDCP (void)
+{
+    USB200.DCPCFG  = 0;
+#if 0
+    USB200.DCPMAXP = g_usb0_function_DeviceDescriptor[7];
+#else
+    USB200.DCPMAXP = 64;
+#endif
+
+    USB200.CFIFOSEL  = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+    USB200.D0FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+    USB200.D1FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_ResetEP
+* Description  : Initializes the end point.
+* Arguments    : uint16_t num          ; Configuration Number
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb0_function_ResetEP (uint16_t num)
+{
+    uint16_t   pipe;
+    uint16_t   ep;
+    uint16_t   index;
+    uint16_t   buf;
+    uint16_t * tbl;
+
+    tbl = (uint16_t *)(g_usb0_function_EndPntPtr[num - 1]);
+
+    for (ep = 1; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
+    {
+        if (g_usb0_function_EPTableIndex[ep] != USB_FUNCTION_EP_ERROR)
+        {
+            index = (uint16_t)(USB_FUNCTION_EPTABLE_LENGTH * g_usb0_function_EPTableIndex[ep]);
+            pipe  = (uint16_t)(tbl[index + 0] & USB_FUNCTION_BITCURPIPE);
+
+            g_usb0_function_PipeTbl[pipe] = (uint16_t)( ((tbl[index + 1] & USB_FUNCTION_DIRFIELD) << 3) |
+                                                         ep                                             |
+                                                         (tbl[index + 0] & USB_FUNCTION_FIFO_USE)          );
+
+            if ((tbl[index + 1] & USB_FUNCTION_DIRFIELD) == USB_FUNCTION_DIR_P_OUT)
+            {
+                tbl[index + 1] |= USB_FUNCTION_SHTNAKON;
+#ifdef  __USB_DMA_BFRE_ENABLE__
+                /* this routine cannnot be perfomred if read operation is executed in buffer size */
+                if (((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA) ||
+                    ((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA))
+                {
+                    tbl[index + 1] |= USB_FUNCTION_BFREON;
+                }
+#endif
+            }
+
+            /* Interrupt Disable */
+            buf  = USB200.BRDYENB;
+            buf &= (uint16_t)~g_usb0_function_bit_set[pipe];
+            USB200.BRDYENB = buf;
+            buf  = USB200.NRDYENB;
+            buf &= (uint16_t)~g_usb0_function_bit_set[pipe];
+            USB200.NRDYENB = buf;
+            buf  = USB200.BEMPENB;
+            buf &= (uint16_t)~g_usb0_function_bit_set[pipe];
+            USB200.BEMPENB = buf;
+
+            usb0_function_set_pid_nak(pipe);
+
+            /* CurrentPIPE Clear */
+            if (RZA_IO_RegRead_16(&USB200.CFIFOSEL,
+                                    USB_CFIFOSEL_CURPIPE_SHIFT,
+                                    USB_CFIFOSEL_CURPIPE) == pipe)
+            {
+                RZA_IO_RegWrite_16(&USB200.CFIFOSEL,
+                                    0,
+                                    USB_CFIFOSEL_CURPIPE_SHIFT,
+                                    USB_CFIFOSEL_CURPIPE);
+            }
+
+            if (RZA_IO_RegRead_16(&USB200.D0FIFOSEL,
+                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
+                                    USB_DnFIFOSEL_CURPIPE) == pipe)
+            {
+                RZA_IO_RegWrite_16(&USB200.D0FIFOSEL,
+                                    0,
+                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
+                                    USB_DnFIFOSEL_CURPIPE);
+            }
+
+            if (RZA_IO_RegRead_16(&USB200.D1FIFOSEL,
+                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
+                                    USB_DnFIFOSEL_CURPIPE) == pipe)
+            {
+                RZA_IO_RegWrite_16(&USB200.D1FIFOSEL,
+                                    0,
+                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
+                                    USB_DnFIFOSEL_CURPIPE);
+            }
+
+            /* PIPE Configuration */
+            USB200.PIPESEL  = pipe;
+            USB200.PIPECFG  = tbl[index + 1];
+            USB200.PIPEBUF  = tbl[index + 2];
+            USB200.PIPEMAXP = tbl[index + 3];
+            USB200.PIPEPERI = tbl[index + 4];
+
+            g_usb0_function_pipecfg[pipe]  = tbl[index + 1];
+            g_usb0_function_pipebuf[pipe]  = tbl[index + 2];
+            g_usb0_function_pipemaxp[pipe] = tbl[index + 3];
+            g_usb0_function_pipeperi[pipe] = tbl[index + 4];
+
+            /* Buffer Clear */
+            usb0_function_set_sqclr(pipe);
+            usb0_function_aclrm(pipe);
+
+            /* init Global */
+            g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
+            g_usb0_function_PipeDataSize[pipe] = 0;
+        }
+    }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_EpToPipe
+* Description  : Returns the pipe which end point specified by the argument is
+*              : allocated to.
+* Arguments    : uint16_t ep       ; Direction + Endpoint Number
+* Return Value : USB_FUNCTION_EP_ERROR         : Error
+*              : Others           : Pipe Number
+*******************************************************************************/
+uint16_t usb0_function_EpToPipe (uint16_t ep)
+{
+    uint16_t pipe;
+
+    for (pipe = 1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+    {
+        if ((g_usb0_function_PipeTbl[pipe] & 0x00ff) == ep)
+        {
+            return pipe;
+        }
+    }
+
+    return USB_FUNCTION_EP_ERROR;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_InitEPTable
+* Description  : Sets the end point by the Alternate setting value of the
+*              : configuration number and the interface number specified by the
+*              : argument.
+* Arguments    : uint16_t Con_Num       ; Configuration Number
+*              : uint16_t Int_Num       ; Interface Number
+*              : uint16_t Alt_Num       ; Alternate Setting
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb0_function_InitEPTable (uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num)
+{
+    uint8_t  * ptr;
+    uint16_t   point_interface;
+    uint16_t   point_endpoint;
+    uint16_t   length;
+    uint16_t   start;
+    uint16_t   numbers;
+    uint16_t   endpoint;
+
+    ptr = (uint8_t *)g_usb0_function_ConfigurationPtr[Con_Num - 1];
+    point_interface = *ptr;
+    length = (uint16_t)((uint16_t)*(ptr + 3) << 8 | (uint16_t)*(ptr + 2));
+    ptr  += *ptr;
+    start   = 0;
+    numbers = 0;
+    point_endpoint = 0;
+
+    for (; point_interface < length;)
+    {
+        switch (*(ptr + 1))                                     /* Descriptor Type ? */
+        {
+            case USB_FUNCTION_DT_INTERFACE:                     /* Interface */
+                if ((*(ptr + 2) == Int_Num) && (*(ptr + 3) == Alt_Num))
+                {
+                    numbers = *(ptr + 4);
+                }
+                else
+                {
+                    start  += *(ptr + 4);
+                }
+                point_interface += *ptr;
+                ptr += *ptr;
+            break;
+
+            case USB_FUNCTION_DT_ENDPOINT:                      /* Endpoint */
+                if (point_endpoint < numbers)
+                {
+                    endpoint = (uint16_t)(*(ptr + 2) & 0x0f);
+                    g_usb0_function_EPTableIndex[endpoint] = (uint16_t)(start + point_endpoint);
+                    ++point_endpoint;
+                }
+                point_interface += *ptr;
+                ptr += *ptr;
+            break;
+
+            case USB_FUNCTION_DT_DEVICE:                        /* Device */
+            case USB_FUNCTION_DT_CONFIGURATION:                 /* Configuration */
+            case USB_FUNCTION_DT_STRING:                        /* String */
+            default:                                            /* Class, Vendor, else */
+                point_interface += *ptr;
+                ptr += *ptr;
+            break;
+        }
+    }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_GetConfigNum
+* Description  : Returns the number of configuration referring to the number of
+*              : configuration described in the device descriptor.
+* Arguments    : none
+* Return Value : Number of possible configurations (bNumConfigurations).
+*******************************************************************************/
+#if 0
+uint16_t usb0_function_GetConfigNum (void)
+{
+    return (uint16_t)g_usb0_function_DeviceDescriptor[17];
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_GetInterfaceNum
+* Description  : Returns the number of interface referring to the number of
+*              : interface described in the configuration descriptor.
+* Arguments    : uint16_t num       ; Configuration Number
+* Return Value : Number of this interface (bNumInterfaces).
+*******************************************************************************/
+#if 0
+uint16_t usb0_function_GetInterfaceNum (uint16_t num)
+{
+    return (uint16_t)(*(g_usb0_function_ConfigurationPtr[num - 1] + 4));
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_GetAltNum
+* Description  : Returns the Alternate setting value of the configuration number
+*              : and the interface number specified by the argument.
+* Arguments    : uint16_t Con_Num       ; Configuration Number
+*              : uint16_t Int_Num       ; Interface Number
+* Return Value : Value used to select this alternate setting(bAlternateSetting).
+*******************************************************************************/
+#if 0
+uint16_t usb0_function_GetAltNum (uint16_t Con_Num, uint16_t Int_Num)
+{
+    uint8_t  * ptr;
+    uint16_t   point;
+    uint16_t   alt_num = 0;
+    uint16_t   length;
+
+    ptr = (uint8_t *)(g_usb0_function_ConfigurationPtr[Con_Num - 1]);
+    point = ptr[0];
+    ptr  += ptr[0];                                 /* InterfaceDescriptor[0] */
+    length  = (uint16_t)(*(g_usb0_function_ConfigurationPtr[Con_Num - 1] + 2));
+    length |= (uint16_t)((uint16_t)(*(g_usb0_function_ConfigurationPtr[Con_Num - 1] + 3)) << 8);
+
+    for (; point < length;)                                 /* Search Descriptor Table size */
+    {
+        switch (ptr[1])                                     /* Descriptor Type ? */
+        {
+            case USB_FUNCTION_DT_INTERFACE:                 /* Interface */
+                if (Int_Num == ptr[2])
+                {
+                    alt_num = (uint16_t)ptr[3];             /* Alternate Number count */
+                }
+                point += ptr[0];
+                ptr += ptr[0];
+            break;
+
+            case USB_FUNCTION_DT_DEVICE:                    /* Device */
+            case USB_FUNCTION_DT_CONFIGURATION:             /* Configuration */
+            case USB_FUNCTION_DT_STRING:                    /* String */
+            case USB_FUNCTION_DT_ENDPOINT:                  /* Endpoint */
+            default:                                        /* Class, Vendor, else */
+                point += ptr[0];
+                ptr   += ptr[0];
+            break;
+        }
+    }
+    return alt_num;
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_CheckRemoteWakeup
+* Description  : Returns the result of the remote wake up function is supported
+*              : or not referring to the configuration descriptor.
+* Arguments    : none
+* Return Value : DEVDRV_USBF_ON     :   Support Remote Wakeup
+*              : DEVDRV_USBF_OFF    :   not Support Remote Wakeup
+*******************************************************************************/
+#if 0
+uint16_t usb0_function_CheckRemoteWakeup (void)
+{
+    uint8_t atr;
+
+    if (g_usb0_function_ConfigNum == 0)
+    {
+        return DEVDRV_USBF_OFF;
+    }
+
+    atr = *(g_usb0_function_ConfigurationPtr[g_usb0_function_ConfigNum - 1] + 7);
+
+    if (atr & USB_FUNCTION_CF_RWUP)
+    {
+        return DEVDRV_USBF_ON;
+    }
+
+    return DEVDRV_USBF_OFF;
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_alt
+* Description  : Initializes the Alternate setting area.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb0_function_clear_alt (void)
+{
+    int i;
+
+    for (i = 0; i < USB_FUNCTION_ALT_NO; ++i)
+    {
+        g_usb0_function_Alternate[i] = 0;                           /* Alternate */
+    }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_pipe_tbl
+* Description  : Initializes pipe definition table.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb0_function_clear_pipe_tbl (void)
+{
+    int pipe;
+
+    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
+    {
+        g_usb0_function_PipeTbl[pipe] = 0;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_ep_table_index
+* Description  : Initializes the end point table index.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb0_function_clear_ep_table_index (void)
+{
+    int ep;
+
+    for (ep = 0; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
+    {
+        g_usb0_function_EPTableIndex[ep] = USB_FUNCTION_EP_ERROR;
+    }
+}
+#endif
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/userdef/usb0_function_dmacdrv.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/userdef/usb0_function_dmacdrv.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,698 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_dmacdrv.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include <stdio.h>
+#include "r_typedefs.h"
+#include "iodefine.h"
+#include "rza_io_regrw.h"
+#include "usb0_function_dmacdrv.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+#define DMAC_INDEFINE   (255)       /* Macro definition when REQD bit is not used */
+
+/* ==== Request setting information for on-chip peripheral module ==== */
+typedef enum dmac_peri_req_reg_type
+{
+    DMAC_REQ_MID,
+    DMAC_REQ_RID,
+    DMAC_REQ_AM,
+    DMAC_REQ_LVL,
+    DMAC_REQ_REQD
+} dmac_peri_req_reg_type_t;
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+/* ==== Prototype declaration ==== */
+
+/* ==== Global variable ==== */
+/* On-chip peripheral module request setting table */
+static const uint8_t usb0_function_dmac_peri_req_init_table[8][5] =
+{
+    /* MID,RID,AM,LVL,REQD */
+    {32, 3, 2, 1, 1},    /* USB_0 channel 0 transmit FIFO empty */
+    {32, 3, 2, 1, 0},    /* USB_0 channel 0 receive FIFO full   */
+    {33, 3, 2, 1, 1},    /* USB_0 channel 1 transmit FIFO empty */
+    {33, 3, 2, 1, 0},    /* USB_0 channel 1 receive FIFO full   */
+    {34, 3, 2, 1, 1},    /* USB_1 channel 0 transmit FIFO empty */
+    {34, 3, 2, 1, 0},    /* USB_1 channel 0 receive FIFO full   */
+    {35, 3, 2, 1, 1},    /* USB_1 channel 1 transmit FIFO empty */
+    {35, 3, 2, 1, 0},    /* USB_1 channel 1 receive FIFO full   */
+};
+
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC1_PeriReqInit
+* Description  : Sets the register mode for DMA mode and the on-chip peripheral
+*              : module request for transfer request for DMAC channel 1.
+*              : Executes DMAC initial setting using the DMA information
+*              : specified by the argument *trans_info and the enabled/disabled
+*              : continuous transfer specified by the argument continuation.
+*              : Registers DMAC channel 1 interrupt handler function and sets
+*              : the interrupt priority level. Then enables transfer completion
+*              : interrupt.
+* Arguments    : dmac_transinfo_t *trans_info   : Setting information to DMAC register
+*              : uint32_t          dmamode      : DMA mode (only for DMAC_MODE_REGISTER)
+*              : uint32_t          continuation : Set continuous transfer to be valid
+*              :                                  after DMA transfer has been completed
+*              :             DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
+*              :             DMAC_SAMPLE_SINGLE       : Do not execute continuous transfer
+*              : uint32_t request_factor        : Factor for on-chip peripheral module request
+*              :             DMAC_REQ_OSTM0TINT       : OSTM_0 compare match
+*              :             DMAC_REQ_OSTM1TINT       : OSTM_1 compare match
+*              :             DMAC_REQ_TGI0A           : MTU2_0 input capture/compare match
+*              :                  :
+*              : uint32_t          req_direction: Setting value of CHCFG_n register REQD bit
+* Return Value : none
+*******************************************************************************/
+void usb0_function_DMAC1_PeriReqInit (const dmac_transinfo_t * trans_info,
+                                      uint32_t dmamode, uint32_t continuation,
+                                      uint32_t request_factor, uint32_t req_direction)
+{
+    /* ==== Register mode ==== */
+    if (DMAC_MODE_REGISTER == dmamode)
+    {
+        /* ==== Next0 register set ==== */
+        DMAC1.N0SA_n = trans_info->src_addr;        /* Start address of transfer source      */
+        DMAC1.N0DA_n = trans_info->dst_addr;        /* Start address of transfer destination */
+        DMAC1.N0TB_n = trans_info->count;           /* Total transfer byte count             */
+
+        /* DAD : Transfer destination address counting direction */
+        /* SAD : Transfer source address counting direction      */
+        /* DDS : Transfer destination transfer size              */
+        /* SDS : Transfer source transfer size                   */
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            trans_info->daddr_dir,
+                            DMAC1_CHCFG_n_DAD_SHIFT,
+                            DMAC1_CHCFG_n_DAD);
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            trans_info->saddr_dir,
+                            DMAC1_CHCFG_n_SAD_SHIFT,
+                            DMAC1_CHCFG_n_SAD);
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            trans_info->dst_size,
+                            DMAC1_CHCFG_n_DDS_SHIFT,
+                            DMAC1_CHCFG_n_DDS);
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            trans_info->src_size,
+                            DMAC1_CHCFG_n_SDS_SHIFT,
+                            DMAC1_CHCFG_n_SDS);
+
+        /* DMS  : Register mode                            */
+        /* RSEL : Select Next0 register set                */
+        /* SBE  : No discharge of buffer data when aborted */
+        /* DEM  : No DMA interrupt mask                    */
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            0,
+                            DMAC1_CHCFG_n_DMS_SHIFT,
+                            DMAC1_CHCFG_n_DMS);
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            0,
+                            DMAC1_CHCFG_n_RSEL_SHIFT,
+                            DMAC1_CHCFG_n_RSEL);
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            0,
+                            DMAC1_CHCFG_n_SBE_SHIFT,
+                            DMAC1_CHCFG_n_SBE);
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            0,
+                            DMAC1_CHCFG_n_DEM_SHIFT,
+                            DMAC1_CHCFG_n_DEM);
+
+        /* ---- Continuous transfer ---- */
+        if (DMAC_SAMPLE_CONTINUATION == continuation)
+        {
+            /* REN : Execute continuous transfer                         */
+            /* RSW : Change register set when DMA transfer is completed. */
+            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                                1,
+                                DMAC1_CHCFG_n_REN_SHIFT,
+                                DMAC1_CHCFG_n_REN);
+            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                                1,
+                                DMAC1_CHCFG_n_RSW_SHIFT,
+                                DMAC1_CHCFG_n_RSW);
+        }
+        /* ---- Single transfer ---- */
+        else
+        {
+            /* REN : Do not execute continuous transfer                         */
+            /* RSW : Do not change register set when DMA transfer is completed. */
+            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                                0,
+                                DMAC1_CHCFG_n_REN_SHIFT,
+                                DMAC1_CHCFG_n_REN);
+            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                                0,
+                                DMAC1_CHCFG_n_RSW_SHIFT,
+                                DMAC1_CHCFG_n_RSW);
+        }
+
+        /* TM  : Single transfer                          */
+        /* SEL : Channel setting                          */
+        /* HIEN, LOEN : On-chip peripheral module request */
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            0,
+                            DMAC1_CHCFG_n_TM_SHIFT,
+                            DMAC1_CHCFG_n_TM);
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            1,
+                            DMAC1_CHCFG_n_SEL_SHIFT,
+                            DMAC1_CHCFG_n_SEL);
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            1,
+                            DMAC1_CHCFG_n_HIEN_SHIFT,
+                            DMAC1_CHCFG_n_HIEN);
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            0,
+                            DMAC1_CHCFG_n_LOEN_SHIFT,
+                            DMAC1_CHCFG_n_LOEN);
+
+        /* ---- Set factor by specified on-chip peripheral module request ---- */
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
+                            DMAC1_CHCFG_n_AM_SHIFT,
+                            DMAC1_CHCFG_n_AM);
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
+                            DMAC1_CHCFG_n_LVL_SHIFT,
+                            DMAC1_CHCFG_n_LVL);
+
+        if (usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
+        {
+            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                                usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
+                                DMAC1_CHCFG_n_REQD_SHIFT,
+                                DMAC1_CHCFG_n_REQD);
+        }
+        else
+        {
+            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                                req_direction,
+                                DMAC1_CHCFG_n_REQD_SHIFT,
+                                DMAC1_CHCFG_n_REQD);
+        }
+
+        RZA_IO_RegWrite_32(&DMAC01.DMARS,
+                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
+                            DMAC01_DMARS_CH1_RID_SHIFT,
+                            DMAC01_DMARS_CH1_RID);
+        RZA_IO_RegWrite_32(&DMAC01.DMARS,
+                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
+                            DMAC01_DMARS_CH1_MID_SHIFT,
+                            DMAC01_DMARS_CH1_MID);
+
+        /* PR : Round robin mode */
+        RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
+                            1,
+                            DMAC07_DCTRL_0_7_PR_SHIFT,
+                            DMAC07_DCTRL_0_7_PR);
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC1_Open
+* Description  : Enables DMAC channel 1 transfer.
+* Arguments    : uint32_t req : DMAC request mode
+* Return Value :  0 : Succeeded in enabling DMA transfer
+*              : -1 : Failed to enable DMA transfer (due to DMA operation)
+*******************************************************************************/
+int32_t usb0_function_DMAC1_Open (uint32_t req)
+{
+    int32_t ret;
+    volatile uint8_t dummy;
+
+    /* Transferable? */
+    if ((0 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
+                                DMAC1_CHSTAT_n_EN_SHIFT,
+                                DMAC1_CHSTAT_n_EN)) &&
+        (0 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
+                                DMAC1_CHSTAT_n_TACT_SHIFT,
+                                DMAC1_CHSTAT_n_TACT)))
+    {
+        /* Clear Channel Status Register */
+        RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
+                            1,
+                            DMAC1_CHCTRL_n_SWRST_SHIFT,
+                            DMAC1_CHCTRL_n_SWRST);
+        dummy = RZA_IO_RegRead_32(&DMAC1.CHCTRL_n,
+                                DMAC1_CHCTRL_n_SWRST_SHIFT,
+                                DMAC1_CHCTRL_n_SWRST);
+        /* Enable DMA transfer */
+        RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
+                            1,
+                            DMAC1_CHCTRL_n_SETEN_SHIFT,
+                            DMAC1_CHCTRL_n_SETEN);
+
+        /* ---- Request by software ---- */
+        if (DMAC_REQ_MODE_SOFT == req)
+        {
+            /* DMA transfer Request by software */
+            RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
+                                1,
+                                DMAC1_CHCTRL_n_STG_SHIFT,
+                                DMAC1_CHCTRL_n_STG);
+        }
+
+        ret = 0;
+    }
+    else
+    {
+        ret = -1;
+    }
+
+    return ret;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC1_Close
+* Description  : Aborts DMAC channel 1 transfer. Returns the remaining transfer
+*              : byte count at the time of DMA transfer abort to the argument
+*              : *remain.
+* Arguments    : uint32_t * remain : Remaining transfer byte count when
+*              :                   : DMA transfer is aborted
+* Return Value : none
+*******************************************************************************/
+void usb0_function_DMAC1_Close (uint32_t * remain)
+{
+
+    /* ==== Abort transfer ==== */
+    RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
+                        1,
+                        DMAC1_CHCTRL_n_CLREN_SHIFT,
+                        DMAC1_CHCTRL_n_CLREN);
+
+    while (1 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
+                                DMAC1_CHSTAT_n_TACT_SHIFT,
+                                DMAC1_CHSTAT_n_TACT))
+    {
+        /* Loop until transfer is aborted */
+    }
+
+    while (1 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
+                                DMAC1_CHSTAT_n_EN_SHIFT,
+                                DMAC1_CHSTAT_n_EN))
+    {
+        /* Loop until 0 is set in EN before checking the remaining transfer byte count */
+    }
+    /* ==== Obtain remaining transfer byte count ==== */
+    *remain = DMAC1.CRTB_n;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC1_Load_Set
+* Description  : Sets the transfer source address, transfer destination
+*              : address, and total transfer byte count respectively
+*              : specified by the argument src_addr, dst_addr, and count to
+*              : DMAC channel 1 as DMA transfer information.
+*              : Sets the register set selected by the CHCFG_n register
+*              : RSEL bit from the Next0 or Next1 register set.
+*              : This function should be called when DMA transfer of DMAC
+*              : channel 1 is aboted.
+* Arguments    : uint32_t src_addr : Transfer source address
+*              : uint32_t dst_addr : Transfer destination address
+*              : uint32_t count    : Total transfer byte count
+* Return Value : none
+*******************************************************************************/
+void usb0_function_DMAC1_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
+{
+    uint8_t reg_set;
+
+    /* Obtain register set in use */
+    reg_set = RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
+                                DMAC1_CHSTAT_n_SR_SHIFT,
+                                DMAC1_CHSTAT_n_SR);
+
+    /* ==== Load ==== */
+    if (0 == reg_set)
+    {
+        /* ---- Next0 Register Set ---- */
+        DMAC1.N0SA_n = src_addr;    /* Start address of transfer source      */
+        DMAC1.N0DA_n = dst_addr;    /* Start address of transfer destination */
+        DMAC1.N0TB_n = count;       /* Total transfer byte count             */
+    }
+    else
+    {
+        /* ---- Next1 Register Set ---- */
+        DMAC1.N1SA_n = src_addr;    /* Start address of transfer source      */
+        DMAC1.N1DA_n = dst_addr;    /* Start address of transfer destination */
+        DMAC1.N1TB_n = count;       /* Total transfer byte count             */
+     }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC2_PeriReqInit
+* Description  : Sets the register mode for DMA mode and the on-chip peripheral
+*              : module request for transfer request for DMAC channel 2.
+*              : Executes DMAC initial setting using the DMA information
+*              : specified by the argument *trans_info and the enabled/disabled
+*              : continuous transfer specified by the argument continuation.
+*              : Registers DMAC channel 2 interrupt handler function and sets
+*              : the interrupt priority level. Then enables transfer completion
+*              : interrupt.
+* Arguments    : dmac_transinfo_t * trans_info : Setting information to DMAC
+*              :                               : register
+*              : uint32_t dmamode      : DMA mode (only for DMAC_MODE_REGISTER)
+*              : uint32_t continuation : Set continuous transfer to be valid
+*              :                       : after DMA transfer has been completed
+*              :         DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
+*              :         DMAC_SAMPLE_SINGLE       : Do not execute continuous
+*              :                                  : transfer
+*              : uint32_t request_factor : Factor for on-chip peripheral module
+*              :                         : request
+*              :         DMAC_REQ_OSTM0TINT : OSTM_0 compare match
+*              :         DMAC_REQ_OSTM1TINT : OSTM_1 compare match
+*              :         DMAC_REQ_TGI0A     : MTU2_0 input capture/compare match
+*              :                 :
+*              : uint32_t req_direction : Setting value of CHCFG_n register
+*              :                        : REQD bit
+*******************************************************************************/
+void usb0_function_DMAC2_PeriReqInit (const dmac_transinfo_t * trans_info,
+                                      uint32_t dmamode, uint32_t continuation,
+                                      uint32_t request_factor, uint32_t req_direction)
+{
+    /* ==== Register mode ==== */
+    if (DMAC_MODE_REGISTER == dmamode)
+    {
+        /* ==== Next0 register set ==== */
+        DMAC2.N0SA_n = trans_info->src_addr;        /* Start address of transfer source      */
+        DMAC2.N0DA_n = trans_info->dst_addr;        /* Start address of transfer destination */
+        DMAC2.N0TB_n = trans_info->count;           /* Total transfer byte count             */
+
+        /* DAD : Transfer destination address counting direction */
+        /* SAD : Transfer source address counting direction      */
+        /* DDS : Transfer destination transfer size              */
+        /* SDS : Transfer source transfer size                   */
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            trans_info->daddr_dir,
+                            DMAC2_CHCFG_n_DAD_SHIFT,
+                            DMAC2_CHCFG_n_DAD);
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            trans_info->saddr_dir,
+                            DMAC2_CHCFG_n_SAD_SHIFT,
+                            DMAC2_CHCFG_n_SAD);
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            trans_info->dst_size,
+                            DMAC2_CHCFG_n_DDS_SHIFT,
+                            DMAC2_CHCFG_n_DDS);
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            trans_info->src_size,
+                            DMAC2_CHCFG_n_SDS_SHIFT,
+                            DMAC2_CHCFG_n_SDS);
+
+        /* DMS  : Register mode                            */
+        /* RSEL : Select Next0 register set                */
+        /* SBE  : No discharge of buffer data when aborted */
+        /* DEM  : No DMA interrupt mask                    */
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            0,
+                            DMAC2_CHCFG_n_DMS_SHIFT,
+                            DMAC2_CHCFG_n_DMS);
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            0,
+                            DMAC2_CHCFG_n_RSEL_SHIFT,
+                            DMAC2_CHCFG_n_RSEL);
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            0,
+                            DMAC2_CHCFG_n_SBE_SHIFT,
+                            DMAC2_CHCFG_n_SBE);
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            0,
+                            DMAC2_CHCFG_n_DEM_SHIFT,
+                            DMAC2_CHCFG_n_DEM);
+
+        /* ---- Continuous transfer ---- */
+        if (DMAC_SAMPLE_CONTINUATION == continuation)
+        {
+            /* REN : Execute continuous transfer                         */
+            /* RSW : Change register set when DMA transfer is completed. */
+            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                                1,
+                                DMAC2_CHCFG_n_REN_SHIFT,
+                                DMAC2_CHCFG_n_REN);
+            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                                1,
+                                DMAC2_CHCFG_n_RSW_SHIFT,
+                                DMAC2_CHCFG_n_RSW);
+        }
+        /* ---- Single transfer ---- */
+        else
+        {
+            /* REN : Do not execute continuous transfer                         */
+            /* RSW : Do not change register set when DMA transfer is completed. */
+            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                                0,
+                                DMAC2_CHCFG_n_REN_SHIFT,
+                                DMAC2_CHCFG_n_REN);
+            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                                0,
+                                DMAC2_CHCFG_n_RSW_SHIFT,
+                                DMAC2_CHCFG_n_RSW);
+        }
+
+        /* TM  : Single transfer                          */
+        /* SEL : Channel setting                          */
+        /* HIEN, LOEN : On-chip peripheral module request */
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            0,
+                            DMAC2_CHCFG_n_TM_SHIFT,
+                            DMAC2_CHCFG_n_TM);
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            2,
+                            DMAC2_CHCFG_n_SEL_SHIFT,
+                            DMAC2_CHCFG_n_SEL);
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            1,
+                            DMAC2_CHCFG_n_HIEN_SHIFT,
+                            DMAC2_CHCFG_n_HIEN);
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            0,
+                            DMAC2_CHCFG_n_LOEN_SHIFT,
+                            DMAC2_CHCFG_n_LOEN);
+
+        /* ---- Set factor by specified on-chip peripheral module request ---- */
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
+                            DMAC2_CHCFG_n_AM_SHIFT,
+                            DMAC2_CHCFG_n_AM);
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
+                            DMAC2_CHCFG_n_LVL_SHIFT,
+                            DMAC2_CHCFG_n_LVL);
+        if (usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
+        {
+            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                                usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
+                                DMAC2_CHCFG_n_REQD_SHIFT,
+                                DMAC2_CHCFG_n_REQD);
+        }
+        else
+        {
+            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                                req_direction,
+                                DMAC2_CHCFG_n_REQD_SHIFT,
+                                DMAC2_CHCFG_n_REQD);
+        }
+        RZA_IO_RegWrite_32(&DMAC23.DMARS,
+                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
+                            DMAC23_DMARS_CH2_RID_SHIFT,
+                            DMAC23_DMARS_CH2_RID);
+        RZA_IO_RegWrite_32(&DMAC23.DMARS,
+                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
+                            DMAC23_DMARS_CH2_MID_SHIFT,
+                            DMAC23_DMARS_CH2_MID);
+
+        /* PR : Round robin mode */
+        RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
+                            1,
+                            DMAC07_DCTRL_0_7_PR_SHIFT,
+                            DMAC07_DCTRL_0_7_PR);
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC2_Open
+* Description  : Enables DMAC channel 2 transfer.
+* Arguments    : uint32_t req : DMAC request mode
+* Return Value :  0 : Succeeded in enabling DMA transfer
+*              : -1 : Failed to enable DMA transfer (due to DMA operation)
+*******************************************************************************/
+int32_t usb0_function_DMAC2_Open (uint32_t req)
+{
+    int32_t ret;
+    volatile uint8_t dummy;
+
+    /* Transferable? */
+    if ((0 == RZA_IO_RegRead_32(&DMAC.CHSTAT_2,
+                                DMAC2_CHSTAT_n_EN_SHIFT,
+                                DMAC2_CHSTAT_n_EN)) &&
+        (0 == RZA_IO_RegRead_32(&DMAC.CHSTAT_2,
+                                DMAC2_CHSTAT_n_TACT_SHIFT,
+                                DMAC2_CHSTAT_n_TACT)))
+    {
+        /* Clear Channel Status Register */
+        RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
+                            1,
+                            DMAC2_CHCTRL_n_SWRST_SHIFT,
+                            DMAC2_CHCTRL_n_SWRST);
+        dummy = RZA_IO_RegRead_32(&DMAC2.CHCTRL_n,
+                                DMAC2_CHCTRL_n_SWRST_SHIFT,
+                                DMAC2_CHCTRL_n_SWRST);
+        /* Enable DMA transfer */
+        RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
+                            1,
+                            DMAC2_CHCTRL_n_SETEN_SHIFT,
+                            DMAC2_CHCTRL_n_SETEN);
+
+        /* ---- Request by software ---- */
+        if (DMAC_REQ_MODE_SOFT == req)
+        {
+            /* DMA transfer Request by software */
+            RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
+                                1,
+                                DMAC2_CHCTRL_n_STG_SHIFT,
+                                DMAC2_CHCTRL_n_STG);
+        }
+
+        ret = 0;
+    }
+    else
+    {
+        ret = -1;
+    }
+
+    return ret;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC2_Close
+* Description  : Aborts DMAC channel 2 transfer. Returns the remaining transfer
+*              : byte count at the time of DMA transfer abort to the argument
+*              : *remain.
+* Arguments    : uint32_t * remain : Remaining transfer byte count when
+*              :                   : DMA transfer is aborted
+* Return Value : none
+*******************************************************************************/
+void usb0_function_DMAC2_Close (uint32_t * remain)
+{
+
+    /* ==== Abort transfer ==== */
+    RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
+                        1,
+                        DMAC2_CHCTRL_n_CLREN_SHIFT,
+                        DMAC2_CHCTRL_n_CLREN);
+
+    while (1 == RZA_IO_RegRead_32(&DMAC2.CHSTAT_n,
+                                DMAC2_CHSTAT_n_TACT_SHIFT,
+                                DMAC2_CHSTAT_n_TACT))
+    {
+        /* Loop until transfer is aborted */
+    }
+
+    while (1 == RZA_IO_RegRead_32(&DMAC2.CHSTAT_n,
+                                DMAC2_CHSTAT_n_EN_SHIFT,
+                                DMAC2_CHSTAT_n_EN))
+    {
+        /* Loop until 0 is set in EN before checking the remaining transfer byte count */
+    }
+    /* ==== Obtain remaining transfer byte count ==== */
+    *remain = DMAC2.CRTB_n;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC2_Load_Set
+* Description  : Sets the transfer source address, transfer destination
+*              : address, and total transfer byte count respectively
+*              : specified by the argument src_addr, dst_addr, and count to
+*              : DMAC channel 2 as DMA transfer information.
+*              : Sets the register set selected by the CHCFG_n register
+*              : RSEL bit from the Next0 or Next1 register set.
+*              : This function should be called when DMA transfer of DMAC
+*              : channel 2 is aboted.
+* Arguments    : uint32_t src_addr : Transfer source address
+*              : uint32_t dst_addr : Transfer destination address
+*              : uint32_t count    : Total transfer byte count
+* Return Value : none
+*******************************************************************************/
+void usb0_function_DMAC2_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
+{
+    uint8_t reg_set;
+
+    /* Obtain register set in use */
+    reg_set = RZA_IO_RegRead_32(&DMAC2.CHSTAT_n,
+                                DMAC2_CHSTAT_n_SR_SHIFT,
+                                DMAC2_CHSTAT_n_SR);
+
+    /* ==== Load ==== */
+    if (0 == reg_set)
+    {
+        /* ---- Next0 Register Set ---- */
+        DMAC2.N0SA_n = src_addr;     /* Start address of transfer source      */
+        DMAC2.N0DA_n = dst_addr;     /* Start address of transfer destination */
+        DMAC2.N0TB_n = count;        /* Total transfer byte count             */
+    }
+    else
+    {
+        /* ---- Next1 Register Set ---- */
+        DMAC2.N1SA_n = src_addr;     /* Start address of transfer source      */
+        DMAC2.N1DA_n = dst_addr;     /* Start address of transfer destination */
+        DMAC2.N1TB_n = count;        /* Total transfer byte count             */
+     }
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/userdef/usb0_function_userdef.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/userdef/usb0_function_userdef.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,762 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_userdef.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include <stdio.h>
+#include "r_typedefs.h"
+#include "iodefine.h"
+#include "devdrv_usb_function_api.h"
+#include "usb0_function_dmacdrv.h"  /* common DMAC driver for USB */
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+#define DUMMY_ACCESS OSTM0CNT
+
+/* #define CACHE_WRITEBACK */
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+extern int32_t io_cwb(unsigned long start, unsigned long end);
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+static void usb0_function_enable_dmac0(uint32_t src, uint32_t dst, uint32_t count,
+                                       uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
+static void usb0_function_enable_dmac1(uint32_t src, uint32_t dst, uint32_t count,
+                                       uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
+static void Userdef_USB_usb0_function_delay_10us_2(void);
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_d0fifo_dmaintid
+* Description  : get D0FIFO DMA Interrupt ID
+* Arguments    : none
+* Return Value : D0FIFO DMA Interrupt ID
+*******************************************************************************/
+IRQn_Type Userdef_USB_usb0_function_d0fifo_dmaintid (void)
+{
+#if 0
+    return DMAINT1_IRQn;
+#else
+    return 0xFFFF;
+#endif
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_d1fifo_dmaintid
+* Description  : get D1FIFO DMA Interrupt ID
+* Arguments    : none
+* Return Value : D1FIFO DMA Interrupt ID
+*******************************************************************************/
+IRQn_Type Userdef_USB_usb0_function_d1fifo_dmaintid (void)
+{
+#if 0
+    return DMAINT1_IRQn;
+#else
+    return 0xFFFF;
+#endif
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_attach
+* Description  : Wait for the software of 1ms.
+*              : Alter this function according to the user's system.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb0_function_attach (void)
+{
+    printf("\n");
+    printf("channel 0 attach device\n");
+    printf("\n");
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_detach
+* Description  : Wait for the software of 1ms.
+*              : Alter this function according to the user's system.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb0_function_detach (void)
+{
+    printf("\n");
+    printf("channel 0 detach device\n");
+    printf("\n");
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_delay_1ms
+* Description  : Wait for the software of 1ms.
+*              : Alter this function according to the user's system.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb0_function_delay_1ms (void)
+{
+    volatile int i;
+    volatile unsigned long tmp;
+
+    /*
+     * Wait 1ms (Please change for your MCU).
+     */
+    for (i = 0; i < 1440; ++i)
+    {
+        tmp = DUMMY_ACCESS;
+    }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_delay_xms
+* Description  : Wait for the software in the period of time specified by the
+*              : argument.
+*              : Alter this function according to the user's system.
+* Arguments    : uint32_t msec ; Wait Time (msec)
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb0_function_delay_xms (uint32_t msec)
+{
+    volatile unsigned short i;
+
+    for (i = 0; i < msec; ++i)
+    {
+        Userdef_USB_usb0_function_delay_1ms();
+    }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_delay_10us
+* Description  : Waits for software for the period specified by the argument.
+*              : Alter this function according to the user's system.
+* Arguments    : uint32_t usec ; Wait Time(x 10usec)
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb0_function_delay_10us (uint32_t usec)
+{
+    volatile int i;
+
+    /* Wait 10us (Please change for your MCU) */
+    for (i = 0; i < usec; ++i)
+    {
+        Userdef_USB_usb0_function_delay_10us_2();
+    }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_delay_10us_2
+* Description  : Waits for software for the period specified by the argument.
+*              : Alter this function according to the user's system.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+static void Userdef_USB_usb0_function_delay_10us_2 (void)
+{
+    volatile int i;
+    volatile unsigned long tmp;
+
+    /* Wait 1us (Please change for your MCU) */
+    for (i = 0; i < 14; ++i)
+    {
+        tmp = DUMMY_ACCESS;
+    }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_delay_500ns
+* Description  : Wait for software for 500ns.
+*              : Alter this function according to the user's system.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb0_function_delay_500ns (void)
+{
+    volatile int i;
+    volatile unsigned long tmp;
+
+    /* Wait 500ns (Please change for your MCU) */
+    /* Wait 500ns I clock 266MHz */
+    tmp = DUMMY_ACCESS;
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_start_dma
+* Description  : Enables DMA transfer on the information specified by the argument.
+*              : Set DMAC register by this function to enable DMA transfer.
+*              : After executing this function, USB module is set to start DMA
+*              : transfer. DMA transfer should not wait for DMA transfer complete.
+* Arguments    : USB_FUNCTION_DMA_t *dma   : DMA parameter
+*              :  typedef struct{
+*              :      uint32_t fifo;    FIFO for using
+*              :      uint32_t buffer;  Start address of transfer source/destination
+*              :      uint32_t bytes;   Transfer size(Byte)
+*              :      uint32_t dir;     Transfer direction(0:Buffer->FIFO, 1:FIFO->Buffer)
+*              :      uint32_t size;    DMA transfer size
+*              :   } USB_FUNCTION_DMA_t;
+*              : uint16_t dfacc ; 0 : cycle steal mode
+*              :                  1 : 16byte continuous mode
+*              :                  2 : 32byte continuous mode
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb0_function_start_dma (USB_FUNCTION_DMA_t * dma, uint16_t dfacc)
+{
+    uint32_t trncount;
+    uint32_t src;
+    uint32_t dst;
+    uint32_t size;
+    uint32_t dir;
+#ifdef CACHE_WRITEBACK
+    uint32_t ptr;
+#endif
+
+    trncount = dma->bytes;
+    dir      = dma->dir;
+
+    if (dir == USB_FUNCTION_FIFO2BUF)
+    {
+        /* DxFIFO determination */
+        dst = dma->buffer;
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+        if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+        {
+            src = (uint32_t)(&USB200.D0FIFO.UINT32);
+        }
+        else
+        {
+            src = (uint32_t)(&USB200.D1FIFO.UINT32);
+        }
+        size = dma->size;
+
+        if (size == 0)
+        {
+            src += 3;       /* byte access  */
+        }
+        else if (size == 1)
+        {
+            src += 2;       /* short access */
+        }
+        else
+        {
+            /* Do Nothing */
+        }
+#else
+        size = dma->size;
+
+        if (size == 2)
+        {
+            /* 32bit access */
+            if (dfacc == 2)
+            {
+                /* 32byte access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    src = (uint32_t)(&USB200.D0FIFOB0);
+                }
+                else
+                {
+                    src = (uint32_t)(&USB200.D1FIFOB0);
+                }
+            }
+            else if (dfacc == 1)
+            {
+                /* 16byte access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    src = (uint32_t)(&USB200.D0FIFOB0);
+                }
+                else
+                {
+                    src = (uint32_t)(&USB200.D1FIFOB0);
+                }
+            }
+            else
+            {
+                /* normal access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    src = (uint32_t)(&USB200.D0FIFO.UINT32);
+                }
+                else
+                {
+                    src = (uint32_t)(&USB200.D1FIFO.UINT32);
+                }
+            }
+        }
+        else if (size == 1)
+        {
+            /* 16bit access */
+            dfacc = 0;      /* force normal access */
+
+            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+            {
+                src = (uint32_t)(&USB200.D0FIFO.UINT32);
+            }
+            else
+            {
+                src = (uint32_t)(&USB200.D1FIFO.UINT32);
+            }
+            src += 2;       /* short access */
+        }
+        else
+        {
+            /* 8bit access */
+            dfacc = 0;      /* force normal access */
+
+            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+            {
+                src = (uint32_t)(&USB200.D0FIFO.UINT32);
+            }
+            else
+            {
+                src = (uint32_t)(&USB200.D1FIFO.UINT32);
+            }
+            src += 3;       /* byte access */
+        }
+#endif
+    }
+    else
+    {
+        /* DxFIFO determination */
+        src = dma->buffer;
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+        if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+        {
+            dst = (uint32_t)(&USB200.D0FIFO.UINT32);
+        }
+        else
+        {
+            dst = (uint32_t)(&USB200.D1FIFO.UINT32);
+        }
+        size = dma->size;
+
+        if (size == 0)
+        {
+            dst += 3;       /* byte access  */
+        }
+        else if (size == 1)
+        {
+            dst += 2;       /* short access */
+        }
+        else
+        {
+            /* Do Nothing */
+        }
+#else
+        size = dma->size;
+
+        if (size == 2)
+        {
+            /* 32bit access */
+            if (dfacc == 2)
+            {
+                /* 32byte access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    dst = (uint32_t)(&USB200.D0FIFOB0);
+                }
+                else
+                {
+                    dst = (uint32_t)(&USB200.D1FIFOB0);
+                }
+            }
+            else if (dfacc == 1)
+            {
+                /* 16byte access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    dst = (uint32_t)(&USB200.D0FIFOB0);
+                }
+                else
+                {
+                    dst = (uint32_t)(&USB200.D1FIFOB0);
+                }
+            }
+            else
+            {
+                /* normal access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    dst = (uint32_t)(&USB200.D0FIFO.UINT32);
+                }
+                else
+                {
+                    dst = (uint32_t)(&USB200.D1FIFO.UINT32);
+                }
+            }
+        }
+        else if (size == 1)
+        {
+            /* 16bit access */
+            dfacc = 0;      /* force normal access */
+            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+            {
+                dst = (uint32_t)(&USB200.D0FIFO.UINT32);
+            }
+            else
+            {
+                dst = (uint32_t)(&USB200.D1FIFO.UINT32);
+            }
+            dst += 2;       /* short access */
+        }
+        else
+        {
+            /* 8bit access */
+            dfacc = 0;      /* force normal access */
+
+            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+            {
+                dst = (uint32_t)(&USB200.D0FIFO.UINT32);
+            }
+            else
+            {
+                dst = (uint32_t)(&USB200.D1FIFO.UINT32);
+            }
+            dst += 3;       /* byte access  */
+        }
+#endif
+    }
+
+#ifdef CACHE_WRITEBACK
+    ptr = (uint32_t)dma->buffer;
+
+    if ((ptr & 0x20000000ul) == 0)
+    {
+        io_cwb((uint32_t)ptr, (uint32_t)(ptr) + trncount);
+    }
+#endif
+
+    if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+    {
+        usb0_function_enable_dmac0(src, dst, trncount, size, dir, dma->fifo, dfacc);
+    }
+    else
+    {
+        usb0_function_enable_dmac1(src, dst, trncount, size, dir, dma->fifo, dfacc);
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_enable_dmac0
+* Description  : Enables DMA transfer on the information specified by the argument.
+* Arguments    : uint32_t src   : src address
+*              : uint32_t dst   : dst address
+*              : uint32_t count : transfer byte
+*              : uint32_t size  : transfer size
+*              : uint32_t dir   : direction
+*              : uint32_t fifo  : FIFO(D0FIFO or D1FIFO)
+*              : uint16_t dfacc : 0 : normal access
+*              :                : 1 : 16byte access
+*              :                : 2 : 32byte access
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_enable_dmac0 (uint32_t src, uint32_t dst, uint32_t count,
+                                        uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
+{
+    dmac_transinfo_t trans_info;
+    uint32_t         request_factor = 0;
+    int32_t          ret;
+
+    /* ==== Variable setting for DMAC initialization ==== */
+    trans_info.src_addr = (uint32_t)src;                /* Start address of transfer source      */
+    trans_info.dst_addr = (uint32_t)dst;                /* Start address of transfer destination */
+    trans_info.count    = (uint32_t)count;              /* Total byte count to be transferred    */
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+    if (size == 0)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_8;        /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_8;        /* Transfer destination transfer size */
+    }
+    else if (size == 1)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_16;       /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_16;       /* Transfer destination transfer size */
+    }
+    else if (size == 2)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_32;       /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_32;       /* Transfer destination transfer size */
+    }
+    else
+    {
+        printf("size error!!\n");
+    }
+#else
+    if (dfacc == 2)
+    {
+        /* 32byte access */
+        trans_info.src_size = DMAC_TRANS_SIZE_256;      /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_256;      /* Transfer destination transfer size */
+    }
+    else if (dfacc == 1)
+    {
+        /* 16byte access */
+        trans_info.src_size = DMAC_TRANS_SIZE_128;      /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_128;      /* Transfer destination transfer size */
+    }
+    else
+    {
+        /* normal access */
+        if (size == 0)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_8;    /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_8;    /* Transfer destination transfer size */
+        }
+        else if (size == 1)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_16;   /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_16;   /* Transfer destination transfer size */
+        }
+        else if (size == 2)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_32;   /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_32;   /* Transfer destination transfer size */
+        }
+        else
+        {
+            printf("size error!!\n");
+        }
+    }
+#endif
+
+    if (dir == USB_FUNCTION_FIFO2BUF)
+    {
+        request_factor =DMAC_REQ_USB0_DMA0_RX;          /* USB_0 channel 0 receive FIFO full               */
+        trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer source address      */
+        trans_info.daddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer destination address */
+    }
+    else if (dir == USB_FUNCTION_BUF2FIFO)
+    {
+        request_factor =DMAC_REQ_USB0_DMA0_TX;          /* USB_0 channel 0 receive FIFO empty              */
+        trans_info.saddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer source address      */
+        trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer destination address */
+    }
+    else
+    {
+        /* Do Nothing */
+    }
+
+    /* ==== DMAC initialization ==== */
+    usb0_function_DMAC1_PeriReqInit((const dmac_transinfo_t *)&trans_info,
+                                    DMAC_MODE_REGISTER,
+                                    DMAC_SAMPLE_SINGLE,
+                                    request_factor,
+                                    0);     /* Don't care DMAC_REQ_REQD is setting in
+                                            usb0_function_DMAC1_PeriReqInit() */
+
+    /* ==== DMAC startup ==== */
+    ret = usb0_function_DMAC1_Open(DMAC_REQ_MODE_PERI);
+    if (ret != 0)
+    {
+        printf("DMAC1 Open error!!\n");
+    }
+
+    return;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_enable_dmac1
+* Description  : Enables DMA transfer on the information specified by the argument.
+* Arguments    : uint32_t src   : src address
+*              : uint32_t dst   : dst address
+*              : uint32_t count : transfer byte
+*              : uint32_t size  : transfer size
+*              : uint32_t dir   : direction
+*              : uint32_t fifo  : FIFO(D0FIFO or D1FIFO)
+*              : uint16_t dfacc : 0 : normal access
+*              :                : 1 : 16byte access
+*              :                : 2 : 32byte access
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_enable_dmac1 (uint32_t src, uint32_t dst, uint32_t count,
+                                        uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
+{
+    dmac_transinfo_t trans_info;
+    uint32_t         request_factor = 0;
+    int32_t          ret;
+
+    /* ==== Variable setting for DMAC initialization ==== */
+    trans_info.src_addr = (uint32_t)src;                /* Start address of transfer source      */
+    trans_info.dst_addr = (uint32_t)dst;                /* Start address of transfer destination */
+    trans_info.count    = (uint32_t)count;              /* Total byte count to be transferred    */
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+    if (size == 0)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_8;        /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_8;        /* Transfer destination transfer size */
+    }
+    else if (size == 1)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_16;       /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_16;       /* Transfer destination transfer size */
+    }
+    else if (size == 2)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_32;       /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_32;       /* Transfer destination transfer size */
+    }
+    else
+    {
+        printf("size error!!\n");
+    }
+#else
+    if (dfacc == 2)
+    {
+        /* 32byte access */
+        trans_info.src_size = DMAC_TRANS_SIZE_256;      /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_256;      /* Transfer destination transfer size */
+    }
+    else if (dfacc == 1)
+    {
+        /* 16byte access */
+        trans_info.src_size = DMAC_TRANS_SIZE_128;      /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_128;      /* Transfer destination transfer size */
+    }
+    else
+    {
+        /* normal access */
+        if (size == 0)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_8;    /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_8;    /* Transfer destination transfer size */
+        }
+        else if (size == 1)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_16;   /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_16;   /* Transfer destination transfer size */
+        }
+        else if (size == 2)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_32;   /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_32;   /* Transfer destination transfer size */
+        }
+        else
+        {
+            printf("size error!!\n");
+        }
+    }
+#endif
+
+    if (dir == USB_FUNCTION_FIFO2BUF)
+    {
+        request_factor =DMAC_REQ_USB0_DMA1_RX;          /* USB_0 channel 0 receive FIFO full               */
+        trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer source address      */
+        trans_info.daddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer destination address */
+    }
+    else if (dir == USB_FUNCTION_BUF2FIFO)
+    {
+        request_factor =DMAC_REQ_USB0_DMA1_TX;          /* USB_0 channel 0 receive FIFO empty              */
+        trans_info.saddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer source address      */
+        trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer destination address */
+    }
+    else
+    {
+        /* Do Nothing */
+    }
+
+    /* ==== DMAC initialization ==== */
+    usb0_function_DMAC2_PeriReqInit((const dmac_transinfo_t *)&trans_info,
+                                    DMAC_MODE_REGISTER,
+                                    DMAC_SAMPLE_SINGLE,
+                                    request_factor,
+                                    0);     /* Don't care DMAC_REQ_REQD is setting in
+                                            usb0_function_DMAC1_PeriReqInit() */
+
+    /* ==== DMAC startup ==== */
+    ret = usb0_function_DMAC2_Open(DMAC_REQ_MODE_PERI);
+    if (ret != 0)
+    {
+        printf("DMAC2 Open error!!\n");
+    }
+
+    return;
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_stop_dma0
+* Description  : Disables DMA transfer.
+*              : This function should be executed to DMAC executed at the time
+*              : of specification of D0_FIF0_DMA in dma->fifo.
+* Arguments    : none
+* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
+*              : regarding to the bus width.
+*******************************************************************************/
+uint32_t Userdef_USB_usb0_function_stop_dma0 (void)
+{
+    uint32_t remain;
+
+    /* ==== DMAC release ==== */
+    usb0_function_DMAC1_Close(&remain);
+
+    return remain;
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_stop_dma1
+* Description  : Disables DMA transfer.
+*              : This function should be executed to DMAC executed at the time
+*              : of specification of D1_FIF0_DMA in dma->fifo.
+* Arguments    : none
+* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
+*              : regarding to the bus width.
+*******************************************************************************/
+uint32_t Userdef_USB_usb0_function_stop_dma1 (void)
+{
+    uint32_t remain;
+
+    /* ==== DMAC release ==== */
+    usb0_function_DMAC2_Close(&remain);
+
+    return remain;
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,171 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description  : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB1_FUNCTION_H
+#define USB1_FUNCTION_H
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "devdrv_usb_function_api.h"
+#include "usb_function.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+extern const uint16_t       g_usb1_function_bit_set[];
+extern uint32_t             g_usb1_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint8_t              *g_usb1_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+extern uint16_t             g_usb1_function_PipeIgnore[];
+extern uint16_t             g_usb1_function_PipeTbl[];
+extern uint16_t             g_usb1_function_pipe_status[];
+extern uint32_t             g_usb1_function_PipeDataSize[];
+
+extern USB_FUNCTION_DMA_t   g_usb1_function_DmaInfo[];
+extern uint16_t             g_usb1_function_DmaPipe[];
+extern uint16_t             g_usb1_function_DmaBval[];
+extern uint16_t             g_usb1_function_DmaStatus[];
+
+extern uint16_t             g_usb1_function_CtrZeroLengthFlag;
+
+extern uint16_t             g_usb1_function_ConfigNum;
+extern uint16_t             g_usb1_function_Alternate[USB_FUNCTION_ALT_NO];
+extern uint16_t             g_usb1_function_RemoteWakeupFlag;
+extern uint16_t             g_usb1_function_TestModeFlag;
+extern uint16_t             g_usb1_function_TestModeSelectors;
+
+extern uint16_t             g_usb1_function_ReqType;
+extern uint16_t             g_usb1_function_ReqTypeType;
+extern uint16_t             g_usb1_function_ReqTypeRecip;
+extern uint16_t             g_usb1_function_ReqRequest;
+extern uint16_t             g_usb1_function_ReqValue;
+extern uint16_t             g_usb1_function_ReqIndex;
+extern uint16_t             g_usb1_function_ReqLength;
+
+extern uint16_t             g_usb1_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
+
+extern uint16_t             g_usb1_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint16_t             g_usb1_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint16_t             g_usb1_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint16_t             g_usb1_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+/* ==== common ==== */
+void     usb1_function_dma_stop_d0(uint16_t pipe, uint32_t remain);
+void     usb1_function_dma_stop_d1(uint16_t pipe, uint32_t remain);
+uint16_t usb1_function_is_hispeed(void);
+uint16_t usb1_function_is_hispeed_enable(void);
+uint16_t usb1_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+uint16_t usb1_function_write_buffer(uint16_t pipe);
+uint16_t usb1_function_write_buffer_c(uint16_t pipe);
+uint16_t usb1_function_write_buffer_d0(uint16_t pipe);
+uint16_t usb1_function_write_buffer_d1(uint16_t pipe);
+void     usb1_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+uint16_t usb1_function_read_buffer(uint16_t pipe);
+uint16_t usb1_function_read_buffer_c(uint16_t pipe);
+uint16_t usb1_function_read_buffer_d0(uint16_t pipe);
+uint16_t usb1_function_read_buffer_d1(uint16_t pipe);
+uint16_t usb1_function_change_fifo_port(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
+void     usb1_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
+void     usb1_function_set_curpipe2(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc);
+uint16_t usb1_function_get_mbw(uint32_t trncount, uint32_t dtptr);
+uint16_t usb1_function_read_dma(uint16_t pipe);
+void     usb1_function_brdy_int(uint16_t status, uint16_t int_enb);
+void     usb1_function_nrdy_int(uint16_t status, uint16_t int_enb);
+void     usb1_function_bemp_int(uint16_t status, uint16_t int_enb);
+void     usb1_function_setting_interrupt(uint8_t level);
+void     usb1_function_reset_module(uint16_t clockmode);
+uint16_t usb1_function_get_buf_size(uint16_t pipe);
+uint16_t usb1_function_get_mxps(uint16_t pipe);
+void     usb1_function_clear_brdy_sts(uint16_t pipe);
+void     usb1_function_clear_bemp_sts(uint16_t pipe);
+void     usb1_function_clear_nrdy_sts(uint16_t pipe);
+void     usb1_function_set_pid_buf(uint16_t pipe);
+void     usb1_function_set_pid_nak(uint16_t pipe);
+void     usb1_function_set_pid_stall(uint16_t pipe);
+void     usb1_function_clear_pid_stall(uint16_t pipe);
+uint16_t usb1_function_get_pid(uint16_t pipe);
+void     usb1_function_set_sqclr(uint16_t pipe);
+void     usb1_function_set_sqset(uint16_t pipe);
+void     usb1_function_set_csclr(uint16_t pipe);
+void     usb1_function_aclrm(uint16_t pipe);
+void     usb1_function_set_aclrm(uint16_t pipe);
+void     usb1_function_clr_aclrm(uint16_t pipe);
+uint16_t usb1_function_get_sqmon(uint16_t pipe);
+uint16_t usb1_function_get_inbuf(uint16_t pipe);
+
+/* ==== function ==== */
+void     usb1_function_init_status(void);
+void     usb1_function_InitModule(uint16_t mode);
+uint16_t usb1_function_CheckVBUStaus(void);
+void     usb1_function_USB_FUNCTION_Attach(void);
+void     usb1_function_USB_FUNCTION_Detach(void);
+void     usb1_function_USB_FUNCTION_BusReset(void);
+void     usb1_function_USB_FUNCTION_Resume(void);
+void     usb1_function_USB_FUNCTION_Suspend(void);
+void     usb1_function_USB_FUNCTION_TestMode(void);
+void     usb1_function_ResetDCP(void);
+void     usb1_function_ResetEP(uint16_t num);
+uint16_t usb1_function_EpToPipe(uint16_t ep);
+void     usb1_function_InitEPTable(uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num);
+uint16_t usb1_function_GetConfigNum(void);
+uint16_t usb1_function_GetAltNum(uint16_t Con_Num, uint16_t Int_Num);
+uint16_t usb1_function_CheckRemoteWakeup(void);
+void     usb1_function_clear_alt(void);
+void     usb1_function_clear_pipe_tbl(void);
+void     usb1_function_clear_ep_table_index(void);
+uint16_t usb1_function_GetInterfaceNum(uint16_t num);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* USB1_FUNCTION_H */
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function_api.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function_api.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,104 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_api.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description  : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB1_FUNCTION_API_H
+#define USB1_FUNCTION_API_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Variable Externs
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+void     usb1_api_function_init(uint8_t int_level, uint16_t mode, uint16_t clockmode);
+uint16_t usb1_api_function_IsConfigured(void);
+uint16_t usb1_function_GetDeviceState(void);
+uint16_t usb1_api_function_CtrlReadStart(uint32_t size, uint8_t *data);
+void     usb1_api_function_CtrlWriteStart(uint32_t size, uint8_t *data);
+uint16_t usb1_api_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+uint16_t usb1_api_function_check_pipe_status(uint16_t pipe, uint32_t *size);
+void     usb1_api_function_clear_pipe_status(uint16_t pipe);
+void     usb1_api_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+void     usb1_api_function_set_pid_buf(uint16_t pipe);
+void     usb1_api_function_set_pid_nak(uint16_t pipe);
+void     usb1_api_function_set_pid_stall(uint16_t pipe);
+void     usb1_api_function_clear_pid_stall(uint16_t pipe);
+uint16_t usb1_api_function_get_pid(uint16_t pipe);
+int32_t  usb1_api_function_check_stall(uint16_t pipe);
+void     usb1_api_function_set_sqclr(uint16_t pipe);
+void     usb1_api_function_set_sqset(uint16_t pipe);
+void     usb1_api_function_set_csclr(uint16_t pipe);
+void     usb1_api_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
+void     usb1_api_function_clear_brdy_sts(uint16_t pipe);
+void     usb1_api_function_clear_bemp_sts(uint16_t pipe);
+void     usb1_api_function_clear_nrdy_sts(uint16_t pipe);
+
+void     usb1_function_ClearFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_SetFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_SetAddress(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_SetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_SetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_SetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_SynchFrame(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_GetStatus(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_GetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_GetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_GetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Resrv_0(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Resrv_123(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Resrv_4(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Resrv_5(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* USB1_FUNCTION_API_H */
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function_dmacdrv.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function_dmacdrv.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,142 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_dmacdrv.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description  : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB1_FUNCTION_DMACDRV_H
+#define USB1_FUNCTION_DMACDRV_H
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+typedef struct dmac_transinfo
+{
+    uint32_t src_addr;      /* Transfer source address                */
+    uint32_t dst_addr;      /* Transfer destination address           */
+    uint32_t count;         /* Transfer byte count                    */
+    uint32_t src_size;      /* Transfer source data size              */
+    uint32_t dst_size;      /* Transfer destination data size         */
+    uint32_t saddr_dir;     /* Transfer source address direction      */
+    uint32_t daddr_dir;     /* Transfer destination address direction */
+} dmac_transinfo_t;
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+/* ==== Transfer specification of the sample program ==== */
+#define DMAC_SAMPLE_SINGLE          (0)     /* Single transfer                   */
+#define DMAC_SAMPLE_CONTINUATION    (1)     /* Continuous transfer (use REN bit) */
+
+/* ==== DMA modes ==== */
+#define DMAC_MODE_REGISTER          (0)     /* Register mode */
+#define DMAC_MODE_LINK              (1)     /* Link mode     */
+
+/* ==== Transfer requests ==== */
+#define DMAC_REQ_MODE_EXT           (0)     /* External request                   */
+#define DMAC_REQ_MODE_PERI          (1)     /* On-chip peripheral module request  */
+#define DMAC_REQ_MODE_SOFT          (2)     /* Auto-request (request by software) */
+
+/* ==== DMAC transfer sizes ==== */
+#define DMAC_TRANS_SIZE_8           (0)     /* 8 bits    */
+#define DMAC_TRANS_SIZE_16          (1)     /* 16 bits   */
+#define DMAC_TRANS_SIZE_32          (2)     /* 32 bits   */
+#define DMAC_TRANS_SIZE_64          (3)     /* 64 bits   */
+#define DMAC_TRANS_SIZE_128         (4)     /* 128 bits  */
+#define DMAC_TRANS_SIZE_256         (5)     /* 256 bits  */
+#define DMAC_TRANS_SIZE_512         (6)     /* 512 bits  */
+#define DMAC_TRANS_SIZE_1024        (7)     /* 1024 bits */
+
+/* ==== Address increment for transferring ==== */
+#define DMAC_TRANS_ADR_NO_INC       (1)     /* Not increment */
+#define DMAC_TRANS_ADR_INC          (0)     /* Increment     */
+
+/* ==== Method for detecting DMA request ==== */
+#define DMAC_REQ_DET_FALL           (0)     /* Falling edge detection */
+#define DMAC_REQ_DET_RISE           (1)     /* Rising edge detection  */
+#define DMAC_REQ_DET_LOW            (2)     /* Low level detection    */
+#define DMAC_REQ_DET_HIGH           (3)     /* High level detection   */
+
+/* ==== Request Direction ==== */
+#define DMAC_REQ_DIR_SRC            (0)     /* DMAREQ is the source/ DMAACK is active when reading      */
+#define DMAC_REQ_DIR_DST            (1)     /* DMAREQ is the destination/ DMAACK is active when writing */
+
+/* ==== Descriptors ==== */
+#define DMAC_DESC_HEADER            (0)     /* Header              */
+#define DMAC_DESC_SRC_ADDR          (1)     /* Source Address      */
+#define DMAC_DESC_DST_ADDR          (2)     /* Destination Address */
+#define DMAC_DESC_COUNT             (3)     /* Transaction Byte    */
+#define DMAC_DESC_CHCFG             (4)     /* Channel Confg       */
+#define DMAC_DESC_CHITVL            (5)     /* Channel Interval    */
+#define DMAC_DESC_CHEXT             (6)     /* Channel Extension   */
+#define DMAC_DESC_LINK_ADDR         (7)     /* Link Address        */
+
+/* ==== On-chip peripheral module requests ===== */
+typedef enum dmac_request_factor
+{
+    DMAC_REQ_USB0_DMA0_TX,      /* USB_0 channel 0 transmit FIFO empty            */
+    DMAC_REQ_USB0_DMA0_RX,      /* USB_0 channel 0 receive FIFO full              */
+    DMAC_REQ_USB0_DMA1_TX,      /* USB_0 channel 1 transmit FIFO empty            */
+    DMAC_REQ_USB0_DMA1_RX,      /* USB_0 channel 1 receive FIFO full              */
+    DMAC_REQ_USB1_DMA0_TX,      /* USB_1 channel 0 transmit FIFO empty            */
+    DMAC_REQ_USB1_DMA0_RX,      /* USB_1 channel 0 receive FIFO full              */
+    DMAC_REQ_USB1_DMA1_TX,      /* USB_1 channel 1 transmit FIFO empty            */
+    DMAC_REQ_USB1_DMA1_RX,      /* USB_1 channel 1 receive FIFO full              */
+} dmac_request_factor_t;
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+void usb1_function_DMAC3_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
+                                        uint32_t request_factor, uint32_t req_direction);
+int32_t usb1_function_DMAC3_Open(uint32_t req);
+void usb1_function_DMAC3_Close(uint32_t *remain);
+void usb1_function_DMAC3_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
+
+void usb1_function_DMAC4_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
+                                        uint32_t request_factor, uint32_t req_direction);
+int32_t usb1_function_DMAC4_Open(uint32_t req);
+void usb1_function_DMAC4_Close(uint32_t *remain);
+void usb1_function_DMAC4_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* USB1_FUNCTION_DMACDRV_H */
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_dataio.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_dataio.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,2932 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_dataio.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb1_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+static uint16_t g_usb1_function_mbw[(USB_FUNCTION_MAX_PIPE_NO + 1)];
+
+static void     usb1_function_start_receive_trns_c(uint16_t pipe, uint32_t size, uint8_t *data);
+static void     usb1_function_start_receive_trns_d0(uint16_t pipe, uint32_t size, uint8_t *data);
+static void     usb1_function_start_receive_trns_d1(uint16_t pipe, uint32_t size, uint8_t *data);
+static void     usb1_function_start_receive_dma_d0(uint16_t pipe, uint32_t size, uint8_t *data);
+static void     usb1_function_start_receive_dma_d1(uint16_t pipe, uint32_t size, uint8_t *data);
+static uint16_t usb1_function_read_dma_d0(uint16_t pipe);
+static uint16_t usb1_function_read_dma_d1(uint16_t pipe);
+static uint16_t usb1_function_write_dma_d0(uint16_t pipe);
+static uint16_t usb1_function_write_dma_d1(uint16_t pipe);
+
+static void     usb1_function_read_c_fifo(uint16_t pipe, uint16_t count);
+static void     usb1_function_write_c_fifo(uint16_t Pipe, uint16_t count);
+static void     usb1_function_read_d0_fifo(uint16_t pipe, uint16_t count);
+static void     usb1_function_write_d0_fifo(uint16_t pipe, uint16_t count);
+static void     usb1_function_read_d1_fifo(uint16_t pipe, uint16_t count);
+static void     usb1_function_write_d1_fifo(uint16_t pipe, uint16_t count);
+
+static void     usb1_function_clear_transaction_counter(uint16_t pipe);
+static void     usb1_function_set_transaction_counter(uint16_t pipe, uint32_t count);
+
+static uint32_t usb1_function_com_get_dmasize(uint32_t trncount, uint32_t dtptr);
+
+static uint16_t usb1_function_set_dfacc_d0(uint16_t mbw, uint32_t count);
+static uint16_t usb1_function_set_dfacc_d1(uint16_t mbw, uint32_t count);
+
+
+/*******************************************************************************
+* Function Name: usb1_function_start_send_transfer
+* Description  : Starts the USB data communication using pipe specified by the argument.
+* Arguments    : uint16_t  pipe    ; Pipe Number
+*              : uint32_t size     ; Data Size
+*              : uint8_t  *data    ; Data Address
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t status;
+    uint16_t usefifo;
+    uint16_t mbw;
+
+    g_usb1_function_data_count[pipe]   = size;
+    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    usb1_function_clear_bemp_sts(pipe);
+    usb1_function_clear_brdy_sts(pipe);
+    usb1_function_clear_nrdy_sts(pipe);
+
+    mbw = usb1_function_get_mbw(size, (uint32_t)data);
+
+    usefifo = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+    switch (usefifo)
+    {
+        case USB_FUNCTION_D0FIFO_USE:
+        case USB_FUNCTION_D0FIFO_DMA:
+            usefifo = USB_FUNCTION_D0USE;
+        break;
+
+        case USB_FUNCTION_D1FIFO_USE:
+        case USB_FUNCTION_D1FIFO_DMA:
+            usefifo = USB_FUNCTION_D1USE;
+        break;
+
+        default:
+            usefifo = USB_FUNCTION_CUSE;
+        break;
+    };
+
+    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, usefifo, DEVDRV_USBF_NO, mbw);
+
+    usb1_function_clear_transaction_counter(pipe);
+
+    usb1_function_aclrm(pipe);
+
+    status = usb1_function_write_buffer(pipe);
+
+    if (status != DEVDRV_USBF_FIFOERROR)
+    {
+        usb1_function_set_pid_buf(pipe);
+    }
+
+    return status;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_buffer
+* Description  : Writes data in the buffer allocated in the pipe specified by
+*              : the argument. The FIFO for using is set in the pipe definition table.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_write_buffer (uint16_t pipe)
+{
+    uint16_t status;
+    uint16_t usefifo;
+
+    g_usb1_function_PipeIgnore[pipe] = 0;
+    usefifo = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+    switch (usefifo)
+    {
+        case USB_FUNCTION_D0FIFO_USE:
+            status = usb1_function_write_buffer_d0(pipe);
+        break;
+
+        case USB_FUNCTION_D1FIFO_USE:
+            status = usb1_function_write_buffer_d1(pipe);
+        break;
+
+        case USB_FUNCTION_D0FIFO_DMA:
+            status = usb1_function_write_dma_d0(pipe);
+        break;
+
+        case USB_FUNCTION_D1FIFO_DMA:
+            status = usb1_function_write_dma_d1(pipe);
+        break;
+
+        default:
+            status = usb1_function_write_buffer_c(pipe);
+        break;
+    };
+
+    switch (status)
+    {
+        case DEVDRV_USBF_WRITING:                       /* Continue of data write */
+            usb1_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
+            usb1_function_enable_brdy_int(pipe);        /* Enable Ready Interrupt */
+        break;
+
+        case DEVDRV_USBF_WRITEEND:                      /* End of data write */
+        case DEVDRV_USBF_WRITESHRT:                     /* End of data write */
+            usb1_function_disable_brdy_int(pipe);       /* Disable Ready Interrupt */
+            usb1_function_clear_nrdy_sts(pipe);
+            usb1_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
+            /* for last transfer */
+            usb1_function_enable_bemp_int(pipe);        /* Enable Empty Interrupt */
+        break;
+
+        case DEVDRV_USBF_WRITEDMA:                      /* DMA write */
+            usb1_function_clear_nrdy_sts(pipe);
+            usb1_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
+        break;
+
+        case DEVDRV_USBF_FIFOERROR:                     /* FIFO access status */
+        default:
+            usb1_function_disable_brdy_int(pipe);       /* Disable Ready Interrupt */
+            usb1_function_disable_bemp_int(pipe);       /* Disable Empty Interrupt */
+            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+        break;
+    }
+
+    return status;                      /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_buffer_c
+* Description  : Writes data in the buffer allocated in the pipe specified in
+*              : the argument. Writes data by CPU transfer using CFIFO.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_write_buffer_c (uint16_t pipe)
+{
+    uint32_t count;
+    uint16_t size;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+
+    if (g_usb1_function_CtrZeroLengthFlag == 1)
+    {
+        g_usb1_function_CtrZeroLengthFlag = 0;                  /* Zero Length Packet Flag CLR */
+        return DEVDRV_USBF_WRITEEND;
+    }
+
+    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+    if (pipe == USB_FUNCTION_PIPE0)
+    {
+        buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
+    }
+    else
+    {
+        buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
+    }
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    size = usb1_function_get_buf_size(pipe);                    /* Data buffer size */
+    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb1_function_data_count[pipe] <= (uint32_t)size)
+    {
+        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
+        count  = g_usb1_function_data_count[pipe];
+
+        if (count == 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
+        }
+    }
+    else
+    {
+        status = DEVDRV_USBF_WRITING;                           /* write continues */
+        count  = (uint32_t)size;
+    }
+
+    usb1_function_write_c_fifo(pipe, (uint16_t)count);
+
+    if (g_usb1_function_data_count[pipe] < (uint32_t)size)
+    {
+        g_usb1_function_data_count[pipe] = 0;
+
+        if (RZA_IO_RegRead_16(&USB201.CFIFOCTR, USB_CFIFOCTR_BVAL_SHIFT, USB_CFIFOCTR_BVAL) == 0)
+        {
+            USB201.CFIFOCTR = USB_FUNCTION_BITBVAL;             /* Short Packet */
+            g_usb1_function_CtrZeroLengthFlag = 1;              /* Zero Length Packet Flag */
+        }
+    }
+    else
+    {
+        g_usb1_function_data_count[pipe] -= count;
+    }
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_buffer_d0
+* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
+*              : Writes data by CPU transfer using D0FIFO.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_write_buffer_d0 (uint16_t pipe)
+{
+    uint32_t count;
+    uint16_t size;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+
+    mbw    = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    size = usb1_function_get_buf_size(pipe);                    /* Data buffer size */
+    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb1_function_data_count[pipe] <= (uint32_t)size)
+    {
+        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
+        count  = g_usb1_function_data_count[pipe];
+
+        if (count == 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
+        }
+    }
+    else
+    {
+        status = DEVDRV_USBF_WRITING;                           /* write continues */
+        count  = (uint32_t)size;
+    }
+
+    usb1_function_write_d0_fifo(pipe, (uint16_t)count);
+
+    if (g_usb1_function_data_count[pipe] < (uint32_t)size)
+    {
+        g_usb1_function_data_count[pipe] = 0;
+        if (RZA_IO_RegRead_16(&USB201.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+        {
+            USB201.D0FIFOCTR = USB_FUNCTION_BITBVAL;            /* Short Packet */
+        }
+    }
+    else
+    {
+        g_usb1_function_data_count[pipe] -= count;
+    }
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_buffer_d1
+* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
+*              : Writes data by CPU transfer using D1FIFO.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_write_buffer_d1 (uint16_t pipe)
+{
+    uint32_t count;
+    uint16_t size;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+
+    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    size = usb1_function_get_buf_size(pipe);                    /* Data buffer size */
+    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb1_function_data_count[pipe] <= (uint32_t)size)
+    {
+        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
+        count  = g_usb1_function_data_count[pipe];
+
+        if (count == 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
+        }
+    }
+    else
+    {
+        status = DEVDRV_USBF_WRITING;                           /* write continues */
+        count  = (uint32_t)size;
+    }
+
+    usb1_function_write_d1_fifo(pipe, (uint16_t)count);
+
+    if (g_usb1_function_data_count[pipe] < (uint32_t)size)
+    {
+        g_usb1_function_data_count[pipe] = 0;
+
+        if (RZA_IO_RegRead_16(&USB201.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+        {
+            USB201.D1FIFOCTR = USB_FUNCTION_BITBVAL;            /* Short Packet */
+        }
+    }
+    else
+    {
+        g_usb1_function_data_count[pipe] -= count;
+    }
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_dma_d0
+* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
+*              : Writes data by DMA transfer using D0FIFO.
+*              : The DMA-ch for using is specified by Userdef_USB_usb1_function_start_dma().
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           : Write end
+*              : DEVDRV_USBF_WRITESHRT          : short data
+*              : DEVDRV_USBF_WRITING            : Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           : Write DMA
+*              : DEVDRV_USBF_FIFOERROR          : FIFO status
+*******************************************************************************/
+static uint16_t usb1_function_write_dma_d0 (uint16_t pipe)
+{
+    uint32_t count;
+    uint16_t size;
+    uint16_t buffer;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t dfacc = 0;
+
+    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                            /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    size  = usb1_function_get_buf_size(pipe);                       /* Data buffer size */
+    count = g_usb1_function_data_count[pipe];
+
+    if (count != 0)
+    {
+        g_usb1_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe;
+
+        if ((count % size) != 0)
+        {
+            g_usb1_function_DmaBval[USB_FUNCTION_D0FIFO] = 1;
+        }
+        else
+        {
+            g_usb1_function_DmaBval[USB_FUNCTION_D0FIFO] = 0;
+        }
+
+        dfacc = usb1_function_set_dfacc_d0(mbw, count);
+
+        if (mbw == USB_FUNCTION_BITMBW_32)
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2;  /* 32bit transfer */
+        }
+        else if (mbw == USB_FUNCTION_BITMBW_16)
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1;  /* 16bit transfer */
+        }
+        else
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0;  /* 8bit transfer */
+        }
+
+        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo   = USB_FUNCTION_D0FIFO_DMA;
+        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].dir    = USB_FUNCTION_BUF2FIFO;
+        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb1_function_data_pointer[pipe];
+        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes  = count;
+
+        Userdef_USB_usb1_function_start_dma(&g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
+
+        usb1_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+        RZA_IO_RegWrite_16(&USB201.D0FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+
+        g_usb1_function_data_count[pipe]    = 0;
+        g_usb1_function_data_pointer[pipe] += count;
+        status = DEVDRV_USBF_WRITEDMA;                              /* DMA write  */
+    }
+    else
+    {
+        if (RZA_IO_RegRead_16(&USB201.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+        {
+            RZA_IO_RegWrite_16(&USB201.D0FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
+        }
+        status = DEVDRV_USBF_WRITESHRT;                             /* Short Packet is end of write */
+    }
+
+    return status;                                                  /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_dma_d1
+* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
+*              : Writes data by DMA transfer using D1FIFO.
+*              : The DMA-ch for using is specified by Userdef_USB_usb1_function_start_dma().
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           : Write end
+*              : DEVDRV_USBF_WRITESHRT          : short data
+*              : DEVDRV_USBF_WRITING            : Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           : Write DMA
+*              : DEVDRV_USBF_FIFOERROR          : FIFO status
+*******************************************************************************/
+static uint16_t usb1_function_write_dma_d1 (uint16_t pipe)
+{
+    uint32_t count;
+    uint16_t size;
+    uint16_t buffer;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t dfacc=0;
+
+    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                            /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    size  = usb1_function_get_buf_size(pipe);                       /* Data buffer size */
+    count = g_usb1_function_data_count[pipe];
+
+    if (count != 0)
+    {
+        g_usb1_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe;
+        if ((count % size) != 0)
+        {
+            g_usb1_function_DmaBval[USB_FUNCTION_D1FIFO] = 1;
+        }
+        else
+        {
+            g_usb1_function_DmaBval[USB_FUNCTION_D1FIFO] = 0;
+        }
+
+        dfacc = usb1_function_set_dfacc_d1(mbw, count);
+
+        if (mbw == USB_FUNCTION_BITMBW_32)
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2;  /* 32bit transfer */
+        }
+        else if (mbw == USB_FUNCTION_BITMBW_16)
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1;  /* 16bit transfer */
+        }
+        else
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0;  /* 8bit transfer */
+        }
+
+        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo   = USB_FUNCTION_D1FIFO_DMA;
+        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].dir    = USB_FUNCTION_BUF2FIFO;
+        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb1_function_data_pointer[pipe];
+        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes  = count;
+
+        Userdef_USB_usb1_function_start_dma(&g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
+
+        usb1_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+        RZA_IO_RegWrite_16(&USB201.D1FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+
+        g_usb1_function_data_count[pipe]    = 0;
+        g_usb1_function_data_pointer[pipe] += count;
+
+        status = DEVDRV_USBF_WRITEDMA;                              /* DMA write  */
+    }
+    else
+    {
+        if (RZA_IO_RegRead_16(&USB201.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+        {
+            RZA_IO_RegWrite_16(&USB201.D1FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
+        }
+        status = DEVDRV_USBF_WRITESHRT;                             /* Short Packet is end of write */
+    }
+
+    return status;                                                  /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_start_receive_transfer
+* Description  : Starts USB data reception using the pipe specified in the argument.
+*              : The FIFO for using is set in the pipe definition table.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+void usb1_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t usefifo;
+
+    usb1_function_clear_bemp_sts(pipe);
+    usb1_function_clear_brdy_sts(pipe);
+    usb1_function_clear_nrdy_sts(pipe);
+
+    usefifo = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+    switch (usefifo)
+    {
+        case USB_FUNCTION_D0FIFO_USE:
+            usb1_function_start_receive_trns_d0(pipe, size, data);
+        break;
+
+        case USB_FUNCTION_D1FIFO_USE:
+            usb1_function_start_receive_trns_d1(pipe, size, data);
+        break;
+
+        case USB_FUNCTION_D0FIFO_DMA:
+            usb1_function_start_receive_dma_d0(pipe, size, data);
+        break;
+
+        case USB_FUNCTION_D1FIFO_DMA:
+            usb1_function_start_receive_dma_d1(pipe, size, data);
+        break;
+
+        default:
+            usb1_function_start_receive_trns_c(pipe, size, data);
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_start_receive_trns_c
+* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by CPU transfer using CFIFO.
+*              : When storing data in the buffer allocated in the pipe specified in the
+*              : argument, BRDY interrupt is generated to read data
+*              : in the interrupt.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_start_receive_trns_c (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb1_function_set_pid_nak(pipe);
+    g_usb1_function_data_count[pipe]   = size;
+    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb1_function_PipeIgnore[pipe]   = 0;
+
+    g_usb1_function_PipeDataSize[pipe] = size;
+    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    mbw = usb1_function_get_mbw(size, (uint32_t)data);
+    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_READ, mbw);
+    USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;
+
+    usb1_function_set_transaction_counter(pipe, size);
+
+    usb1_function_aclrm(pipe);
+
+    usb1_function_enable_nrdy_int(pipe);
+    usb1_function_enable_brdy_int(pipe);
+
+    usb1_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_start_receive_trns_d0
+* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by CPU transfer using D0FIFO.
+*              : This function does not read data from the buffer.
+*              : When storing data in the buffer allocated in the pipe specified
+*              : in the argument, BRDY interrupt is generated to read data in the
+*              : interrupt.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_start_receive_trns_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb1_function_set_pid_nak(pipe);
+    g_usb1_function_data_count[pipe]   = size;
+    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb1_function_PipeIgnore[pipe]   = 0;
+
+    g_usb1_function_PipeDataSize[pipe] = size;
+    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    mbw = usb1_function_get_mbw(size, (uint32_t)data);
+    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+
+    usb1_function_set_transaction_counter(pipe, size);
+
+    usb1_function_aclrm(pipe);
+
+    usb1_function_enable_nrdy_int(pipe);
+    usb1_function_enable_brdy_int(pipe);
+
+    usb1_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_start_receive_trns_d1
+* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by CPU transfer using D1FIFO.
+*              : This function does not read data from the buffer.
+*              : When storing data in the buffer allocated in the pipe specified
+*              : in the argument, BRDY interrupt is generated to read data.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_start_receive_trns_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb1_function_set_pid_nak(pipe);
+    g_usb1_function_data_count[pipe]   = size;
+    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb1_function_PipeIgnore[pipe]   = 0;
+
+    g_usb1_function_PipeDataSize[pipe] = size;
+    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    mbw = usb1_function_get_mbw(size, (uint32_t)data);
+    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+    usb1_function_set_transaction_counter(pipe, size);
+
+    usb1_function_aclrm(pipe);
+
+    usb1_function_enable_nrdy_int(pipe);
+    usb1_function_enable_brdy_int(pipe);
+
+    usb1_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_start_receive_dma_d0
+* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by DMA transfer using D0FIFO.
+*              : This function does not read data from the buffer.
+*              : When storing data in the buffer allocated in the pipe specified
+*              : in the argument, delivered read request to DMAC to read data from
+*              : the buffer by DMAC.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_start_receive_dma_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb1_function_set_pid_nak(pipe);
+    g_usb1_function_data_count[pipe]   = size;
+    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb1_function_PipeIgnore[pipe]   = 0;
+
+    g_usb1_function_PipeDataSize[pipe] = 0;
+    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    mbw = usb1_function_get_mbw(size, (uint32_t)data);
+    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+
+    usb1_function_set_transaction_counter(pipe, size);
+
+    usb1_function_aclrm(pipe);
+
+    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        usb1_function_read_dma(pipe);
+
+        usb1_function_enable_nrdy_int(pipe);
+        usb1_function_enable_brdy_int(pipe);
+    }
+    else
+    {
+        usb1_function_enable_nrdy_int(pipe);
+        usb1_function_enable_brdy_int(pipe);
+    }
+
+    usb1_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_start_receive_dma_d1
+* Description  : Read data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by DMA transfer using D0FIFO.
+*              : This function does not read data from the buffer.
+*              : When storing data in the buffer allocated in the pipe specified
+*              : in the argument, delivered read request to DMAC to read data from
+*              : the buffer by DMAC.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_start_receive_dma_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb1_function_set_pid_nak(pipe);
+    g_usb1_function_data_count[pipe]   = size;
+    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb1_function_PipeIgnore[pipe]   = 0;
+
+    g_usb1_function_PipeDataSize[pipe] = 0;
+    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    mbw = usb1_function_get_mbw(size, (uint32_t)data);
+    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+    usb1_function_set_transaction_counter(pipe, size);
+
+    usb1_function_aclrm(pipe);
+
+    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        usb1_function_read_dma(pipe);
+
+        usb1_function_enable_nrdy_int(pipe);
+        usb1_function_enable_brdy_int(pipe);
+    }
+    else
+    {
+        usb1_function_enable_nrdy_int(pipe);
+        usb1_function_enable_brdy_int(pipe);
+    }
+
+    usb1_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_buffer
+* Description  : Reads data from the buffer allocated in the pipe specified
+*              : in the argument.
+*              : Uses FIF0 set in the pipe definition table.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_read_buffer (uint16_t pipe)
+{
+    uint16_t status;
+
+    g_usb1_function_PipeIgnore[pipe] = 0;
+
+    if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
+    {
+        status = usb1_function_read_buffer_d0(pipe);
+    }
+    else if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
+    {
+        status = usb1_function_read_buffer_d1(pipe);
+    }
+    else
+    {
+        status = usb1_function_read_buffer_c(pipe);
+    }
+
+    switch (status)
+    {
+        case USB_FUNCTION_READING:                                      /* Continue of data read */
+        break;
+
+        case USB_FUNCTION_READEND:                                      /* End of data read */
+        case USB_FUNCTION_READSHRT:                                     /* End of data read */
+            usb1_function_disable_brdy_int(pipe);
+            g_usb1_function_PipeDataSize[pipe]   -= g_usb1_function_data_count[pipe];
+            g_usb1_function_pipe_status[pipe]     = DEVDRV_USBF_PIPE_DONE;
+        break;
+
+        case USB_FUNCTION_READOVER:                                     /* buffer over */
+            if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
+            {
+                USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+            }
+            else if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
+            {
+                USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+            }
+            else
+            {
+                USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;                 /* Clear BCLR */
+            }
+            usb1_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
+            g_usb1_function_PipeDataSize[pipe] -= g_usb1_function_data_count[pipe];
+            g_usb1_function_pipe_status[pipe]   = DEVDRV_USBF_FIFOERROR;
+        break;
+
+        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access status */
+        default:
+            usb1_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
+            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+        break;
+    }
+
+    return status;                                                      /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_buffer_c
+* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by CPU transfer using CFIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_read_buffer_c (uint16_t pipe)
+{
+    uint32_t count;
+    uint32_t dtln;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+
+    mbw    = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb1_function_data_count[pipe] < dtln)                /* Buffer Over ? */
+    {
+        status = USB_FUNCTION_READOVER;
+        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = g_usb1_function_data_count[pipe];
+    }
+    else if (g_usb1_function_data_count[pipe] == dtln)          /* just Receive Size */
+    {
+        status = USB_FUNCTION_READEND;
+        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = dtln;
+
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+        }
+    }
+    else                                                        /* continue Receive data */
+    {
+        status = USB_FUNCTION_READING;
+        count  = dtln;
+
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+    }
+
+    if (count == 0)                                             /* 0 length packet */
+    {
+        USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;                 /* Clear BCLR */
+    }
+    else
+    {
+        usb1_function_read_c_fifo(pipe, (uint16_t)count);
+    }
+
+    g_usb1_function_data_count[pipe] -= count;
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_buffer_d0
+* Description  : Reads data from the buffer allocated in the pipe specified in
+*              : the argument.
+*              : Reads data by CPU transfer using D0FIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_read_buffer_d0 (uint16_t pipe)
+{
+    uint32_t count;
+    uint32_t dtln;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t pipebuf_size;
+
+    mbw    = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb1_function_data_count[pipe] < dtln)                /* Buffer Over ? */
+    {
+        status = USB_FUNCTION_READOVER;
+        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = g_usb1_function_data_count[pipe];
+    }
+    else if (g_usb1_function_data_count[pipe] == dtln)          /* just Receive Size */
+    {
+        status = USB_FUNCTION_READEND;
+        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = dtln;
+
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+        }
+    }
+    else                                                        /* continue Receive data */
+    {
+        status = USB_FUNCTION_READING;
+        count  = dtln;
+
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+        else
+        {
+            pipebuf_size = usb1_function_get_buf_size(pipe);    /* Data buffer size */
+
+            if (count != pipebuf_size)
+            {
+                status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
+                usb1_function_set_pid_nak(pipe);                /* Set NAK */
+            }
+        }
+    }
+
+    if (count == 0)                                             /* 0 length packet */
+    {
+        USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+    }
+    else
+    {
+        usb1_function_read_d0_fifo(pipe, (uint16_t)count);
+    }
+
+    g_usb1_function_data_count[pipe] -= count;
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_buffer_d1
+* Description  : Reads data from the buffer allocated in the pipe specified
+*              : in the argument.
+*              : Reads data by CPU transfer using D1FIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_read_buffer_d1 (uint16_t pipe)
+{
+    uint32_t count;
+    uint32_t dtln;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t pipebuf_size;
+
+    mbw    = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb1_function_data_count[pipe] < dtln)                /* Buffer Over ? */
+    {
+        status = USB_FUNCTION_READOVER;
+        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = g_usb1_function_data_count[pipe];
+    }
+    else if (g_usb1_function_data_count[pipe] == dtln)          /* just Receive Size */
+    {
+        status = USB_FUNCTION_READEND;
+        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = dtln;
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+        }
+    }
+    else                                                        /* continue Receive data */
+    {
+        status = USB_FUNCTION_READING;
+        count  = dtln;
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+        else
+        {
+            pipebuf_size = usb1_function_get_buf_size(pipe);    /* Data buffer size */
+
+            if (count != pipebuf_size)
+            {
+                status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
+                usb1_function_set_pid_nak(pipe);                /* Set NAK */
+            }
+        }
+    }
+
+    if (count == 0)                                             /* 0 length packet */
+    {
+        USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+    }
+    else
+    {
+        usb1_function_read_d1_fifo(pipe, (uint16_t)count);
+    }
+
+    g_usb1_function_data_count[pipe] -= count;
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_dma
+* Description  : Reads data from the buffer allocated in the pipe specified
+*              : in the argument.
+*              : Reads data by DMA transfer using D0FIFO or D1FIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_read_dma (uint16_t pipe)
+{
+    uint16_t status;
+
+    g_usb1_function_PipeIgnore[pipe] = 0;
+    if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
+    {
+        status = usb1_function_read_dma_d0(pipe);
+    }
+    else
+    {
+        status = usb1_function_read_dma_d1(pipe);
+    }
+
+    switch (status)
+    {
+        case USB_FUNCTION_READING:                                      /* Continue of data read */
+        break;
+
+        case USB_FUNCTION_READZERO:                                     /* End of data read */
+            usb1_function_disable_brdy_int(pipe);
+            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+        break;
+
+        case USB_FUNCTION_READEND:                                      /* End of data read */
+        case USB_FUNCTION_READSHRT:                                     /* End of data read */
+            usb1_function_disable_brdy_int(pipe);
+
+            if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+            {
+                g_usb1_function_PipeDataSize[pipe] -= g_usb1_function_data_count[pipe];
+            }
+        break;
+
+        case USB_FUNCTION_READOVER:                                     /* buffer over */
+            usb1_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
+
+            if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+            {
+                g_usb1_function_PipeDataSize[pipe] -= g_usb1_function_data_count[pipe];
+            }
+            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+        break;
+
+        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access status */
+        default:
+            usb1_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
+            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+        break;
+    }
+
+    return status;                                                      /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_dma_d0
+* Description  : Writes data in the buffer allocated in the pipe specified
+*              : in the argument.
+*              : Reads data by DMA transfer using D0FIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READZERO         ; zero data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+static uint16_t usb1_function_read_dma_d0 (uint16_t pipe)
+{
+    uint32_t count;
+    uint32_t dtln;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t dfacc = 0;
+    uint16_t pipebuf_size;
+
+    g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
+
+    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+
+    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        count  = g_usb1_function_data_count[pipe];
+        status = USB_FUNCTION_READING;
+    }
+    else
+    {
+        buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
+
+        if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+        {
+            return DEVDRV_USBF_FIFOERROR;
+        }
+
+        dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+        mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
+
+        if (g_usb1_function_data_count[pipe] < dtln)                /* Buffer Over ? */
+        {
+            status = USB_FUNCTION_READOVER;
+            count  = g_usb1_function_data_count[pipe];
+        }
+        else if (g_usb1_function_data_count[pipe] == dtln)          /* just Receive Size */
+        {
+            status = USB_FUNCTION_READEND;
+            count  = dtln;
+            if (count == 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            }
+
+            if ((count % mxps) != 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            }
+        }
+        else                                                        /* continue Receive data */
+        {
+            status = USB_FUNCTION_READING;
+            count  = dtln;
+
+            if (count == 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            }
+
+            if ((count % mxps) != 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            }
+            else
+            {
+                pipebuf_size = usb1_function_get_buf_size(pipe);    /* Data buffer size */
+                if (count != pipebuf_size)
+                {
+                    status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
+                }
+            }
+        }
+    }
+
+    if (count == 0)                                                 /* 0 length packet */
+    {
+        if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+        {
+            USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+            status = USB_FUNCTION_READZERO;                         /* Null Packet receive */
+        }
+        else
+        {
+            usb1_function_set_curpipe(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
+                                                                    /* transaction counter No set */
+                                                                    /* FRDY = 1, DTLN = 0 -> BRDY */
+        }
+    }
+    else
+    {
+        dfacc = usb1_function_set_dfacc_d0(mbw, count);
+
+        if (mbw == USB_FUNCTION_BITMBW_32)
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2;  /* 32bit transfer */
+        }
+        else if (mbw == USB_FUNCTION_BITMBW_16)
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1;  /* 16bit transfer */
+        }
+        else
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0;  /* 8bit transfer */
+        }
+
+        g_usb1_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe;        /* not use in read operation */
+        g_usb1_function_DmaBval[USB_FUNCTION_D0FIFO] = 0;           /* not use in read operation */
+
+        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo   = USB_FUNCTION_D0FIFO_DMA;
+        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].dir    = USB_FUNCTION_FIFO2BUF;
+        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb1_function_data_pointer[pipe];
+        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes  = count;
+
+        if (status == USB_FUNCTION_READING)
+        {
+            g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSY;
+        }
+        else
+        {
+            g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSYEND;
+        }
+
+        Userdef_USB_usb1_function_start_dma(&g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
+
+        usb1_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+        RZA_IO_RegWrite_16(&USB201.D0FIFOSEL,
+                            1,
+                            USB_DnFIFOSEL_DREQE_SHIFT,
+                            USB_DnFIFOSEL_DREQE);
+    }
+
+    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+    {
+        g_usb1_function_data_count[pipe]   -= count;
+        g_usb1_function_data_pointer[pipe] += count;
+        g_usb1_function_PipeDataSize[pipe] += count;
+    }
+
+    return status;                                                  /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_dma_d1
+* Description  : Reads data from the buffer allocated in the pipe specified in
+*              : the argument.
+*              : Reads data by DMA transfer using D1FIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READZERO         ; zero data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+static uint16_t usb1_function_read_dma_d1 (uint16_t pipe)
+{
+    uint32_t count;
+    uint32_t dtln;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t dfacc = 0;
+    uint16_t pipebuf_size;
+
+    g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
+
+    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+
+    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        count  = g_usb1_function_data_count[pipe];
+        status = USB_FUNCTION_READING;
+    }
+    else
+    {
+        buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
+        if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+        {
+            return DEVDRV_USBF_FIFOERROR;
+        }
+
+        dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+        mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
+
+        if (g_usb1_function_data_count[pipe] < dtln)                /* Buffer Over ? */
+        {
+            status = USB_FUNCTION_READOVER;
+            count  = g_usb1_function_data_count[pipe];
+        }
+        else if (g_usb1_function_data_count[pipe] == dtln)          /* just Receive Size */
+        {
+            status = USB_FUNCTION_READEND;
+            count  = dtln;
+            if (count == 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            }
+
+            if ((count % mxps) != 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            }
+        }
+        else                                                        /* continue Receive data */
+        {
+            status = USB_FUNCTION_READING;
+            count  = dtln;
+            if (count == 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            }
+
+            if ((count % mxps) != 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            }
+            else
+            {
+                pipebuf_size = usb1_function_get_buf_size(pipe);    /* Data buffer size */
+                if (count != pipebuf_size)
+                {
+                    status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
+                }
+            }
+        }
+    }
+
+    if (count == 0)                                                 /* 0 length packet */
+    {
+        if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+        {
+            USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+            status = USB_FUNCTION_READZERO;                         /* Null Packet receive */
+        }
+        else
+        {
+            usb1_function_set_curpipe(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
+                                                                    /* transaction counter No set */
+                                                                    /* FRDY = 1, DTLN = 0 -> BRDY */
+        }
+    }
+    else
+    {
+        dfacc = usb1_function_set_dfacc_d1(mbw, count);
+
+        if (mbw == USB_FUNCTION_BITMBW_32)
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2;  /* 32bit transfer */
+        }
+        else if (mbw == USB_FUNCTION_BITMBW_16)
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1;  /* 16bit transfer */
+        }
+        else
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0;  /* 8bit transfer */
+        }
+
+        g_usb1_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe;        /* not use in read operation */
+        g_usb1_function_DmaBval[USB_FUNCTION_D1FIFO] = 0;           /* not use in read operation */
+
+        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo   = USB_FUNCTION_D1FIFO_DMA;
+        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].dir    = USB_FUNCTION_FIFO2BUF;
+        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb1_function_data_pointer[pipe];
+        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes  = count;
+
+        if (status == USB_FUNCTION_READING)
+        {
+            g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSY;
+        }
+        else
+        {
+            g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSYEND;
+        }
+
+        Userdef_USB_usb1_function_start_dma(&g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
+
+        usb1_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+        RZA_IO_RegWrite_16(&USB201.D1FIFOSEL,
+                            1,
+                            USB_DnFIFOSEL_DREQE_SHIFT,
+                            USB_DnFIFOSEL_DREQE);
+    }
+
+    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+    {
+        g_usb1_function_data_count[pipe]   -= count;
+        g_usb1_function_data_pointer[pipe] += count;
+        g_usb1_function_PipeDataSize[pipe] += count;
+    }
+
+    return status;                                                  /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_change_fifo_port
+* Description  : Allocates FIF0 specified by the argument in the pipe assigned
+*              : by the argument. After allocating FIF0, waits in the software
+*              : till the corresponding pipe becomes ready.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t fifosel   ; Select FIFO
+*              : uint16_t isel      ; FIFO Access Direction
+*              : uint16_t mbw       ; FIFO Port Access Bit Width
+* Return Value : DEVDRV_USBF_FIFOERROR          ; Error
+*              : Others            ; CFIFOCTR/D0FIFOCTR/D1FIFOCTR Register Value
+*******************************************************************************/
+uint16_t usb1_function_change_fifo_port (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
+{
+    uint16_t buffer;
+    uint32_t loop;
+    volatile uint32_t loop2;
+
+    usb1_function_set_curpipe(pipe, fifosel, isel, mbw);
+
+    for (loop = 0; loop < 4; loop++)
+    {
+        switch (fifosel)
+        {
+            case USB_FUNCTION_CUSE:
+                buffer = USB201.CFIFOCTR;
+            break;
+
+            case USB_FUNCTION_D0USE:
+            case USB_FUNCTION_D0DMA:
+                buffer = USB201.D0FIFOCTR;
+            break;
+
+            case USB_FUNCTION_D1USE:
+            case USB_FUNCTION_D1DMA:
+                buffer = USB201.D1FIFOCTR;
+            break;
+
+            default:
+                buffer = 0;
+            break;
+        }
+
+        if ((buffer & USB_FUNCTION_BITFRDY) == USB_FUNCTION_BITFRDY)
+        {
+            return buffer;
+        }
+
+        loop2 = 25;
+        while (loop2-- > 0)
+        {
+            /* wait */
+        }
+    }
+
+    return DEVDRV_USBF_FIFOERROR;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_curpipe
+* Description  : Allocates FIF0 specified by the argument in the pipe assigned
+*              : by the argument.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t fifosel   ; Select FIFO
+*              : uint16_t isel      ; FIFO Access Direction
+*              : uint16_t mbw       ; FIFO Port Access Bit Width
+* Return Value : none
+*******************************************************************************/
+void usb1_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
+{
+    uint16_t buffer;
+    uint32_t loop;
+    volatile uint32_t loop2;
+
+    g_usb1_function_mbw[pipe] = mbw;
+
+    switch (fifosel)
+    {
+        case USB_FUNCTION_CUSE:
+            buffer  = USB201.CFIFOSEL;
+            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
+            buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
+            USB201.CFIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(isel | pipe | mbw);
+            USB201.CFIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        case USB_FUNCTION_D0DMA:
+        case USB_FUNCTION_D0USE:
+            buffer  = USB201.D0FIFOSEL;
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+            USB201.D0FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+                        (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(pipe | mbw);
+            USB201.D0FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+                        (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        case USB_FUNCTION_D1DMA:
+        case USB_FUNCTION_D1USE:
+            buffer  = USB201.D1FIFOSEL;
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+            USB201.D1FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+                        (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(pipe | mbw);
+            USB201.D1FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+                        (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        default:
+        break;
+    }
+
+    /* Cautions !!!
+     * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
+     * For details, please look at the data sheet.   */
+    loop2 = 100;
+
+    while (loop2-- > 0)
+    {
+        /* wait */
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_curpipe2
+* Description  : Allocates FIF0 specified by the argument in the pipe assigned
+*              : by the argument.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t fifosel   ; Select FIFO
+*              : uint16_t isel      ; FIFO Access Direction
+*              : uint16_t mbw       ; FIFO Port Access Bit Width
+*              : uint16_t dfacc     ; DFACC Access mode
+* Return Value : none
+*******************************************************************************/
+void usb1_function_set_curpipe2 (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc)
+{
+    uint16_t buffer;
+    uint32_t loop;
+#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
+    uint32_t dummy;
+#endif
+    volatile uint32_t loop2;
+
+    g_usb1_function_mbw[pipe] = mbw;
+
+    switch (fifosel)
+    {
+        case USB_FUNCTION_CUSE:
+            buffer  = USB201.CFIFOSEL;
+            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
+            buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
+            USB201.CFIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(isel | pipe | mbw);
+            USB201.CFIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        case USB_FUNCTION_D0DMA:
+        case USB_FUNCTION_D0USE:
+            buffer  = USB201.D0FIFOSEL;
+#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+
+            if (dfacc != 0)
+            {
+                buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
+            }
+#else
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+#endif
+            USB201.D0FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+
+#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
+            if (dfacc != 0)
+            {
+                dummy = USB201.D0FIFO.UINT32;
+            }
+#endif
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(pipe | mbw);
+            USB201.D0FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        case USB_FUNCTION_D1DMA:
+        case USB_FUNCTION_D1USE:
+            buffer  = USB201.D1FIFOSEL;
+#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+
+            if (dfacc != 0)
+            {
+                buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
+            }
+#else
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+#endif
+            USB201.D1FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
+            if (dfacc != 0)
+            {
+                dummy = USB201.D1FIFO.UINT32;
+                loop = dummy;                   // avoid warning.
+            }
+#endif
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(pipe | mbw);
+            USB201.D1FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        default:
+        break;
+    }
+
+    /* Cautions !!!
+     * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
+     * For details, please look at the data sheet.   */
+    loop2 = 100;
+
+    while (loop2-- > 0)
+    {
+        /* wait */
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_c_fifo
+* Description  : Writes data in CFIFO.
+*              : Writes data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating CFIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb1_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_write_c_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            USB201.CFIFO.UINT8[HH] = *g_usb1_function_data_pointer[pipe];
+            g_usb1_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)(count / 2); even; --even)
+        {
+            USB201.CFIFO.UINT16[H] = *((uint16_t *)g_usb1_function_data_pointer[pipe]);
+            g_usb1_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)(count / 4); even; --even)
+        {
+            USB201.CFIFO.UINT32 = *((uint32_t *)g_usb1_function_data_pointer[pipe]);
+            g_usb1_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_c_fifo
+* Description  : Reads data from CFIFO.
+*              : Reads data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating CFIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb1_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_read_c_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            *g_usb1_function_data_pointer[pipe] = USB201.CFIFO.UINT8[HH];
+            g_usb1_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)((count + 1) / 2); even; --even)
+        {
+            *((uint16_t *)g_usb1_function_data_pointer[pipe]) = USB201.CFIFO.UINT16[H];
+            g_usb1_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)((count + 3) / 4); even; --even)
+        {
+            *((uint32_t *)g_usb1_function_data_pointer[pipe]) = USB201.CFIFO.UINT32;
+            g_usb1_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_d0_fifo
+* Description  : Writes data in D0FIFO.
+*              : Writes data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating CFIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb1_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_write_d0_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            USB201.D0FIFO.UINT8[HH] = *g_usb1_function_data_pointer[pipe];
+            g_usb1_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)(count / 2); even; --even)
+        {
+            USB201.D0FIFO.UINT16[H] = *((uint16_t *)g_usb1_function_data_pointer[pipe]);
+            g_usb1_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)(count / 4); even; --even)
+        {
+            USB201.D0FIFO.UINT32 = *((uint32_t *)g_usb1_function_data_pointer[pipe]);
+            g_usb1_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_d0_fifo
+* Description  : Reads data from D0FIFO.
+*              : Reads data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating DOFIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb1_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_read_d0_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            *g_usb1_function_data_pointer[pipe] = USB201.D0FIFO.UINT8[HH];
+            g_usb1_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)((count + 1) / 2); even; --even)
+        {
+            *((uint16_t *)g_usb1_function_data_pointer[pipe]) = USB201.D0FIFO.UINT16[H];
+            g_usb1_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)((count + 3) / 4); even; --even)
+        {
+            *((uint32_t *)g_usb1_function_data_pointer[pipe]) = USB201.D0FIFO.UINT32;
+            g_usb1_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_d1_fifo
+* Description  : Writes data in D1FIFO.
+*              : Writes data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating D1FIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb1_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_write_d1_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            USB201.D1FIFO.UINT8[HH] = *g_usb1_function_data_pointer[pipe];
+            g_usb1_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)(count / 2); even; --even)
+        {
+            USB201.D1FIFO.UINT16[H] = *((uint16_t *)g_usb1_function_data_pointer[pipe]);
+            g_usb1_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)(count / 4); even; --even)
+        {
+            USB201.D1FIFO.UINT32 = *((uint32_t *)g_usb1_function_data_pointer[pipe]);
+            g_usb1_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_d1_fifo
+* Description  : Reads data from D1FIFO.
+*              : Reads data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating D1FIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb1_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_read_d1_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            *g_usb1_function_data_pointer[pipe] = USB201.D1FIFO.UINT8[HH];
+            g_usb1_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)((count + 1) / 2); even; --even)
+        {
+            *((uint16_t *)g_usb1_function_data_pointer[pipe]) = USB201.D1FIFO.UINT16[H];
+            g_usb1_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)((count + 3) / 4); even; --even)
+        {
+            *((uint32_t *)g_usb1_function_data_pointer[pipe]) = USB201.D1FIFO.UINT32;
+            g_usb1_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_com_get_dmasize
+* Description  : Calculates access width of DMA transfer by the argument to
+*              : return as the Return Value.
+* Arguments    : uint32_t trncount   : transfer byte
+*              : uint32_t dtptr      : transfer data pointer
+* Return Value : DMA transfer size    : 0   8bit
+*              :                      : 1  16bit
+*              :                      : 2  32bit
+*******************************************************************************/
+static uint32_t usb1_function_com_get_dmasize (uint32_t trncount, uint32_t dtptr)
+{
+    uint32_t size;
+
+    if (((trncount & 0x0001) != 0) || ((dtptr & 0x00000001) != 0))
+    {
+        /*  When transfer byte count is odd         */
+        /* or transfer data area is 8-bit alignment */
+        size = 0;           /* 8bit */
+    }
+    else if (((trncount & 0x0003) != 0) || ((dtptr & 0x00000003) != 0))
+    {
+        /* When the transfer byte count is multiples of 2 */
+        /* or the transfer data area is 16-bit alignment */
+        size = 1;           /* 16bit */
+    }
+    else
+    {
+        /* When the transfer byte count is multiples of 4 */
+        /* or the transfer data area is 32-bit alignment */
+        size = 2;           /* 32bit */
+    }
+
+    return size;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_get_mbw
+* Description  : Calculates access width of DMA to return the value set in MBW.
+* Arguments    : uint32_t trncount   : transfer byte
+*              : uint32_t dtptr      : transfer data pointer
+* Return Value : FIFO transfer size   : USB_FUNCTION_BITMBW_8    8bit
+*              :                      : USB_FUNCTION_BITMBW_16  16bit
+*              :                      : USB_FUNCTION_BITMBW_32  32bit
+*******************************************************************************/
+uint16_t usb1_function_get_mbw (uint32_t trncount, uint32_t dtptr)
+{
+    uint32_t size;
+    uint16_t mbw;
+
+    size = usb1_function_com_get_dmasize(trncount, dtptr);
+
+    if (size == 0)
+    {
+        /* 8bit */
+        mbw = USB_FUNCTION_BITMBW_8;
+    }
+    else if (size == 1)
+    {
+        /* 16bit */
+        mbw = USB_FUNCTION_BITMBW_16;
+    }
+    else
+    {
+        /* 32bit */
+        mbw = USB_FUNCTION_BITMBW_32;
+    }
+
+    return mbw;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_transaction_counter
+* Description  : Sets transaction counter by the argument(PIPEnTRN).
+*              : Clears transaction before setting to enable transaction counter setting.
+* Arguments    : uint16_t pipe     ; Pipe number
+*              : uint32_t bsize    : Data transfer size
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_set_transaction_counter (uint16_t pipe, uint32_t bsize)
+{
+    uint16_t mxps;
+    uint16_t cnt;
+
+    if (bsize  == 0)
+    {
+        return;
+    }
+
+    mxps = usb1_function_get_mxps(pipe);            /* Max Packet Size */
+
+    if ((bsize % mxps) == 0)
+    {
+        cnt = (uint16_t)(bsize / mxps);
+    }
+    else
+    {
+        cnt = (uint16_t)((bsize / mxps) + 1);
+    }
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB201.PIPE1TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPE1TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPE1TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB201.PIPE2TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPE2TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPE2TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB201.PIPE3TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPE3TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPE3TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB201.PIPE4TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPE4TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPE4TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB201.PIPE5TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPE5TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPE5TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB201.PIPE9TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPE9TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPE9TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB201.PIPEATRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPEATRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPEATRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB201.PIPEBTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPEBTRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPEBTRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB201.PIPECTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPECTRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPECTRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB201.PIPEDTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPEDTRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPEDTRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB201.PIPEETRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPEETRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPEETRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB201.PIPEFTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPEFTRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPEFTRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_clear_transaction_counter
+* Description  : Clears the transaction counter by the argument.
+*              : After executing this function, the transaction counter is invalid.
+* Arguments    : uint16_t pipe     ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_clear_transaction_counter (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB201.PIPE1TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPE1TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB201.PIPE2TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPE2TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB201.PIPE3TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPE3TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB201.PIPE4TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPE4TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB201.PIPE5TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPE5TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB201.PIPE9TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPE9TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB201.PIPEATRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPEATRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB201.PIPEBTRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPEBTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB201.PIPECTRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPECTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB201.PIPEDTRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPEDTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB201.PIPEETRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPEETRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB201.PIPEFTRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPEFTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_stop_transfer
+* Description  : Stops the USB transfer in the pipe specified by the argument.
+*              : After stopping the USB transfer, clears the buffer allocated in
+*              : the pipe.
+*              : After executing this function, allocation in FIF0 becomes USB_FUNCTION_PIPE0;
+*              : invalid. After executing this function, BRDY/NRDY/BEMP interrupt
+*              : in the corresponding pipe becomes invalid. Sequence bit is also
+*              : cleared.
+* Arguments    : uint16_t  pipe     ; Pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_stop_transfer (uint16_t pipe)
+{
+    uint16_t usefifo;
+    uint32_t remain;
+    uint16_t fifo;
+
+    usb1_function_set_pid_nak(pipe);
+
+    usefifo = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+    switch (usefifo)
+    {
+        case USB_FUNCTION_D0FIFO_USE:
+            usb1_function_clear_transaction_counter(pipe);
+            USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
+            fifo = USB_FUNCTION_D0USE;
+        break;
+
+        case USB_FUNCTION_D1FIFO_USE:
+            usb1_function_clear_transaction_counter(pipe);
+            USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
+            fifo = USB_FUNCTION_D1USE;
+        break;
+
+        case USB_FUNCTION_D0FIFO_DMA:
+            remain = Userdef_USB_usb1_function_stop_dma0();
+            usb1_function_dma_stop_d0(pipe, remain);
+            usb1_function_clear_transaction_counter(pipe);
+            USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
+            fifo = USB_FUNCTION_D0DMA;
+        break;
+
+        case USB_FUNCTION_D1FIFO_DMA:
+            remain = Userdef_USB_usb1_function_stop_dma1();
+            usb1_function_dma_stop_d1(pipe, remain);
+            usb1_function_clear_transaction_counter(pipe);
+            USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
+            fifo = USB_FUNCTION_D1DMA;
+        break;
+
+        default:
+            usb1_function_clear_transaction_counter(pipe);
+            USB201.CFIFOCTR =  USB_FUNCTION_BITBCLR;        /* Buffer Clear */
+            fifo = USB_FUNCTION_CUSE;
+        break;
+    }
+
+    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, fifo, DEVDRV_USBF_NO, USB_FUNCTION_BITMBW_16);
+
+    /* Interrupt of pipe set is disabled */
+    usb1_function_disable_brdy_int(pipe);
+    usb1_function_disable_nrdy_int(pipe);
+    usb1_function_disable_bemp_int(pipe);
+
+    usb1_function_aclrm(pipe);
+    usb1_function_set_csclr(pipe);
+
+    if ( g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT )
+    {
+        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_dfacc_d0
+* Description  : Sets the DFACC setting value in D0FIFO using the transfer size.
+* Arguments    : uint16_t mbw     ; MBW
+*              : uint16_t count   ; data count
+* Return Value : DFACC Access mode
+*******************************************************************************/
+static uint16_t usb1_function_set_dfacc_d0 (uint16_t mbw, uint32_t count)
+{
+    uint16_t dfacc = 0;
+
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+    RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                        0,
+                        USB_DnFBCFG_DFACC_SHIFT,
+                        USB_DnFBCFG_DFACC);
+    RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                        0,
+                        USB_DnFBCFG_TENDE_SHIFT,
+                        USB_DnFBCFG_TENDE);
+    dfacc = 0;
+#else
+    if (mbw == USB_FUNCTION_BITMBW_32)
+    {
+        if ((count % 32) == 0)
+        {
+            /* 32byte transfer */
+            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                                2,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 2;
+        }
+        else if ((count % 16) == 0)
+        {
+            /* 16byte transfer */
+            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                                1,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 1;
+        }
+        else
+        {
+            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                                0,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 0;
+        }
+    }
+    else if (mbw == USB_FUNCTION_BITMBW_16)
+    {
+        RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                            0,
+                            USB_DnFBCFG_DFACC_SHIFT,
+                            USB_DnFBCFG_DFACC);
+        RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                            0,
+                            USB_DnFBCFG_TENDE_SHIFT,
+                            USB_DnFBCFG_TENDE);
+        dfacc = 0;
+    }
+    else
+    {
+        RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                            0,
+                            USB_DnFBCFG_DFACC_SHIFT,
+                            USB_DnFBCFG_DFACC);
+        RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                            0,
+                            USB_DnFBCFG_TENDE_SHIFT,
+                            USB_DnFBCFG_TENDE);
+        dfacc = 0;
+    }
+#endif
+    return dfacc;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_dfacc_d1
+* Description  : Set the DFACC setting value in D1FIFO using the transfer size.
+* Arguments    : uint16_t mbw     ; MBW
+*              : uint16_t count   ; data count
+* Return Value : DFACC Access mode
+*******************************************************************************/
+static uint16_t usb1_function_set_dfacc_d1 (uint16_t mbw, uint32_t count)
+{
+    uint16_t dfacc = 0;
+
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+    RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                        0,
+                        USB_DnFBCFG_DFACC_SHIFT,
+                        USB_DnFBCFG_DFACC);
+    RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                        0,
+                        USB_DnFBCFG_TENDE_SHIFT,
+                        USB_DnFBCFG_TENDE);
+    dfacc = 0;
+#else
+    if (mbw == USB_FUNCTION_BITMBW_32)
+    {
+        if ((count % 32) == 0)
+        {
+            /* 32byte transfer */
+            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                                2,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 2;
+        }
+        else if ((count % 16) == 0)
+        {
+            /* 16byte transfer */
+            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                                1,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 1;
+        }
+        else
+        {
+            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                                0,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 0;
+        }
+    }
+    else if (mbw == USB_FUNCTION_BITMBW_16)
+    {
+        RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                            0,
+                            USB_DnFBCFG_DFACC_SHIFT,
+                            USB_DnFBCFG_DFACC);
+        RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                            0,
+                            USB_DnFBCFG_TENDE_SHIFT,
+                            USB_DnFBCFG_TENDE);
+        dfacc = 0;
+    }
+    else
+    {
+        RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                            0,
+                            USB_DnFBCFG_DFACC_SHIFT,
+                            USB_DnFBCFG_DFACC);
+        RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                            0,
+                            USB_DnFBCFG_TENDE_SHIFT,
+                            USB_DnFBCFG_TENDE);
+        dfacc = 0;
+    }
+#endif
+
+    return dfacc;
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_dma.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_dma.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,346 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_dma.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb1_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+static void usb1_function_dmaint(uint16_t fifo);
+static void usb1_function_dmaint_buf2fifo(uint16_t pipe);
+static void usb1_function_dmaint_fifo2buf(uint16_t pipe);
+
+
+/*******************************************************************************
+* Function Name: usb1_function_dma_stop_d0
+* Description  : D0FIFO DMA stop
+* Arguments    : uint16_t pipe      : pipe number
+*              : uint32_t remain    : transfer byte
+* Return Value : none
+*******************************************************************************/
+void usb1_function_dma_stop_d0 (uint16_t pipe, uint32_t remain)
+{
+    uint16_t dtln;
+    uint16_t dfacc;
+    uint16_t buffer;
+    uint16_t sds_b = 1;
+
+    dfacc = RZA_IO_RegRead_16(&USB201.D0FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
+
+    if (dfacc == 2)
+    {
+        sds_b = 32;
+    }
+    else if (dfacc == 1)
+    {
+        sds_b = 16;
+    }
+    else
+    {
+        if (g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 2)
+        {
+            sds_b = 4;
+        }
+        else if (g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 1)
+        {
+            sds_b = 2;
+        }
+        else
+        {
+            sds_b = 1;
+        }
+    }
+
+    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
+        {
+            buffer = USB201.D0FIFOCTR;
+            dtln   = (buffer & USB_FUNCTION_BITDTLN);
+
+            if ((dtln % sds_b) != 0)
+            {
+                remain += (sds_b - (dtln % sds_b));
+            }
+            g_usb1_function_PipeDataSize[pipe] = (g_usb1_function_data_count[pipe] - remain);
+            g_usb1_function_data_count[pipe]   = remain;
+        }
+    }
+
+    RZA_IO_RegWrite_16(&USB201.D0FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_dma_stop_d1
+* Description  : D1FIFO DMA stop
+* Arguments    : uint16_t pipe      : pipe number
+*              : uint32_t remain    : transfer byte
+* Return Value : none
+*******************************************************************************/
+void usb1_function_dma_stop_d1 (uint16_t pipe, uint32_t remain)
+{
+    uint16_t dtln;
+    uint16_t dfacc;
+    uint16_t buffer;
+    uint16_t sds_b = 1;
+
+    dfacc = RZA_IO_RegRead_16(&USB201.D1FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
+
+    if (dfacc == 2)
+    {
+        sds_b = 32;
+    }
+    else if (dfacc == 1)
+    {
+        sds_b = 16;
+    }
+    else
+    {
+        if (g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 2)
+        {
+            sds_b = 4;
+        }
+        else if (g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 1)
+        {
+            sds_b = 2;
+        }
+        else
+        {
+            sds_b = 1;
+        }
+    }
+
+    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
+        {
+            buffer = USB201.D1FIFOCTR;
+            dtln   = (buffer & USB_FUNCTION_BITDTLN);
+
+            if ((dtln % sds_b) != 0)
+            {
+                remain += (sds_b - (dtln % sds_b));
+            }
+            g_usb1_function_PipeDataSize[pipe] = (g_usb1_function_data_count[pipe] - remain);
+            g_usb1_function_data_count[pipe]   = remain;
+        }
+    }
+
+    RZA_IO_RegWrite_16(&USB201.D1FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_dma_interrupt_d0fifo
+* Description  : This function is DMA interrupt handler entry.
+*              : Execute usb1_function_dmaint() after disabling DMA interrupt in this function.
+*              : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D0FIFO_DMA is
+*              : specified by dma->fifo.
+*              : Register this function as DMA complete interrupt.
+* Arguments    : uint32_t int_sense ; Interrupts detection mode
+*              :                    ;  INTC_LEVEL_SENSITIVE : Level sense
+*              :                    ;  INTC_EDGE_TRIGGER : Edge trigger
+* Return Value : none
+*******************************************************************************/
+void usb1_function_dma_interrupt_d0fifo (uint32_t int_sense)
+{
+    usb1_function_dmaint(USB_FUNCTION_D0FIFO);
+    g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_dma_interrupt_d1fifo
+* Description  : This function is DMA interrupt handler entry.
+*              : Execute usb1_function_dmaint() after disabling DMA interrupt in this function.
+*              : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D1FIFO_DMA is
+*              : specified by dma->fifo.
+*              : Register this function as DMA complete interrupt.
+* Arguments    : uint32_t int_sense ; Interrupts detection mode
+*              :                    ;  INTC_LEVEL_SENSITIVE : Level sense
+*              :                    ;  INTC_EDGE_TRIGGER : Edge trigger
+* Return Value : none
+*******************************************************************************/
+void usb1_function_dma_interrupt_d1fifo (uint32_t int_sense)
+{
+    usb1_function_dmaint(USB_FUNCTION_D1FIFO);
+    g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_dmaint
+* Description  : This function is DMA transfer end interrupt
+* Arguments    : uint16_t fifo  ; fifo number
+*              :                ;  USB_FUNCTION_D0FIFO
+*              :                ;  USB_FUNCTION_D1FIFO
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_dmaint (uint16_t fifo)
+{
+    uint16_t pipe;
+
+    pipe = g_usb1_function_DmaPipe[fifo];
+
+    if (g_usb1_function_DmaInfo[fifo].dir == USB_FUNCTION_BUF2FIFO)
+    {
+        usb1_function_dmaint_buf2fifo(pipe);
+    }
+    else
+    {
+        usb1_function_dmaint_fifo2buf(pipe);
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_dmaint_fifo2buf
+* Description  : Executes read completion from FIFO by DMAC.
+* Arguments    : uint16_t pipe      : pipe number
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_dmaint_fifo2buf (uint16_t pipe)
+{
+    uint32_t remain;
+    uint16_t useport;
+
+    if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
+    {
+        useport = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+        if (useport == USB_FUNCTION_D0FIFO_DMA)
+        {
+            remain = Userdef_USB_usb1_function_stop_dma0();
+            usb1_function_dma_stop_d0(pipe, remain);
+
+            if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+            {
+                if (g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] == USB_FUNCTION_DMA_BUSYEND)
+                {
+                    USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;
+                    g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                }
+                else
+                {
+                    usb1_function_enable_brdy_int(pipe);
+                }
+            }
+        }
+        else
+        {
+            remain = Userdef_USB_usb1_function_stop_dma1();
+            usb1_function_dma_stop_d1(pipe, remain);
+
+            if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+            {
+                if (g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] == USB_FUNCTION_DMA_BUSYEND)
+                {
+                    USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;
+                    g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                }
+                else
+                {
+                    usb1_function_enable_brdy_int(pipe);
+                }
+            }
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_dmaint_buf2fifo
+* Description  : Executes write completion in FIFO by DMAC.
+* Arguments    : uint16_t pipe      : pipe number
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_dmaint_buf2fifo (uint16_t pipe)
+{
+    uint32_t remain;
+    uint16_t useport;
+
+    useport = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+    if (useport == USB_FUNCTION_D0FIFO_DMA)
+    {
+        remain = Userdef_USB_usb1_function_stop_dma0();
+        usb1_function_dma_stop_d0(pipe, remain);
+
+        if (g_usb1_function_DmaBval[USB_FUNCTION_D0FIFO] != 0)
+        {
+            RZA_IO_RegWrite_16(&USB201.D0FIFOCTR,
+                                1,
+                                USB_DnFIFOCTR_BVAL_SHIFT,
+                                USB_DnFIFOCTR_BVAL);
+        }
+    }
+    else
+    {
+        remain = Userdef_USB_usb1_function_stop_dma1();
+        usb1_function_dma_stop_d1(pipe, remain);
+
+        if (g_usb1_function_DmaBval[USB_FUNCTION_D1FIFO] != 0)
+        {
+            RZA_IO_RegWrite_16(&USB201.D1FIFOCTR,
+                                1,
+                                USB_DnFIFOCTR_BVAL_SHIFT,
+                                USB_DnFIFOCTR_BVAL);
+        }
+    }
+
+    usb1_function_enable_bemp_int(pipe);
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_intrn.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_intrn.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,249 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_intrn.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb1_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb1_function_brdy_int
+* Description  : Executes BRDY interrupt(USB_FUNCTION_PIPE1-9).
+*              : According to the pipe that interrupt is generated in,
+*              : reads/writes buffer allocated in the pipe.
+*              : This function is executed in the BRDY interrupt handler.
+*              : This function clears BRDY interrupt status and BEMP interrupt
+*              : status.
+* Arguments    : uint16_t Status       ; BRDYSTS Register Value
+*              : uint16_t Int_enbl     ; BRDYENB Register Value
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb1_function_brdy_int (uint16_t status, uint16_t int_enb)
+{
+    uint32_t int_sense = 0;
+    uint16_t pipe;
+    uint16_t pipebit;
+
+    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+    {
+        pipebit = g_usb1_function_bit_set[pipe];
+
+        if ((status & pipebit) && (int_enb & pipebit))
+        {
+            USB201.BRDYSTS = (uint16_t)~pipebit;
+            USB201.BEMPSTS = (uint16_t)~pipebit;
+            if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
+            {
+                if (g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] != USB_FUNCTION_DMA_READY)
+                {
+                    usb1_function_dma_interrupt_d0fifo(int_sense);
+                }
+
+                if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+                {
+                    usb1_function_read_dma(pipe);
+                    usb1_function_disable_brdy_int(pipe);
+                }
+                else
+                {
+                    USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;
+                    g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                }
+            }
+            else if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA)
+            {
+                if (g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] != USB_FUNCTION_DMA_READY)
+                {
+                    usb1_function_dma_interrupt_d1fifo(int_sense);
+                }
+
+                if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+                {
+                    usb1_function_read_dma(pipe);
+                    usb1_function_disable_brdy_int(pipe);
+                }
+                else
+                {
+                    USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;
+                    g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                }
+            }
+            else
+            {
+                if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0)
+                {
+                    usb1_function_read_buffer(pipe);
+                }
+                else
+                {
+                    usb1_function_write_buffer(pipe);
+                }
+            }
+        }
+    }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_nrdy_int
+* Description  : Executes NRDY interrupt(USB_FUNCTION_PIPE1-9).
+*              : Checks NRDY interrupt cause by PID. When the cause if STALL,
+*              : regards the pipe state as STALL and ends the processing.
+*              : Then the cause is not STALL, increments the error count to
+*              : communicate again. When the error count is 3, determines
+*              : the pipe state as DEVDRV_USBF_PIPE_NORES and ends the processing.
+*              : This function is executed in the NRDY interrupt handler.
+*              : This function clears NRDY interrupt status.
+* Arguments    : uint16_t status       ; NRDYSTS Register Value
+*              : uint16_t int_enb      ; NRDYENB Register Value
+* Return Value : none
+*******************************************************************************/
+void usb1_function_nrdy_int (uint16_t status, uint16_t int_enb)
+{
+    uint16_t pid;
+    uint16_t pipe;
+    uint16_t bitcheck;
+
+    bitcheck = (uint16_t)(status & int_enb);
+
+    USB201.NRDYSTS = (uint16_t)~status;
+
+    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+    {
+        if ((bitcheck&g_usb1_function_bit_set[pipe]) == g_usb1_function_bit_set[pipe])
+        {
+            if (RZA_IO_RegRead_16(&USB201.SYSCFG0, USB_SYSCFG_DCFM_SHIFT, USB_SYSCFG_DCFM) == 1)
+            {
+                if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT)
+                {
+                    pid = usb1_function_get_pid(pipe);
+                    if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
+                    {
+                        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
+                    }
+                    else
+                    {
+                        g_usb1_function_PipeIgnore[pipe]++;
+                        if (g_usb1_function_PipeIgnore[pipe] == 3)
+                        {
+                            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
+                        }
+                        else
+                        {
+                            usb1_function_set_pid_buf(pipe);
+                        }
+                    }
+                }
+            }
+            else
+            {
+                /* USB Function */
+            }
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_bemp_int
+* Description  : Executes BEMP interrupt(USB_FUNCTION_PIPE1-9).
+* Arguments    : uint16_t status       ; BEMPSTS Register Value
+*              : uint16_t int_enb      ; BEMPENB Register Value
+* Return Value : none
+*******************************************************************************/
+void usb1_function_bemp_int (uint16_t status, uint16_t int_enb)
+{
+    uint16_t pid;
+    uint16_t pipe;
+    uint16_t bitcheck;
+    uint16_t inbuf;
+
+    bitcheck = (uint16_t)(status & int_enb);
+
+    USB201.BEMPSTS = (uint16_t)~status;
+
+    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+    {
+        if ((bitcheck&g_usb1_function_bit_set[pipe]) == g_usb1_function_bit_set[pipe])
+        {
+            pid = usb1_function_get_pid(pipe);
+
+            if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
+            {
+                g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
+            }
+            else
+            {
+                inbuf = usb1_function_get_inbuf(pipe);
+
+                if (inbuf == 0)
+                {
+                    usb1_function_disable_bemp_int(pipe);
+                    usb1_function_set_pid_nak(pipe);
+                    g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                }
+            }
+        }
+    }
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_lib.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_lib.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,2044 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_lib.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb1_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb1_function_enable_brdy_int
+* Description  : Enables BRDY interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
+*              : BRDY. Enables BRDY interrupt in the pipe specified by the argument
+*              : in the disabled status. After enabling BRDY, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe           ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_enable_brdy_int (uint16_t pipe)
+{
+    /* enable brdy interrupt */
+    USB201.BRDYENB |= (uint16_t)g_usb1_function_bit_set[pipe];
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_disable_brdy_int
+* Description  : Disables BRDY interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
+*              : BRDY. Enables BRDY interrupt in the pipe specified by the argument
+*              : in the disabled status. After disabling BRDY, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_disable_brdy_int (uint16_t pipe)
+{
+    /* disable brdy interrupt */
+    USB201.BRDYENB &= (uint16_t)~(g_usb1_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_clear_brdy_sts
+* Description  : Clear BRDY interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_clear_brdy_sts (uint16_t pipe)
+{
+    /* clear brdy status */
+    USB201.BRDYSTS = (uint16_t)~(g_usb1_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_enable_bemp_int
+* Description  : Enables BEMP interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
+*              : BEMP. Enables BEMP interrupt in the pipe specified by the argument
+*              : in the disabled status. After enabling BEMP, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe           ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_enable_bemp_int (uint16_t pipe)
+{
+    /* enable bemp interrupt */
+    USB201.BEMPENB |= (uint16_t)g_usb1_function_bit_set[pipe];
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_disable_bemp_int
+* Description  : Disables BEMP interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
+*              : BEMP. Enables BEMP interrupt in the pipe specified by the argument
+*              : in the disabled status. After enabling BEMP, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe           ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_disable_bemp_int (uint16_t pipe)
+{
+    /* disable bemp interrupt */
+    USB201.BEMPENB &= (uint16_t)~(g_usb1_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_clear_bemp_sts
+* Description  : Clear BEMP interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_clear_bemp_sts (uint16_t pipe)
+{
+    /* clear bemp status */
+    USB201.BEMPSTS = (uint16_t)~(g_usb1_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_enable_nrdy_int
+* Description  : Enables NRDY interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
+*              : NRDY. Enables NRDY interrupt in the pipe specified by the argument
+*              : in the disabled status. After enabling NRDY, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe             ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_enable_nrdy_int (uint16_t pipe)
+{
+    /* enable nrdy interrupt */
+    USB201.NRDYENB |= (uint16_t)g_usb1_function_bit_set[pipe];
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_disable_nrdy_int
+* Description  : Disables NRDY interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
+*              : NRDY. Disables NRDY interrupt in the pipe specified by the argument
+*              : in the disabled status. After disabling NRDY, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_disable_nrdy_int (uint16_t pipe)
+{
+    /* disable nrdy interrupt */
+    USB201.NRDYENB &= (uint16_t)~(g_usb1_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_clear_nrdy_sts
+* Description  : Clear NRDY interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_clear_nrdy_sts (uint16_t pipe)
+{
+    /* clear nrdy status */
+    USB201.NRDYSTS = (uint16_t)~(g_usb1_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_is_hispeed
+* Description  : Returns the result of USB reset hand shake (RHST) as
+*              : return value.
+* Arguments    : none
+* Return Value : USB_FUNCTION_HIGH_SPEED    ; Hi-Speed
+*              : USB_FUNCTION_FULL_SPEED    ; Full-Speed
+*              : LOW_SPEED                  ; Low-Speed
+*              : USB_FUNCTION_NON_SPEED     ; error
+*******************************************************************************/
+uint16_t usb1_function_is_hispeed (void)
+{
+    uint16_t rhst;
+    uint16_t speed;
+
+    rhst = RZA_IO_RegRead_16(&USB201.DVSTCTR0, USB_DVSTCTR0_RHST_SHIFT, USB_DVSTCTR0_RHST);
+
+    if (rhst == USB_FUNCTION_HSMODE)
+    {
+        speed = USB_FUNCTION_HIGH_SPEED;
+    }
+    else if (rhst == USB_FUNCTION_FSMODE)
+    {
+        speed = USB_FUNCTION_FULL_SPEED;
+    }
+    else if (rhst == USB_FUNCTION_LSMODE)
+    {
+        speed = USB_FUNCTION_LOW_SPEED;
+    }
+    else
+    {
+        speed = USB_FUNCTION_NON_SPEED;
+    }
+
+    return speed;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_is_hispeed_enable
+* Description  : Returns the USB High-Speed connection enabled status as
+*              : return value.
+* Arguments    : none
+* Return Value : DEVDRV_USBF_YES  : Hi-Speed Enable
+*              : DEVDRV_USBF_NO   : Hi-Speed Disable
+*******************************************************************************/
+uint16_t usb1_function_is_hispeed_enable (void)
+{
+    uint16_t ret;
+
+    ret = DEVDRV_USBF_NO;
+
+    if (RZA_IO_RegRead_16(&USB201.SYSCFG0, USB_SYSCFG_HSE_SHIFT, USB_SYSCFG_HSE) == 1)
+    {
+        ret = DEVDRV_USBF_YES;
+    }
+
+    return ret;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_pid_buf
+* Description  : Enables communicaqtion in the pipe specified by the argument
+*              : (BUF).
+* Arguments    : uint16_t pipe             ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_set_pid_buf (uint16_t pipe)
+{
+    uint16_t pid;
+
+    pid = usb1_function_get_pid(pipe);
+
+    if (pid == DEVDRV_USBF_PID_STALL2)
+    {
+        usb1_function_set_pid_nak(pipe);
+    }
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB201.DCPCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_DCPCTR_PID_SHIFT,
+                                USB_DCPCTR_PID);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_9_PID_SHIFT,
+                                USB_PIPEnCTR_9_PID);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_pid_nak
+* Description  : Disables communication (NAK) in the pipe specified by the argument.
+*              : When the pipe status was enabling communication (BUF) before
+*              : executing before executing this function, waits in the software
+*              : until the pipe becomes ready after setting disabled.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_set_pid_nak (uint16_t pipe)
+{
+    uint16_t pid;
+    uint16_t pbusy;
+    uint32_t loop;
+
+    pid = usb1_function_get_pid(pipe);
+
+    if (pid == DEVDRV_USBF_PID_STALL2)
+    {
+        usb1_function_set_pid_stall(pipe);
+    }
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB201.DCPCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_DCPCTR_PID_SHIFT,
+                                USB_DCPCTR_PID);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_9_PID_SHIFT,
+                                USB_PIPEnCTR_9_PID);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        default:
+        break;
+    }
+
+    if (pid == DEVDRV_USBF_PID_BUF)
+    {
+        for (loop = 0; loop < 200; loop++)
+        {
+            switch (pipe)
+            {
+                case USB_FUNCTION_PIPE0:
+                    pbusy = RZA_IO_RegRead_16(&USB201.DCPCTR,
+                                                USB_DCPCTR_PBUSY_SHIFT,
+                                                USB_DCPCTR_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE1:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE2:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE3:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE4:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE5:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE6:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE6CTR,
+                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_6_8_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE7:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE7CTR,
+                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_6_8_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE8:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE8CTR,
+                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_6_8_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE9:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
+                                                USB_PIPEnCTR_9_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_9_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEA:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPEACTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEB:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPEBCTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEC:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPECCTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPED:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPEDCTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEE:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPEECTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEF:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPEFCTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                default:
+                    pbusy   = 1;
+                break;
+            }
+
+            if (pbusy == 0)
+            {
+                break;
+            }
+            Userdef_USB_usb1_function_delay_500ns();
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_pid_stall
+* Description  : Disables communication (STALL) in the pipe specified by the
+*              : argument.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_set_pid_stall (uint16_t pipe)
+{
+    uint16_t pid;
+
+    pid = usb1_function_get_pid(pipe);
+    if (pid == DEVDRV_USBF_PID_BUF)
+    {
+        switch (pipe)
+        {
+            case USB_FUNCTION_PIPE0:
+                RZA_IO_RegWrite_16(&USB201.DCPCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_DCPCTR_PID_SHIFT,
+                                    USB_DCPCTR_PID);
+            break;
+
+            case USB_FUNCTION_PIPE1:
+                RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE2:
+                RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE3:
+                RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE4:
+                RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE5:
+                RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE6:
+                RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE7:
+                RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE8:
+                RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE9:
+                RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_9_PID_SHIFT,
+                                    USB_PIPEnCTR_9_PID);
+            break;
+
+            case USB_FUNCTION_PIPEA:
+                RZA_IO_RegWrite_16(&USB201.PIPEACTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEB:
+                RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEC:
+                RZA_IO_RegWrite_16(&USB201.PIPECCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPED:
+                RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEE:
+                RZA_IO_RegWrite_16(&USB201.PIPEECTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEF:
+                RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            default:
+            break;
+        }
+    }
+    else
+    {
+        switch (pipe)
+        {
+            case USB_FUNCTION_PIPE0:
+                RZA_IO_RegWrite_16(&USB201.DCPCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_DCPCTR_PID_SHIFT,
+                                    USB_DCPCTR_PID);
+            break;
+
+            case USB_FUNCTION_PIPE1:
+                RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE2:
+                RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE3:
+                RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE4:
+                RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE5:
+                RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE6:
+                RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE7:
+                RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE8:
+                RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE9:
+                RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_9_PID_SHIFT,
+                                    USB_PIPEnCTR_9_PID);
+            break;
+
+            case USB_FUNCTION_PIPEA:
+                RZA_IO_RegWrite_16(&USB201.PIPEACTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEB:
+                RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEC:
+                RZA_IO_RegWrite_16(&USB201.PIPECCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPED:
+                RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEE:
+                RZA_IO_RegWrite_16(&USB201.PIPEECTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEF:
+                RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            default:
+            break;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_clear_pid_stall
+* Description  : Disables communication (NAK) in the pipe specified by the argument.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_clear_pid_stall (uint16_t pipe)
+{
+    usb1_function_set_pid_nak(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_get_pid
+* Description  : Returns the pipe state specified by the argument.
+* Arguments    : uint16_t pipe          ; Pipe Number
+* Return Value : PID
+*******************************************************************************/
+uint16_t usb1_function_get_pid (uint16_t pipe)
+{
+    uint16_t pid;
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            pid = RZA_IO_RegRead_16(&USB201.DCPCTR,
+                                    USB_DCPCTR_PID_SHIFT,
+                                    USB_DCPCTR_PID);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            pid = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            pid = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            pid = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            pid = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            pid = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            pid = RZA_IO_RegRead_16(&USB201.PIPE6CTR,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            pid = RZA_IO_RegRead_16(&USB201.PIPE7CTR,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            pid = RZA_IO_RegRead_16(&USB201.PIPE8CTR,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            pid = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
+                                    USB_PIPEnCTR_9_PID_SHIFT,
+                                    USB_PIPEnCTR_9_PID);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            pid = RZA_IO_RegRead_16(&USB201.PIPEACTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            pid = RZA_IO_RegRead_16(&USB201.PIPEBCTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            pid = RZA_IO_RegRead_16(&USB201.PIPECCTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            pid = RZA_IO_RegRead_16(&USB201.PIPEDCTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            pid = RZA_IO_RegRead_16(&USB201.PIPEECTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            pid = RZA_IO_RegRead_16(&USB201.PIPEFCTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        default:
+            pid = 0;
+        break;
+    }
+
+    return pid;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_csclr
+* Description  : CSPLIT status clear setting of sprit transaction in specified
+*              : pipe is performed.
+*              : When SQSET bit or SQCLR bit, and SQSET bit or SQCLR bit
+*              : in DCPCTR register are continuously changed (when the sequence
+*              : toggle bit of data PID is continuously changed over two or more pipes),
+*              : the access cycle with 120 ns and more than 5 cycle bus clock is necessary.
+*              : Do not set both SQCLR bit and SQSET bit to 1 at the same time.
+*              : In addition, both bits should be operated after PID is set to NAK.
+*              : However, when it is set to the isochronous transfer as the transfer type
+*              : (TYPE=11), writing in SQSET bit is disabled.
+* Arguments    : uint16_t pipe     ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_set_csclr (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB201.DCPCTR,
+                                1,
+                                USB_DCPCTR_CSCLR_SHIFT,
+                                USB_DCPCTR_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
+                                1,
+                                USB_PIPEnCTR_9_CSCLR_SHIFT,
+                                USB_PIPEnCTR_9_CSCLR);
+        break;
+
+        default:
+            /* PIPEA-F have not CSCLR */
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_sqclr
+* Description  : Sets the sequence bit of the pipe specified by the argument to
+*              : DATA0.
+* Arguments    : uint16_t pipe              ; Pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_set_sqclr (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB201.DCPCTR,
+                                1,
+                                USB_DCPCTR_SQCLR_SHIFT,
+                                USB_DCPCTR_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
+                                1,
+                                USB_PIPEnCTR_9_SQCLR_SHIFT,
+                                USB_PIPEnCTR_9_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_sqset
+* Description  : Sets the sequence bit of the pipe specified by the argument to
+*              : DATA1.
+* Arguments    : uint16_t pipe   ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_set_sqset (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB201.DCPCTR,
+                                1,
+                                USB_DCPCTR_SQSET_SHIFT,
+                                USB_DCPCTR_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
+                                USB_PIPEnCTR_6_8_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
+                                USB_PIPEnCTR_6_8_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
+                                USB_PIPEnCTR_6_8_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
+                                1,
+                                USB_PIPEnCTR_9_SQSET_SHIFT,
+                                USB_PIPEnCTR_9_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_get_sqmon
+* Description  : Toggle bit of specified pipe is obtained
+* Arguments    : uint16_t pipe   ; Pipe number
+* Return Value : sqmon
+*******************************************************************************/
+uint16_t usb1_function_get_sqmon (uint16_t pipe)
+{
+    uint16_t sqmon;
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            sqmon = RZA_IO_RegRead_16(&USB201.DCPCTR,
+                                        USB_DCPCTR_SQMON_SHIFT,
+                                        USB_DCPCTR_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPE6CTR,
+                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
+                                        USB_PIPEnCTR_6_8_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPE7CTR,
+                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
+                                        USB_PIPEnCTR_6_8_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPE8CTR,
+                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
+                                        USB_PIPEnCTR_6_8_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
+                                        USB_PIPEnCTR_9_SQMON_SHIFT,
+                                        USB_PIPEnCTR_9_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPEACTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPEBCTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPECCTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPEDCTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPEECTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPEFCTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        default:
+            sqmon = 0;
+        break;
+    }
+
+    return sqmon;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_aclrm
+* Description  : The buffer of specified pipe is initialized
+* Arguments    : uint16_t pipe    : Pipe
+* Return Value : none
+*******************************************************************************/
+void usb1_function_aclrm (uint16_t pipe)
+{
+    usb1_function_set_aclrm(pipe);
+    usb1_function_clr_aclrm(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_aclrm
+* Description  : The auto buffer clear mode of specified pipe is enabled
+* Arguments    : uint16_t pipe    : Pipe
+* Return Value : none
+*******************************************************************************/
+void usb1_function_set_aclrm (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
+                                1,
+                                USB_PIPEnCTR_9_ACLRM_SHIFT,
+                                USB_PIPEnCTR_9_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_clr_aclrm
+* Description  : The auto buffer clear mode of specified pipe is enabled
+* Arguments    : uint16_t pipe    : Pipe
+* Return Value : none
+*******************************************************************************/
+void usb1_function_clr_aclrm (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
+                                0,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
+                                0,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
+                                0,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
+                                0,
+                                USB_PIPEnCTR_9_ACLRM_SHIFT,
+                                USB_PIPEnCTR_9_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_get_inbuf
+* Description  : Returns INBUFM of the pipe specified by the argument.
+* Arguments    : uint16_t pipe             ; Pipe Number
+* Return Value : inbuf
+*******************************************************************************/
+uint16_t usb1_function_get_inbuf (uint16_t pipe)
+{
+    uint16_t inbuf;
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            inbuf = 0;
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            inbuf = 0;
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            inbuf = 0;
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            inbuf = 0;
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
+                                    USB_PIPEnCTR_9_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_9_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPEACTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPEBCTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPECCTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPEDCTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPEECTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPEFCTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        default:
+            inbuf = 0;
+        break;
+    }
+
+    return inbuf;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_setting_interrupt
+* Description  : Sets the USB module interrupt level.
+* Arguments    : uint8_t level
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb1_function_setting_interrupt (uint8_t level)
+{
+    uint16_t d0fifo_dmaintid;
+    uint16_t d1fifo_dmaintid;
+
+    R_INTC_RegistIntFunc(INTC_ID_USBI1, usb1_function_interrupt);
+    R_INTC_SetPriority(INTC_ID_USBI1, level);
+    R_INTC_Enable(INTC_ID_USBI1);
+
+    d0fifo_dmaintid = Userdef_USB_usb1_function_d0fifo_dmaintid();
+
+    if (d0fifo_dmaintid != 0xFFFF)
+    {
+        R_INTC_RegistIntFunc(d0fifo_dmaintid, usb1_function_dma_interrupt_d0fifo);
+        R_INTC_SetPriority(d0fifo_dmaintid, level);
+        R_INTC_Enable(d0fifo_dmaintid);
+    }
+
+    d1fifo_dmaintid = Userdef_USB_usb1_function_d1fifo_dmaintid();
+
+    if (d1fifo_dmaintid != 0xFFFF)
+    {
+        R_INTC_RegistIntFunc(d1fifo_dmaintid, usb1_function_dma_interrupt_d1fifo);
+        R_INTC_SetPriority(d1fifo_dmaintid, level);
+        R_INTC_Enable(d1fifo_dmaintid);
+    }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_reset_module
+* Description  : Initializes the USB module.
+*              : Enables providing clock to the USB module.
+*              : Sets USB bus wait register.
+* Arguments    : uint16_t clockmode ; 48MHz ; USBFCLOCK_X1_48MHZ
+*              :                    ; 12MHz ; USBFCLOCK_EXTAL_12MHZ
+* Return Value : none
+*******************************************************************************/
+void usb1_function_reset_module (uint16_t clockmode)
+{
+    /* UPLLE bit is only USB0 */
+    if (RZA_IO_RegRead_16(&USB200.SYSCFG0,
+                                USB_SYSCFG_UPLLE_SHIFT,
+                                USB_SYSCFG_UPLLE) == 1)
+    {
+        if ((USB200.SYSCFG0 & USB_FUNCTION_BITUCKSEL) != clockmode)
+        {
+            RZA_IO_RegWrite_16(&USB201.SUSPMODE,
+                                0,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                                0,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+            USB201.SYSCFG0 = 0;
+            USB200.SYSCFG0 = 0;
+            USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
+            Userdef_USB_usb1_function_delay_xms(1);
+            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                                1,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+            RZA_IO_RegWrite_16(&USB201.SUSPMODE,
+                                1,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+        }
+        else
+        {
+            RZA_IO_RegWrite_16(&USB201.SUSPMODE,
+                                0,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+            Userdef_USB_usb1_function_delay_xms(1);
+            RZA_IO_RegWrite_16(&USB201.SUSPMODE,
+                                1,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+        }
+    }
+    else
+    {
+        RZA_IO_RegWrite_16(&USB201.SUSPMODE,
+                            0,
+                            USB_SUSPMODE_SUSPM_SHIFT,
+                            USB_SUSPMODE_SUSPM);
+        RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                            0,
+                            USB_SUSPMODE_SUSPM_SHIFT,
+                            USB_SUSPMODE_SUSPM);
+        USB201.SYSCFG0 = 0;
+        USB200.SYSCFG0 = 0;
+        USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
+        Userdef_USB_usb1_function_delay_xms(1);
+        RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                            1,
+                            USB_SUSPMODE_SUSPM_SHIFT,
+                            USB_SUSPMODE_SUSPM);
+        RZA_IO_RegWrite_16(&USB201.SUSPMODE,
+                            1,
+                            USB_SUSPMODE_SUSPM_SHIFT,
+                            USB_SUSPMODE_SUSPM);
+    }
+
+    USB201.BUSWAIT = (uint16_t)(USB_FUNCTION_BUSWAIT_05 & USB_FUNCTION_BITBWAIT);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_get_buf_size
+* Description  : Obtains pipe buffer size specified by the argument and
+*              : maximum packet size of the USB device in use.
+*              : When USB_FUNCTION_PIPE0 is specified by the argument, obtains the maximum
+*              : packet size of the USB device using the corresponding pipe.
+*              : For the case that USB_FUNCTION_PIPE0 is not assigned by the argument, when the
+*              : corresponding pipe is in continuous transfer mode,
+*              : obtains the buffer size allocated in the corresponcing pipe,
+*              : when incontinuous transfer, obtains maximum packet size.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : Maximum packet size or buffer size
+*******************************************************************************/
+uint16_t usb1_function_get_buf_size (uint16_t pipe)
+{
+    uint16_t size;
+    uint16_t bufsize;
+
+    if (pipe == USB_FUNCTION_PIPE0)
+    {
+        size = RZA_IO_RegRead_16(&USB201.DCPMAXP,
+                                USB_DCPMAXP_MXPS_SHIFT,
+                                USB_DCPMAXP_MXPS);
+    }
+    else
+    {
+        if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_CNTMD_SHIFT, USB_PIPECFG_CNTMD) == 1)
+        {
+            bufsize = RZA_IO_RegRead_16(&g_usb1_function_pipebuf[pipe], USB_PIPEBUF_BUFSIZE_SHIFT, USB_PIPEBUF_BUFSIZE);
+            size = (uint16_t)((bufsize + 1) * USB_FUNCTION_PIPExBUF);
+        }
+        else
+        {
+            size = RZA_IO_RegRead_16(&g_usb1_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
+        }
+    }
+    return size;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_get_mxps
+* Description  : Obtains maximum packet size of the USB device using the pipe
+*              : specified by the argument.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : Max Packet Size
+*******************************************************************************/
+uint16_t usb1_function_get_mxps (uint16_t pipe)
+{
+    uint16_t size;
+
+    if (pipe == USB_FUNCTION_PIPE0)
+    {
+        size = RZA_IO_RegRead_16(&USB201.DCPMAXP,
+                                USB_DCPMAXP_MXPS_SHIFT,
+                                USB_DCPMAXP_MXPS);
+    }
+    else
+    {
+        size = RZA_IO_RegRead_16(&g_usb1_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
+    }
+    return size;
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_api.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_api.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,441 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_api.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb1_function.h"
+#include "dev_drv.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb1_api_function_init
+* Description  : Initializes the USB module in the USB function mode.
+* Arguments    : uint8_t  int_level ; interruput level
+*              : uint16_t mode      : Speed modes
+*              :                    :  USB_FUCNTION_HIGH_SPEED: High-speed device
+*              :                    :  USB_FUCNTION_FULL_SPEED: Full-speed device
+*              : uint16_t clockmode ; 48MHz ; USBFCLOCK_X1_48MHZ
+*              :                    ; 12MHz ; USBFCLOCK_EXTAL_12MHZ
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb1_api_function_init (uint8_t int_level, uint16_t mode, uint16_t clockmode)
+{
+    volatile uint8_t dummy_buf;
+
+    CPG.STBCR7  &= 0xfc;                        /*The clock of USB0/1 modules is permitted  */
+    dummy_buf   = CPG.STBCR7;                   /* (Dummy read)                             */
+
+    usb1_function_setting_interrupt(int_level);
+
+    usb1_function_reset_module(clockmode);      /* reset USB module with setting tranciever */
+                                                /* and HSE=1                                */
+
+    usb1_function_init_status();                /* clear variables                          */
+
+    usb1_function_InitModule(mode);             /* select USB Function and Interrupt Enable */
+                                                /* Detect USB Device to attach or detach    */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_api_function_IsConfigured
+* Description  : Checks if the USB device is configured to return the result as
+*              : the return value.
+* Arguments    : none
+* Return Value : DEVDRV_USBF_YES  : Configured & Configured Suspend
+*              : DEVDRV_USBF_NO   : not Configured
+*******************************************************************************/
+uint16_t usb1_api_function_IsConfigured (void)
+{
+    uint16_t dvst;
+
+    dvst = usb1_function_GetDeviceState();
+
+    if ((dvst == USB_FUNCTION_DVST_CONFIGURED) ||
+        (dvst == USB_FUNCTION_DVST_CONFIGURED_SUSPEND))
+    {
+        return DEVDRV_USBF_YES;
+    }
+
+    return DEVDRV_USBF_NO;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_GetDeviceState
+* Description  : Returns the state of USB device.
+* Arguments    : none
+* Return Value : Device States
+*******************************************************************************/
+uint16_t usb1_function_GetDeviceState (void)
+{
+    uint16_t dvsq;
+    uint16_t dvst;
+
+    dvsq = USB201.INTSTS0;
+    switch (dvsq & USB_FUNCTION_BITDVSQ)
+    {
+        case USB_FUNCTION_DS_POWR:                      /* Power state *//* power-on */
+            dvst = USB_FUNCTION_DVST_POWERED;
+        break;
+
+        case USB_FUNCTION_DS_DFLT:                      /* Default state *//* bus-reset */
+            dvst = USB_FUNCTION_DVST_DEFAULT;
+        break;
+
+        case USB_FUNCTION_DS_ADDS:                      /* Address state */
+            dvst = USB_FUNCTION_DVST_ADDRESS;
+        break;
+
+        case USB_FUNCTION_DS_CNFG:                      /* Configured state */
+            dvst = USB_FUNCTION_DVST_CONFIGURED;
+        break;
+
+        case USB_FUNCTION_DS_SPD_CNFG:                  /* Configured Suspend state */
+            dvst = USB_FUNCTION_DVST_CONFIGURED_SUSPEND;
+        break;
+
+        case USB_FUNCTION_DS_SPD_POWR:                  /* Power      Suspend state */
+        case USB_FUNCTION_DS_SPD_DFLT:                  /* Default    Suspend state */
+        case USB_FUNCTION_DS_SPD_ADDR:                  /* Address    Suspend state */
+            dvst = USB_FUNCTION_DVST_SUSPEND;
+        break;
+
+        default:                                        /* error */
+            dvst = USB_FUNCTION_DVST_SUSPEND;
+        break;
+    }
+
+    return dvst;
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_start_receive_transfer
+* Description  : Starts USB data reception using the pipe specified in the argument.
+*              : The FIFO for using is set in the pipe definition table.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data data Address
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    usb1_function_start_receive_transfer(pipe, size, data);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_start_send_transfer
+* Description  : Starts the USB data communication using pipe specified by the argument.
+* Arguments    : uint16_t pipe     ; Pipe Number
+*              : uint32_t size     ; Data Size
+*              : uint8_t *data     ; Data data Address
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb1_api_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t status;
+
+    status = usb1_function_start_send_transfer(pipe, size, data);
+
+    return status;
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_check_pipe_status
+* Description  : Starts USB data reception using the pipe specified in the argument.
+*              : The FIFO for using is set in the pipe definition table.
+* Arguments    : uint16_t  pipe     ; Pipe Number
+*              : uint32_t *size     ; Data Size
+* Return Value : Pipe Status
+*******************************************************************************/
+uint16_t usb1_api_function_check_pipe_status (uint16_t pipe, uint32_t * size)
+{
+    if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_DONE)
+    {
+        *size = g_usb1_function_PipeDataSize[pipe];
+        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+        return DEVDRV_USBF_PIPE_DONE;
+    }
+    else if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_NORES)
+    {
+        *size = 0;
+        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+        return DEVDRV_USBF_PIPE_NORES;
+    }
+    else if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_STALL)
+    {
+        *size = 0;
+        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+        return DEVDRV_USBF_PIPE_STALL;
+    }
+    else if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_FIFOERROR)
+    {
+        *size = 0;
+        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+        return DEVDRV_USBF_FIFOERROR;
+    }
+    else
+    {
+        /* Do Nothing */
+    }
+
+    return g_usb1_function_pipe_status[pipe];
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_clear_pipe_status
+* Description  : Starts USB data reception using the pipe specified in the argument.
+*              : The FIFO for using is set in the pipe definition table.
+* Arguments    : uint16_t  pipe     ; Pipe Number
+* Return Value : Pipe Status
+*******************************************************************************/
+void usb1_api_function_clear_pipe_status (uint16_t pipe)
+{
+    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
+    g_usb1_function_PipeDataSize[pipe] = 0;
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_set_pid_buf
+* Description  : Enables communicaqtion in the pipe specified by the argument
+*              : (BUF).
+* Arguments    : uint16_t pipe             ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_set_pid_buf (uint16_t pipe)
+{
+    usb1_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_set_pid_nak
+* Description  : Disables communication (NAK) in the pipe specified by the argument.
+*              : When the pipe status was enabling communication (BUF) before
+*              : executing before executing this function, waits in the software
+*              : until the pipe becomes ready after setting disabled.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_set_pid_nak (uint16_t pipe)
+{
+    usb1_function_set_pid_nak(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_set_pid_stall
+* Description  : Disables communication (STALL) in the pipe specified by the
+*              : argument.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_set_pid_stall (uint16_t pipe)
+{
+    usb1_function_set_pid_stall(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_clear_pid_stall
+* Description  : Disables communication (NAK) in the pipe specified by the argument.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_clear_pid_stall (uint16_t pipe)
+{
+    usb1_function_clear_pid_stall(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_get_pid
+* Description  : Returns the pipe state specified by the argument.
+* Arguments    : uint16_t pipe          ; Pipe Number
+* Return Value : PID
+*******************************************************************************/
+uint16_t usb1_api_function_get_pid (uint16_t pipe)
+{
+    uint16_t pid;
+
+    pid = usb1_function_get_pid(pipe);
+
+    return pid;
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_check_stall
+* Description  :
+* Arguments    : uint16_t pipe          ; Pipe Number
+* Return Value : PID
+*******************************************************************************/
+int32_t usb1_api_function_check_stall (uint16_t pipe)
+{
+    uint16_t pid;
+
+    pid = usb1_function_get_pid(pipe);
+
+    if ((pid & DEVDRV_USBF_PID_STALL) == DEVDRV_USBF_PID_STALL)
+    {
+        return DEVDRV_USBF_STALL;
+    }
+
+    return DEVDRV_SUCCESS;
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_set_sqclr
+* Description  : Sets the sequence bit of the pipe specified by the argument to
+*              : DATA0.
+* Arguments    : uint16_t pipe              ; Pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_set_sqclr (uint16_t pipe)
+{
+    usb1_function_set_sqclr(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_set_sqset
+* Description  : Sets the sequence bit of the pipe specified by the argument to
+*              : DATA1.
+* Arguments    : uint16_t pipe   ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_set_sqset (uint16_t pipe)
+{
+    usb1_function_set_sqset(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_set_csclr
+* Description  : CSPLIT status clear setting of sprit transaction in specified
+*              : pipe is performed.
+*              : When SQSET bit or SQCLR bit, and SQSET bit or SQCLR bit
+*              : in DCPCTR register are continuously changed (when the sequence
+*              : toggle bit of data PID is continuously changed over two or more pipes),
+*              : the access cycle with 120 ns and more than 5 cycle bus clock is necessary.
+*              : Do not set both SQCLR bit and SQSET bit to 1 at the same time.
+*              : In addition, both bits should be operated after PID is set to NAK.
+*              : However, when it is set to the isochronous transfer as the transfer type
+*              : (TYPE=11), writing in SQSET bit is disabled.
+* Arguments    : uint16_t pipe     ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_set_csclr (uint16_t pipe)
+{
+    usb1_function_set_csclr(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_set_curpipe
+* Description  : Allocates FIF0 specifed by the argument in the pipe assigned
+*              : by the argument.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t fifosel   ; Select FIFO
+*              : uint16_t isel      ; FIFO Access Direction
+*              : uint16_t mbw       ; FIFO Port Access Bit Width
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
+{
+    usb1_function_set_curpipe(pipe, fifosel, isel, mbw);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_clear_brdy_sts
+* Description  : Clear BRDY interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_clear_brdy_sts (uint16_t pipe)
+{
+    usb1_function_clear_brdy_sts(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_clear_bemp_sts
+* Description  : Clear BEMP interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_clear_bemp_sts (uint16_t pipe)
+{
+    usb1_function_clear_bemp_sts(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_clear_nrdy_sts
+* Description  : Clear NRDY interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_clear_nrdy_sts (uint16_t pipe)
+{
+    usb1_function_clear_nrdy_sts(pipe);
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_controlrw.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_controlrw.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,142 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_controlrw.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb1_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb1_api_function_CtrlReadStart
+* Description  : Executes the USB control read transfer.
+*              : USB host controller <- USB device
+* Arguments    : uint16_t size     ; Data Size
+*              : uint8_t  *data    ; Data Address
+* Return Value : DEVDRV_USBF_WRITEEND          ; End of data write
+*              : DEVDRV_USBF_WRITESHRT         ; End of short data write
+*              : DEVDRV_USBF_WRITING           ; Continue of data write
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO access error
+*******************************************************************************/
+uint16_t usb1_api_function_CtrlReadStart (uint32_t size, uint8_t * data)
+{
+    uint16_t status;
+    uint16_t mbw;
+
+    usb1_function_set_pid_nak(USB_FUNCTION_PIPE0);
+
+    g_usb1_function_data_count[USB_FUNCTION_PIPE0]   = size;
+    g_usb1_function_data_pointer[USB_FUNCTION_PIPE0] = data;
+
+    mbw = usb1_function_get_mbw(g_usb1_function_data_count[USB_FUNCTION_PIPE0],
+                                    (uint32_t)g_usb1_function_data_pointer[USB_FUNCTION_PIPE0]);
+    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
+    USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;
+
+    status = usb1_function_write_buffer_c(USB_FUNCTION_PIPE0);
+
+    /* Peripheral Control sequence */
+    switch (status)
+    {
+        case DEVDRV_USBF_WRITESHRT:                                     /* End of data write */
+        case DEVDRV_USBF_WRITEEND:                                      /* End of data write (not null) */
+        case DEVDRV_USBF_WRITING:                                       /* Continue of data write */
+            usb1_function_enable_bemp_int(USB_FUNCTION_PIPE0);          /* Enable Empty Interrupt */
+            usb1_function_set_pid_buf(USB_FUNCTION_PIPE0);              /* Set BUF */
+        break;
+
+        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access error */
+        break;
+
+        default:
+        break;
+    }
+
+    return status;                                                      /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_CtrlWriteStart
+* Description  : Executes the USB control write transfer.
+*              : USB host controller -> USB device
+* Arguments    : uint16_t  size         ; Data Size
+*              : uint8_t  *data         ; Data Address
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_CtrlWriteStart (uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb1_function_set_pid_nak(USB_FUNCTION_PIPE0);
+
+    g_usb1_function_data_count[USB_FUNCTION_PIPE0]   = size;
+    g_usb1_function_data_pointer[USB_FUNCTION_PIPE0] = data;
+
+    mbw = usb1_function_get_mbw(g_usb1_function_data_count[USB_FUNCTION_PIPE0],
+                                    (uint32_t)g_usb1_function_data_pointer[USB_FUNCTION_PIPE0]);
+    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
+    USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;
+
+    usb1_function_enable_brdy_int(USB_FUNCTION_PIPE0);
+    usb1_function_set_pid_buf(USB_FUNCTION_PIPE0);
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_global.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_global.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,144 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_global.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb1_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+const uint16_t g_usb1_function_bit_set[16] =
+{
+    0x0001, 0x0002, 0x0004, 0x0008,
+    0x0010, 0x0020, 0x0040, 0x0080,
+    0x0100, 0x0200, 0x0400, 0x0800,
+    0x1000, 0x2000, 0x4000, 0x8000
+};
+
+uint32_t g_usb1_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint8_t  * g_usb1_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+uint16_t g_usb1_function_PipeIgnore[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb1_function_PipeTbl[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb1_function_pipe_status[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint32_t g_usb1_function_PipeDataSize[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+USB_FUNCTION_DMA_t g_usb1_function_DmaInfo[2];
+uint16_t g_usb1_function_DmaPipe[2];
+uint16_t g_usb1_function_DmaBval[2];
+uint16_t g_usb1_function_DmaStatus[2];
+
+uint16_t g_usb1_function_CtrZeroLengthFlag;
+
+//uint16_t g_usb1_function_ConfigNum;
+//uint16_t g_usb1_function_Alternate[USB_FUNCTION_ALT_NO];
+//uint16_t g_usb1_function_RemoteWakeupFlag;
+uint16_t g_usb1_function_TestModeFlag;
+uint16_t g_usb1_function_TestModeSelectors;
+
+//uint16_t g_usb1_function_ReqType;
+//uint16_t g_usb1_function_ReqTypeType;
+//uint16_t g_usb1_function_ReqTypeRecip;
+//uint16_t g_usb1_function_ReqRequest;
+//uint16_t g_usb1_function_ReqValue;
+//uint16_t g_usb1_function_ReqIndex;
+//uint16_t g_usb1_function_ReqLength;
+
+//uint16_t g_usb1_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
+
+uint16_t g_usb1_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb1_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb1_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb1_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+
+/*******************************************************************************
+* Function Name: usb1_function_init_status
+* Description  : Initialization USB Sample Driver Variable.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb1_function_init_status (void)
+{
+    uint16_t pipe;
+
+    //g_usb1_function_ConfigNum         = 0;
+    //g_usb1_function_RemoteWakeupFlag  = DEVDRV_USBF_OFF;
+    g_usb1_function_TestModeFlag      = DEVDRV_USBF_OFF;
+    g_usb1_function_CtrZeroLengthFlag = 0;
+
+#if 0
+    usb1_function_clear_alt();
+#endif
+
+    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
+    {
+        g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
+        g_usb1_function_PipeDataSize[pipe] = 0;
+        g_usb1_function_data_count[pipe]   = 0;
+
+        /* pipe configuration in usb1_function_ResetEP() */
+        g_usb1_function_pipecfg[pipe]  = 0;
+        g_usb1_function_pipebuf[pipe]  = 0;
+        g_usb1_function_pipemaxp[pipe] = 0;
+        g_usb1_function_pipeperi[pipe] = 0;
+    }
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_sig.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_sig.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,330 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_sig.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb1_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+static void usb1_function_EnableINTModule(void);
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb1_function_InitModule
+* Description  : Initializes the USB module in the USB function mode.
+* Arguments    : uint16_t mode  ; USB_FUNCTION_HIGH_SPEED ; Hi-Speed Mode
+*              :                ; other                   ; Full-speed Mode
+* Return Value : none
+*******************************************************************************/
+void usb1_function_InitModule (uint16_t mode)
+{
+    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+                        0,
+                        USB_SYSCFG_DCFM_SHIFT,
+                        USB_SYSCFG_DCFM);           /* USB function */
+
+    /* USB module operation enabled     */
+    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+                        1,
+                        USB_SYSCFG_USBE_SHIFT,
+                        USB_SYSCFG_USBE);
+
+    if (mode == USB_FUNCTION_HIGH_SPEED)
+    {
+        RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+                            1,
+                            USB_SYSCFG_HSE_SHIFT,
+                            USB_SYSCFG_HSE);        /* Hi-Speed Mode */
+    }
+    else
+    {
+        RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+                            0,
+                            USB_SYSCFG_HSE_SHIFT,
+                            USB_SYSCFG_HSE);
+    }
+
+    /* for power-on                     */
+    if (usb1_function_CheckVBUStaus() == DEVDRV_USBF_ON)
+    {
+        usb1_function_EnableINTModule();            /* Interrupt Enable */
+        usb1_function_USB_FUNCTION_Attach();        /* pull-up D+ and open D- */
+    }
+    else
+    {
+        usb1_function_USB_FUNCTION_Detach();        /* USB Detach */
+                                                    /* with Interrupt Enable */
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_CheckVBUStaus
+* Description  : Checks the USB-VBUS state to returns the connection state to
+*              : the USB host.
+* Arguments    : none
+* Return Value : DEVDRV_USBF_ON     :   VBUS ON
+*              : DEVDRV_USBF_OFF   :   VBUS OFF
+*******************************************************************************/
+uint16_t usb1_function_CheckVBUStaus (void)
+{
+    uint16_t buf1;
+    uint16_t buf2;
+    uint16_t buf3;
+
+    /* monitor VBUS pins */
+    do
+    {
+        buf1 = RZA_IO_RegRead_16(&USB201.INTSTS0,
+                                USB_INTSTS0_VBSTS_SHIFT,
+                                USB_INTSTS0_VBSTS);
+        Userdef_USB_usb1_function_delay_10us(1);
+        buf2 = RZA_IO_RegRead_16(&USB201.INTSTS0,
+                                USB_INTSTS0_VBSTS_SHIFT,
+                                USB_INTSTS0_VBSTS);
+        Userdef_USB_usb1_function_delay_10us(1);
+        buf3 = RZA_IO_RegRead_16(&USB201.INTSTS0,
+                                USB_INTSTS0_VBSTS_SHIFT,
+                                USB_INTSTS0_VBSTS);
+    } while ((buf1 != buf2) || (buf2 != buf3));
+
+    if (buf1 == DEVDRV_USBF_OFF)
+    {
+        return DEVDRV_USBF_OFF;        /* detach */
+    }
+
+    return DEVDRV_USBF_ON;             /* attach */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_USB_FUNCTION_Attach
+* Description  : Connects to the USB host controller.
+*              : This function pulls up D+.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb1_function_USB_FUNCTION_Attach (void)
+{
+    Userdef_USB_usb1_function_attach();
+
+    Userdef_USB_usb1_function_delay_xms(10);
+
+    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+                        1,
+                        USB_SYSCFG_DPRPU_SHIFT,
+                        USB_SYSCFG_DPRPU);      /* Pull-up D+ and open D- */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_USB_FUNCTION_Detach
+* Description  : Disconnects from the USB host controller.
+*              : This function opens D+/D-.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb1_function_USB_FUNCTION_Detach (void)
+{
+    uint16_t pipe;
+
+    Userdef_USB_usb1_function_detach();
+
+    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
+    {
+        if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_IDLE)
+        {
+            usb1_function_stop_transfer(pipe);
+        }
+    }
+
+    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+                        0,
+                        USB_SYSCFG_DPRPU_SHIFT,
+                        USB_SYSCFG_DPRPU);      /* open D+ and D- */
+
+    /* Detach Recovery */
+    Userdef_USB_usb1_function_delay_500ns();                /* need 1us=500ns * 2 wait */
+    Userdef_USB_usb1_function_delay_500ns();
+
+    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+                        1,
+                        USB_SYSCFG_DCFM_SHIFT,
+                        USB_SYSCFG_DCFM);
+    Userdef_USB_usb1_function_delay_500ns();                /* need 100ns wait but 500ns S/W wait */
+
+    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+                        0,
+                        USB_SYSCFG_DCFM_SHIFT,
+                        USB_SYSCFG_DCFM);
+
+    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+                        0,
+                        USB_SYSCFG_USBE_SHIFT,
+                        USB_SYSCFG_USBE);       /* soft reset module */
+    Userdef_USB_usb1_function_delay_500ns();
+
+    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+                        1,
+                        USB_SYSCFG_USBE_SHIFT,
+                        USB_SYSCFG_USBE);
+
+    usb1_function_EnableINTModule();            /* Interrupt Enable */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_USB_FUNCTION_BusReset
+* Description  : This function is executed when the USB device is transitioned
+*              : to POWERD_STATE. Sets the device descriptor according to the
+*              : connection speed determined by the USB reset hand shake.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+#if 0	/*The USBHAL in mbed does not need this function*/
+void usb1_function_USB_FUNCTION_BusReset (void)
+{
+    usb1_function_init_status();                                    /* memory clear */
+
+    if (usb1_function_is_hispeed() == USB_FUNCTION_HIGH_SPEED)
+    {
+        usb1_function_ResetDescriptor(USB_FUNCTION_HIGH_SPEED);     /* Device Descriptor reset */
+    }
+    else
+    {
+        usb1_function_ResetDescriptor(USB_FUNCTION_FULL_SPEED);     /* Device Descriptor reset */
+    }
+
+    usb1_function_ResetDCP();                                       /* Default Control PIPE reset */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_USB_FUNCTION_Resume
+* Description  : This function is executed when the USB device detects a resume
+*              : signal.
+*              : The USB sample driver does not operate for this function.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+#if 0	/*The USBHAL in mbed does not need this function*/
+void usb1_function_USB_FUNCTION_Resume (void)
+{
+    /* NOP */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_USB_FUNCTION_Suspend
+* Description  : This function is executed when the USB device detects a suspend
+*              : signal.
+*              : The USB sample driver does not operate for this function.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+#if 0	/*The USBHAL in mbed does not need this function*/
+void usb1_function_USB_FUNCTION_Suspend (void)
+{
+    /* NOP */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_USB_FUNCTION_TestMode
+* Description  : This function is executed when the USB device is transitioned U
+*              : to TEST_MODE by the USB standard request.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb1_function_USB_FUNCTION_TestMode (void)
+{
+    switch (g_usb1_function_TestModeSelectors & USB_FUNCTION_FUNCTION_TEST_SELECT)
+    {
+        case USB_FUNCTION_FUNCTION_TEST_J:
+        case USB_FUNCTION_FUNCTION_TEST_K:
+        case USB_FUNCTION_FUNCTION_TEST_SE0_NAK:
+        case USB_FUNCTION_FUNCTION_TEST_PACKET:
+            RZA_IO_RegWrite_16(&USB201.TESTMODE,
+                                (g_usb1_function_TestModeSelectors >> 8),
+                                USB_TESTMODE_UTST_SHIFT,
+                                USB_TESTMODE_UTST);
+        break;
+
+        case USB_FUNCTION_FUNCTION_TEST_FORCE_ENABLE:
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_EnableINTModule
+* Description  : Enables USB interrupt.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_EnableINTModule (void)
+{
+    uint16_t buf;
+
+    buf  = USB201.INTENB0;
+    buf |= (USB_FUNCTION_BITVBSE | USB_FUNCTION_BITDVSE | USB_FUNCTION_BITCTRE |
+            USB_FUNCTION_BITBEMPE | USB_FUNCTION_BITNRDYE | USB_FUNCTION_BITBRDYE);
+    USB201.INTENB0 = buf;
+
+    usb1_function_enable_bemp_int(USB_FUNCTION_PIPE0);
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_sub.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_sub.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,453 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_sub.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb1_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+#if 0
+extern const uint16_t *g_usb1_function_EndPntPtr[];
+extern uint8_t         g_usb1_function_DeviceDescriptor[];
+extern uint8_t        *g_usb1_function_ConfigurationPtr[];
+#endif
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb1_function_ResetDCP
+* Description  : Initializes the default control pipe(DCP).
+* Outline      : Reset default control pipe
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb1_function_ResetDCP (void)
+{
+    USB201.DCPCFG  = 0;
+#if 0
+    USB201.DCPMAXP = g_usb1_function_DeviceDescriptor[7];
+#else
+    USB201.DCPMAXP = 64;
+#endif
+
+    USB201.CFIFOSEL  = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+    USB201.D0FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+    USB201.D1FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_ResetEP
+* Description  : Initializes the end point.
+* Arguments    : uint16_t num          ; Configuration Number
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb1_function_ResetEP (uint16_t num)
+{
+    uint16_t   pipe;
+    uint16_t   ep;
+    uint16_t   index;
+    uint16_t   buf;
+    uint16_t * tbl;
+
+    tbl = (uint16_t *)(g_usb1_function_EndPntPtr[num - 1]);
+
+    for (ep = 1; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
+    {
+        if (g_usb1_function_EPTableIndex[ep] != USB_FUNCTION_EP_ERROR)
+        {
+            index = (uint16_t)(USB_FUNCTION_EPTABLE_LENGTH * g_usb1_function_EPTableIndex[ep]);
+            pipe  = (uint16_t)(tbl[index + 0] & USB_FUNCTION_BITCURPIPE);
+
+            g_usb1_function_PipeTbl[pipe] = (uint16_t)(((tbl[index + 1] & USB_FUNCTION_DIRFIELD) << 3) |
+                                                         ep                                            |
+                                                        (tbl[index + 0] & USB_FUNCTION_FIFO_USE));
+
+            if ((tbl[index + 1] & USB_FUNCTION_DIRFIELD) == USB_FUNCTION_DIR_P_OUT)
+            {
+                tbl[index + 1] |= USB_FUNCTION_SHTNAKON;
+#ifdef  __USB_DMA_BFRE_ENABLE__
+                /* this routine cannnot be perfomred if read operation is executed in buffer size */
+                if (((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA) ||
+                    ((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA))
+                {
+                    tbl[index + 1] |= USB_FUNCTION_BFREON;
+                }
+#endif
+            }
+
+            /* Interrupt Disable */
+            buf  = USB201.BRDYENB;
+            buf &= (uint16_t)~g_usb1_function_bit_set[pipe];
+            USB201.BRDYENB = buf;
+            buf  = USB201.NRDYENB;
+            buf &= (uint16_t)~g_usb1_function_bit_set[pipe];
+            USB201.NRDYENB = buf;
+            buf  = USB201.BEMPENB;
+            buf &= (uint16_t)~g_usb1_function_bit_set[pipe];
+            USB201.BEMPENB = buf;
+
+            usb1_function_set_pid_nak(pipe);
+
+            /* CurrentPIPE Clear */
+            if (RZA_IO_RegRead_16(&USB201.CFIFOSEL,
+                                    USB_CFIFOSEL_CURPIPE_SHIFT,
+                                    USB_CFIFOSEL_CURPIPE) == pipe)
+            {
+                RZA_IO_RegWrite_16(&USB201.CFIFOSEL,
+                                    0,
+                                    USB_CFIFOSEL_CURPIPE_SHIFT,
+                                    USB_CFIFOSEL_CURPIPE);
+            }
+
+            if (RZA_IO_RegRead_16(&USB201.D0FIFOSEL,
+                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
+                                    USB_DnFIFOSEL_CURPIPE) == pipe)
+            {
+                RZA_IO_RegWrite_16(&USB201.D0FIFOSEL,
+                                    0,
+                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
+                                    USB_DnFIFOSEL_CURPIPE);
+            }
+
+            if (RZA_IO_RegRead_16(&USB201.D1FIFOSEL,
+                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
+                                    USB_DnFIFOSEL_CURPIPE) == pipe)
+            {
+                RZA_IO_RegWrite_16(&USB201.D1FIFOSEL,
+                                    0,
+                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
+                                    USB_DnFIFOSEL_CURPIPE);
+            }
+
+            /* PIPE Configuration */
+            USB201.PIPESEL  = pipe;
+            USB201.PIPECFG  = tbl[index + 1];
+            USB201.PIPEBUF  = tbl[index + 2];
+            USB201.PIPEMAXP = tbl[index + 3];
+            USB201.PIPEPERI = tbl[index + 4];
+
+            g_usb1_function_pipecfg[pipe]  = tbl[index + 1];
+            g_usb1_function_pipebuf[pipe]  = tbl[index + 2];
+            g_usb1_function_pipemaxp[pipe] = tbl[index + 3];
+            g_usb1_function_pipeperi[pipe] = tbl[index + 4];
+
+            /* Buffer Clear */
+            usb1_function_set_sqclr(pipe);
+            usb1_function_aclrm(pipe);
+
+            /* init Global */
+            g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
+            g_usb1_function_PipeDataSize[pipe] = 0;
+        }
+    }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_EpToPipe
+* Description  : Returns the pipe which end point specified by the argument is
+*              : allocated to.
+* Arguments    : uint16_t ep       ; Direction + Endpoint Number
+* Return Value : USB_FUNCTION_EP_ERROR         : Error
+*              : Others           : Pipe Number
+*******************************************************************************/
+uint16_t usb1_function_EpToPipe (uint16_t ep)
+{
+    uint16_t pipe;
+
+    for (pipe = 1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+    {
+        if ((g_usb1_function_PipeTbl[pipe] & 0x00ff) == ep)
+        {
+            return pipe;
+        }
+    }
+
+    return USB_FUNCTION_EP_ERROR;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_InitEPTable
+* Description  : Sets the end point by the Alternate setting value of the
+*              : configuration number and the interface number specified by the
+*              : argument.
+* Arguments    : uint16_t Con_Num       ; Configuration Number
+*              : uint16_t Int_Num       ; Interface Number
+*              : uint16_t Alt_Num       ; Alternate Setting
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb1_function_InitEPTable (uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num)
+{
+    uint8_t  * ptr;
+    uint16_t   point_interface;
+    uint16_t   point_endpoint;
+    uint16_t   length;
+    uint16_t   start;
+    uint16_t   numbers;
+    uint16_t   endpoint;
+
+    ptr = (uint8_t *)g_usb1_function_ConfigurationPtr[Con_Num - 1];
+    point_interface = *ptr;
+    length = (uint16_t)((uint16_t)*(ptr + 3) << 8 | (uint16_t)*(ptr + 2));
+    ptr  += *ptr;
+    start   = 0;
+    numbers = 0;
+    point_endpoint = 0;
+
+    for (; point_interface < length;)
+    {
+        switch (*(ptr + 1))                                     /* Descriptor Type ? */
+        {
+            case USB_FUNCTION_DT_INTERFACE:                     /* Interface */
+                if ((*(ptr + 2) == Int_Num) && (*(ptr + 3) == Alt_Num))
+                {
+                    numbers = *(ptr + 4);
+                }
+                else
+                {
+                    start  += *(ptr + 4);
+                }
+                point_interface += *ptr;
+                ptr += *ptr;
+            break;
+
+            case USB_FUNCTION_DT_ENDPOINT:                      /* Endpoint */
+                if (point_endpoint < numbers)
+                {
+                    endpoint = (uint16_t)(*(ptr + 2) & 0x0f);
+                    g_usb1_function_EPTableIndex[endpoint] = (uint16_t)(start + point_endpoint);
+                    ++point_endpoint;
+                }
+                point_interface += *ptr;
+                ptr += *ptr;
+            break;
+
+            case USB_FUNCTION_DT_DEVICE:                        /* Device */
+            case USB_FUNCTION_DT_CONFIGURATION:                 /* Configuration */
+            case USB_FUNCTION_DT_STRING:                        /* String */
+            default:                                            /* Class, Vendor, else */
+                point_interface += *ptr;
+                ptr += *ptr;
+            break;
+        }
+    }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_GetConfigNum
+* Description  : Returns the number of configuration referring to the number of
+*              : configuration described in the device descriptor.
+* Arguments    : none
+* Return Value : Number of possible configurations (bNumConfigurations).
+*******************************************************************************/
+#if 0
+uint16_t usb1_function_GetConfigNum (void)
+{
+    return (uint16_t)g_usb1_function_DeviceDescriptor[17];
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_GetInterfaceNum
+* Description  : Returns the number of interface referring to the number of
+*              : interface described in the configuration descriptor.
+* Arguments    : uint16_t num       ; Configuration Number
+* Return Value : Number of this interface (bNumInterfaces).
+*******************************************************************************/
+#if 0
+uint16_t usb1_function_GetInterfaceNum (uint16_t num)
+{
+    return (uint16_t)(*(g_usb1_function_ConfigurationPtr[num - 1] + 4));
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_GetAltNum
+* Description  : Returns the Alternate setting value of the configuration number
+*              : and the interface number specified by the argument.
+* Arguments    : uint16_t Con_Num       ; Configuration Number
+*              : uint16_t Int_Num       ; Interface Number
+* Return Value : Value used to select this alternate setting(bAlternateSetting).
+*******************************************************************************/
+#if 0
+uint16_t usb1_function_GetAltNum (uint16_t Con_Num, uint16_t Int_Num)
+{
+    uint8_t  * ptr;
+    uint16_t   point;
+    uint16_t   alt_num = 0;
+    uint16_t   length;
+
+    ptr = (uint8_t *)(g_usb1_function_ConfigurationPtr[Con_Num - 1]);
+    point = ptr[0];
+    ptr  += ptr[0];                                 /* InterfaceDescriptor[0] */
+    length  = (uint16_t)(*(g_usb1_function_ConfigurationPtr[Con_Num - 1] + 2));
+    length |= (uint16_t)((uint16_t)(*(g_usb1_function_ConfigurationPtr[Con_Num - 1] + 3)) << 8);
+
+    for (; point < length;)                                 /* Search Descriptor Table size */
+    {
+        switch (ptr[1])                                     /* Descriptor Type ? */
+        {
+            case USB_FUNCTION_DT_INTERFACE:                 /* Interface */
+                if (Int_Num == ptr[2])
+                {
+                    alt_num = (uint16_t)ptr[3];             /* Alternate Number count */
+                }
+                point += ptr[0];
+                ptr += ptr[0];
+            break;
+
+            case USB_FUNCTION_DT_DEVICE:                    /* Device */
+            case USB_FUNCTION_DT_CONFIGURATION:             /* Configuration */
+            case USB_FUNCTION_DT_STRING:                    /* String */
+            case USB_FUNCTION_DT_ENDPOINT:                  /* Endpoint */
+            default:                                        /* Class, Vendor, else */
+                point += ptr[0];
+                ptr   += ptr[0];
+            break;
+        }
+    }
+    return alt_num;
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_CheckRemoteWakeup
+* Description  : Returns the result of the remote wake up function is supported
+*              : or not referring to the configuration descriptor.
+* Arguments    : none
+* Return Value : DEVDRV_USBF_ON     :   Support Remote Wakeup
+*              : DEVDRV_USBF_OFF    :   not Support Remote Wakeup
+*******************************************************************************/
+#if 0
+uint16_t usb1_function_CheckRemoteWakeup (void)
+{
+    uint8_t atr;
+
+    if (g_usb1_function_ConfigNum == 0)
+    {
+        return DEVDRV_USBF_OFF;
+    }
+
+    atr = *(g_usb1_function_ConfigurationPtr[g_usb1_function_ConfigNum - 1] + 7);
+
+    if (atr & USB_FUNCTION_CF_RWUP)
+    {
+        return DEVDRV_USBF_ON;
+    }
+
+    return DEVDRV_USBF_OFF;
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_clear_alt
+* Description  : Initializes the Alternate setting area.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb1_function_clear_alt (void)
+{
+    int i;
+
+    for (i = 0; i < USB_FUNCTION_ALT_NO; ++i)
+    {
+        g_usb1_function_Alternate[i] = 0;                           /* Alternate */
+    }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_clear_pipe_tbl
+* Description  : Initializes pipe definition table.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb1_function_clear_pipe_tbl (void)
+{
+    int pipe;
+
+    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
+    {
+        g_usb1_function_PipeTbl[pipe] = 0;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_clear_ep_table_index
+* Description  : Initializes the end point table index.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb1_function_clear_ep_table_index (void)
+{
+    int ep;
+
+    for (ep = 0; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
+    {
+        g_usb1_function_EPTableIndex[ep] = USB_FUNCTION_EP_ERROR;
+    }
+}
+#endif
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/userdef/usb1_function_dmacdrv.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/userdef/usb1_function_dmacdrv.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,698 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_dmacdrv.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include <stdio.h>
+#include "r_typedefs.h"
+#include "iodefine.h"
+#include "rza_io_regrw.h"
+#include "usb1_function_dmacdrv.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+#define DMAC_INDEFINE   (255)       /* Macro definition when REQD bit is not used */
+
+/* ==== Request setting information for on-chip peripheral module ==== */
+typedef enum dmac_peri_req_reg_type
+{
+    DMAC_REQ_MID,
+    DMAC_REQ_RID,
+    DMAC_REQ_AM,
+    DMAC_REQ_LVL,
+    DMAC_REQ_REQD
+} dmac_peri_req_reg_type_t;
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+/* ==== Prototype declaration ==== */
+
+/* ==== Global variable ==== */
+/* On-chip peripheral module request setting table */
+static const uint8_t usb1_function_dmac_peri_req_init_table[8][5] =
+{
+    /* MID,RID,AM,LVL,REQD */
+    {32, 3, 2, 1, 1},    /* USB_0 channel 0 transmit FIFO empty */
+    {32, 3, 2, 1, 0},    /* USB_0 channel 0 receive FIFO full   */
+    {33, 3, 2, 1, 1},    /* USB_0 channel 1 transmit FIFO empty */
+    {33, 3, 2, 1, 0},    /* USB_0 channel 1 receive FIFO full   */
+    {34, 3, 2, 1, 1},    /* USB_1 channel 0 transmit FIFO empty */
+    {34, 3, 2, 1, 0},    /* USB_1 channel 0 receive FIFO full   */
+    {35, 3, 2, 1, 1},    /* USB_1 channel 1 transmit FIFO empty */
+    {35, 3, 2, 1, 0},    /* USB_1 channel 1 receive FIFO full   */
+};
+
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC3_PeriReqInit
+* Description  : Sets the register mode for DMA mode and the on-chip peripheral
+*              : module request for transfer request for DMAC channel 1.
+*              : Executes DMAC initial setting using the DMA information
+*              : specified by the argument *trans_info and the enabled/disabled
+*              : continuous transfer specified by the argument continuation.
+*              : Registers DMAC channel 1 interrupt handler function and sets
+*              : the interrupt priority level. Then enables transfer completion
+*              : interrupt.
+* Arguments    : dmac_transinfo_t *trans_info   : Setting information to DMAC register
+*              : uint32_t          dmamode      : DMA mode (only for DMAC_MODE_REGISTER)
+*              : uint32_t          continuation : Set continuous transfer to be valid
+*              :                                  after DMA transfer has been completed
+*              :             DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
+*              :             DMAC_SAMPLE_SINGLE       : Do not execute continuous transfer
+*              : uint32_t request_factor        : Factor for on-chip peripheral module request
+*              :             DMAC_REQ_OSTM0TINT       : OSTM_0 compare match
+*              :             DMAC_REQ_OSTM1TINT       : OSTM_1 compare match
+*              :             DMAC_REQ_TGI0A           : MTU2_0 input capture/compare match
+*              :                  :
+*              : uint32_t          req_direction: Setting value of CHCFG_n register REQD bit
+* Return Value : none
+*******************************************************************************/
+void usb1_function_DMAC3_PeriReqInit (const dmac_transinfo_t * trans_info,
+                                      uint32_t dmamode, uint32_t continuation,
+                                      uint32_t request_factor, uint32_t req_direction)
+{
+    /* ==== Register mode ==== */
+    if (DMAC_MODE_REGISTER == dmamode)
+    {
+        /* ==== Next0 register set ==== */
+        DMAC3.N0SA_n = trans_info->src_addr;         /* Start address of transfer source      */
+        DMAC3.N0DA_n = trans_info->dst_addr;         /* Start address of transfer destination */
+        DMAC3.N0TB_n = trans_info->count;            /* Total transfer byte count             */
+
+        /* DAD : Transfer destination address counting direction */
+        /* SAD : Transfer source address counting direction      */
+        /* DDS : Transfer destination transfer size              */
+        /* SDS : Transfer source transfer size                   */
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            trans_info->daddr_dir,
+                            DMAC3_CHCFG_n_DAD_SHIFT,
+                            DMAC3_CHCFG_n_DAD);
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            trans_info->saddr_dir,
+                            DMAC3_CHCFG_n_SAD_SHIFT,
+                            DMAC3_CHCFG_n_SAD);
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            trans_info->dst_size,
+                            DMAC3_CHCFG_n_DDS_SHIFT,
+                            DMAC3_CHCFG_n_DDS);
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            trans_info->src_size,
+                            DMAC3_CHCFG_n_SDS_SHIFT,
+                            DMAC3_CHCFG_n_SDS);
+
+        /* DMS  : Register mode                            */
+        /* RSEL : Select Next0 register set                */
+        /* SBE  : No discharge of buffer data when aborted */
+        /* DEM  : No DMA interrupt mask                    */
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            0,
+                            DMAC3_CHCFG_n_DMS_SHIFT,
+                            DMAC3_CHCFG_n_DMS);
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            0,
+                            DMAC3_CHCFG_n_RSEL_SHIFT,
+                            DMAC3_CHCFG_n_RSEL);
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            0,
+                            DMAC3_CHCFG_n_SBE_SHIFT,
+                            DMAC3_CHCFG_n_SBE);
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            0,
+                            DMAC3_CHCFG_n_DEM_SHIFT,
+                            DMAC3_CHCFG_n_DEM);
+
+        /* ---- Continuous transfer ---- */
+        if (DMAC_SAMPLE_CONTINUATION == continuation)
+        {
+            /* REN : Execute continuous transfer                         */
+            /* RSW : Change register set when DMA transfer is completed. */
+            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                                1,
+                                DMAC3_CHCFG_n_REN_SHIFT,
+                                DMAC3_CHCFG_n_REN);
+            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                                1,
+                                DMAC3_CHCFG_n_RSW_SHIFT,
+                                DMAC3_CHCFG_n_RSW);
+        }
+        /* ---- Single transfer ---- */
+        else
+        {
+            /* REN : Do not execute continuous transfer                         */
+            /* RSW : Do not change register set when DMA transfer is completed. */
+            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                                0,
+                                DMAC3_CHCFG_n_REN_SHIFT,
+                                DMAC3_CHCFG_n_REN);
+            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                                0,
+                                DMAC3_CHCFG_n_RSW_SHIFT,
+                                DMAC3_CHCFG_n_RSW);
+        }
+
+        /* TM  : Single transfer                          */
+        /* SEL : Channel setting                          */
+        /* HIEN, LOEN : On-chip peripheral module request */
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            0,
+                            DMAC3_CHCFG_n_TM_SHIFT,
+                            DMAC3_CHCFG_n_TM);
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            3,
+                            DMAC3_CHCFG_n_SEL_SHIFT,
+                            DMAC3_CHCFG_n_SEL);
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            1,
+                            DMAC3_CHCFG_n_HIEN_SHIFT,
+                            DMAC3_CHCFG_n_HIEN);
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            0,
+                            DMAC3_CHCFG_n_LOEN_SHIFT,
+                            DMAC3_CHCFG_n_LOEN);
+
+        /* ---- Set factor by specified on-chip peripheral module request ---- */
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
+                            DMAC3_CHCFG_n_AM_SHIFT,
+                            DMAC3_CHCFG_n_AM);
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
+                            DMAC3_CHCFG_n_LVL_SHIFT,
+                            DMAC3_CHCFG_n_LVL);
+
+        if (usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
+        {
+            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                                usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
+                                DMAC3_CHCFG_n_REQD_SHIFT,
+                                DMAC3_CHCFG_n_REQD);
+        }
+        else
+        {
+            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                                req_direction,
+                                DMAC3_CHCFG_n_REQD_SHIFT,
+                                DMAC3_CHCFG_n_REQD);
+        }
+
+        RZA_IO_RegWrite_32(&DMAC23.DMARS,
+                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
+                            DMAC23_DMARS_CH3_RID_SHIFT,
+                            DMAC23_DMARS_CH3_RID);
+        RZA_IO_RegWrite_32(&DMAC23.DMARS,
+                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
+                            DMAC23_DMARS_CH3_MID_SHIFT,
+                            DMAC23_DMARS_CH3_MID);
+
+        /* PR : Round robin mode */
+        RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
+                            1,
+                            DMAC07_DCTRL_0_7_PR_SHIFT,
+                            DMAC07_DCTRL_0_7_PR);
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC3_Open
+* Description  : Enables DMAC channel 3 transfer.
+* Arguments    : uint32_t req : DMAC request mode
+* Return Value :  0 : Succeeded in enabling DMA transfer
+*              : -1 : Failed to enable DMA transfer (due to DMA operation)
+*******************************************************************************/
+int32_t usb1_function_DMAC3_Open (uint32_t req)
+{
+    int32_t ret;
+    volatile uint8_t dummy;
+
+    /* Transferable? */
+    if ((0 == RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
+                                DMAC3_CHSTAT_n_EN_SHIFT,
+                                DMAC3_CHSTAT_n_EN)) &&
+        (0 == RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
+                                DMAC3_CHSTAT_n_TACT_SHIFT,
+                                DMAC3_CHSTAT_n_TACT)))
+    {
+        /* Clear Channel Status Register */
+        RZA_IO_RegWrite_32(&DMAC3.CHCTRL_n,
+                            1,
+                            DMAC3_CHCTRL_n_SWRST_SHIFT,
+                            DMAC3_CHCTRL_n_SWRST);
+        dummy = RZA_IO_RegRead_32(&DMAC3.CHCTRL_n,
+                                DMAC3_CHCTRL_n_SWRST_SHIFT,
+                                DMAC3_CHCTRL_n_SWRST);
+        /* Enable DMA transfer */
+        RZA_IO_RegWrite_32(&DMAC3.CHCTRL_n,
+                            1,
+                            DMAC3_CHCTRL_n_SETEN_SHIFT,
+                            DMAC3_CHCTRL_n_SETEN);
+
+        /* ---- Request by software ---- */
+        if (DMAC_REQ_MODE_SOFT == req)
+        {
+            /* DMA transfer Request by software */
+            RZA_IO_RegWrite_32(&DMAC3.CHCTRL_n,
+                                1,
+                                DMAC3_CHCTRL_n_STG_SHIFT,
+                                DMAC3_CHCTRL_n_STG);
+        }
+
+        ret = 0;
+    }
+    else
+    {
+        ret = -1;
+    }
+
+    return ret;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC3_Close
+* Description  : Aborts DMAC channel 3 transfer. Returns the remaining transfer
+*              : byte count at the time of DMA transfer abort to the argument
+*              : *remain.
+* Arguments    : uint32_t * remain : Remaining transfer byte count when
+*              :                   : DMA transfer is aborted
+* Return Value : none
+*******************************************************************************/
+void usb1_function_DMAC3_Close (uint32_t * remain)
+{
+
+    /* ==== Abort transfer ==== */
+    RZA_IO_RegWrite_32(&DMAC3.CHCTRL_n,
+                        1,
+                        DMAC3_CHCTRL_n_CLREN_SHIFT,
+                        DMAC3_CHCTRL_n_CLREN);
+
+    while (1 == RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
+                                DMAC3_CHSTAT_n_TACT_SHIFT,
+                                DMAC3_CHSTAT_n_TACT))
+    {
+        /* Loop until transfer is aborted */
+    }
+
+    while (1 == RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
+                                DMAC3_CHSTAT_n_EN_SHIFT,
+                                DMAC3_CHSTAT_n_EN))
+    {
+        /* Loop until 0 is set in EN before checking the remaining transfer byte count */
+    }
+    /* ==== Obtain remaining transfer byte count ==== */
+    *remain = DMAC3.CRTB_n;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC3_Load_Set
+* Description  : Sets the transfer source address, transfer destination
+*              : address, and total transfer byte count respectively
+*              : specified by the argument src_addr, dst_addr, and count to
+*              : DMAC channel 3 as DMA transfer information.
+*              : Sets the register set selected by the CHCFG_n register
+*              : RSEL bit from the Next0 or Next1 register set.
+*              : This function should be called when DMA transfer of DMAC
+*              : channel 3 is aboted.
+* Arguments    : uint32_t src_addr : Transfer source address
+*              : uint32_t dst_addr : Transfer destination address
+*              : uint32_t count    : Total transfer byte count
+* Return Value : none
+*******************************************************************************/
+void usb1_function_DMAC3_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
+{
+    uint8_t reg_set;
+
+    /* Obtain register set in use */
+    reg_set = RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
+                                DMAC3_CHSTAT_n_SR_SHIFT,
+                                DMAC3_CHSTAT_n_SR);
+
+    /* ==== Load ==== */
+    if (0 == reg_set)
+    {
+        /* ---- Next0 Register Set ---- */
+        DMAC3.N0SA_n = src_addr;    /* Start address of transfer source      */
+        DMAC3.N0DA_n = dst_addr;    /* Start address of transfer destination */
+        DMAC3.N0TB_n = count;       /* Total transfer byte count             */
+    }
+    else
+    {
+        /* ---- Next1 Register Set ---- */
+        DMAC3.N1SA_n = src_addr;     /* Start address of transfer source      */
+        DMAC3.N1DA_n = dst_addr;     /* Start address of transfer destination */
+        DMAC3.N1TB_n = count;        /* Total transfer byte count             */
+     }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC4_PeriReqInit
+* Description  : Sets the register mode for DMA mode and the on-chip peripheral
+*              : module request for transfer request for DMAC channel 2.
+*              : Executes DMAC initial setting using the DMA information
+*              : specified by the argument *trans_info and the enabled/disabled
+*              : continuous transfer specified by the argument continuation.
+*              : Registers DMAC channel 2 interrupt handler function and sets
+*              : the interrupt priority level. Then enables transfer completion
+*              : interrupt.
+* Arguments    : dmac_transinfo_t * trans_info : Setting information to DMAC
+*              :                               : register
+*              : uint32_t dmamode      : DMA mode (only for DMAC_MODE_REGISTER)
+*              : uint32_t continuation : Set continuous transfer to be valid
+*              :                       : after DMA transfer has been completed
+*              :         DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
+*              :         DMAC_SAMPLE_SINGLE       : Do not execute continuous
+*              :                                  : transfer
+*              : uint32_t request_factor : Factor for on-chip peripheral module
+*              :                         : request
+*              :         DMAC_REQ_OSTM0TINT : OSTM_0 compare match
+*              :         DMAC_REQ_OSTM1TINT : OSTM_1 compare match
+*              :         DMAC_REQ_TGI0A     : MTU2_0 input capture/compare match
+*              :                 :
+*              : uint32_t req_direction : Setting value of CHCFG_n register
+*              :                        : REQD bit
+*******************************************************************************/
+void usb1_function_DMAC4_PeriReqInit (const dmac_transinfo_t * trans_info,
+                                      uint32_t dmamode, uint32_t continuation,
+                                      uint32_t request_factor, uint32_t req_direction)
+{
+    /* ==== Register mode ==== */
+    if (DMAC_MODE_REGISTER == dmamode)
+    {
+        /* ==== Next0 register set ==== */
+        DMAC4.N0SA_n = trans_info->src_addr;        /* Start address of transfer source      */
+        DMAC4.N0DA_n = trans_info->dst_addr;        /* Start address of transfer destination */
+        DMAC4.N0TB_n = trans_info->count;           /* Total transfer byte count             */
+
+        /* DAD : Transfer destination address counting direction */
+        /* SAD : Transfer source address counting direction      */
+        /* DDS : Transfer destination transfer size              */
+        /* SDS : Transfer source transfer size                   */
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            trans_info->daddr_dir,
+                            DMAC4_CHCFG_n_DAD_SHIFT,
+                            DMAC4_CHCFG_n_DAD);
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            trans_info->saddr_dir,
+                            DMAC4_CHCFG_n_SAD_SHIFT,
+                            DMAC4_CHCFG_n_SAD);
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            trans_info->dst_size,
+                            DMAC4_CHCFG_n_DDS_SHIFT,
+                            DMAC4_CHCFG_n_DDS);
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            trans_info->src_size,
+                            DMAC4_CHCFG_n_SDS_SHIFT,
+                            DMAC4_CHCFG_n_SDS);
+
+        /* DMS  : Register mode                            */
+        /* RSEL : Select Next0 register set                */
+        /* SBE  : No discharge of buffer data when aborted */
+        /* DEM  : No DMA interrupt mask                    */
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            0,
+                            DMAC4_CHCFG_n_DMS_SHIFT,
+                            DMAC4_CHCFG_n_DMS);
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            0,
+                            DMAC4_CHCFG_n_RSEL_SHIFT,
+                            DMAC4_CHCFG_n_RSEL);
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            0,
+                            DMAC4_CHCFG_n_SBE_SHIFT,
+                            DMAC4_CHCFG_n_SBE);
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            0,
+                            DMAC4_CHCFG_n_DEM_SHIFT,
+                            DMAC4_CHCFG_n_DEM);
+
+        /* ---- Continuous transfer ---- */
+        if (DMAC_SAMPLE_CONTINUATION == continuation)
+        {
+            /* REN : Execute continuous transfer                         */
+            /* RSW : Change register set when DMA transfer is completed. */
+            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                                1,
+                                DMAC4_CHCFG_n_REN_SHIFT,
+                                DMAC4_CHCFG_n_REN);
+            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                                1,
+                                DMAC4_CHCFG_n_RSW_SHIFT,
+                                DMAC4_CHCFG_n_RSW);
+        }
+        /* ---- Single transfer ---- */
+        else
+        {
+            /* REN : Do not execute continuous transfer                         */
+            /* RSW : Do not change register set when DMA transfer is completed. */
+            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                                0,
+                                DMAC4_CHCFG_n_REN_SHIFT,
+                                DMAC4_CHCFG_n_REN);
+            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                                0,
+                                DMAC4_CHCFG_n_RSW_SHIFT,
+                                DMAC4_CHCFG_n_RSW);
+        }
+
+        /* TM  : Single transfer                          */
+        /* SEL : Channel setting                          */
+        /* HIEN, LOEN : On-chip peripheral module request */
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            0,
+                            DMAC4_CHCFG_n_TM_SHIFT,
+                            DMAC4_CHCFG_n_TM);
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            4,
+                            DMAC4_CHCFG_n_SEL_SHIFT,
+                            DMAC4_CHCFG_n_SEL);
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            1,
+                            DMAC4_CHCFG_n_HIEN_SHIFT,
+                            DMAC4_CHCFG_n_HIEN);
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            0,
+                            DMAC4_CHCFG_n_LOEN_SHIFT,
+                            DMAC4_CHCFG_n_LOEN);
+
+        /* ---- Set factor by specified on-chip peripheral module request ---- */
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
+                            DMAC4_CHCFG_n_AM_SHIFT,
+                            DMAC4_CHCFG_n_AM);
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
+                            DMAC4_CHCFG_n_LVL_SHIFT,
+                            DMAC4_CHCFG_n_LVL);
+        if (usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
+        {
+            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                                usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
+                                DMAC4_CHCFG_n_REQD_SHIFT,
+                                DMAC4_CHCFG_n_REQD);
+        }
+        else
+        {
+            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                                req_direction,
+                                DMAC4_CHCFG_n_REQD_SHIFT,
+                                DMAC4_CHCFG_n_REQD);
+        }
+        RZA_IO_RegWrite_32(&DMAC45.DMARS,
+                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
+                            DMAC45_DMARS_CH4_RID_SHIFT,
+                            DMAC45_DMARS_CH4_RID);
+        RZA_IO_RegWrite_32(&DMAC45.DMARS,
+                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
+                            DMAC45_DMARS_CH4_MID_SHIFT,
+                            DMAC45_DMARS_CH4_MID);
+
+        /* PR : Round robin mode */
+        RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
+                            1,
+                            DMAC07_DCTRL_0_7_PR_SHIFT,
+                            DMAC07_DCTRL_0_7_PR);
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC4_Open
+* Description  : Enables DMAC channel 4 transfer.
+* Arguments    : uint32_t req : DMAC request mode
+* Return Value :  0 : Succeeded in enabling DMA transfer
+*              : -1 : Failed to enable DMA transfer (due to DMA operation)
+*******************************************************************************/
+int32_t usb1_function_DMAC4_Open (uint32_t req)
+{
+    int32_t ret;
+    volatile uint8_t  dummy;
+
+    /* Transferable? */
+    if ((0 == RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
+                                DMAC4_CHSTAT_n_EN_SHIFT,
+                                DMAC4_CHSTAT_n_EN)) &&
+        (0 == RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
+                                DMAC4_CHSTAT_n_TACT_SHIFT,
+                                DMAC4_CHSTAT_n_TACT)))
+    {
+        /* Clear Channel Status Register */
+        RZA_IO_RegWrite_32(&DMAC4.CHCTRL_n,
+                            1,
+                            DMAC4_CHCTRL_n_SWRST_SHIFT,
+                            DMAC4_CHCTRL_n_SWRST);
+        dummy = RZA_IO_RegRead_32(&DMAC4.CHCTRL_n,
+                                DMAC4_CHCTRL_n_SWRST_SHIFT,
+                                DMAC4_CHCTRL_n_SWRST);
+        /* Enable DMA transfer */
+        RZA_IO_RegWrite_32(&DMAC4.CHCTRL_n,
+                            1,
+                            DMAC4_CHCTRL_n_SETEN_SHIFT,
+                            DMAC4_CHCTRL_n_SETEN);
+
+        /* ---- Request by software ---- */
+        if (DMAC_REQ_MODE_SOFT == req)
+        {
+            /* DMA transfer Request by software */
+            RZA_IO_RegWrite_32(&DMAC4.CHCTRL_n,
+                                1,
+                                DMAC4_CHCTRL_n_STG_SHIFT,
+                                DMAC4_CHCTRL_n_STG);
+        }
+
+        ret = 0;
+    }
+    else
+    {
+        ret = -1;
+    }
+
+    return ret;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC4_Close
+* Description  : Aborts DMAC channel 4 transfer. Returns the remaining transfer
+*              : byte count at the time of DMA transfer abort to the argument
+*              : *remain.
+* Arguments    : uint32_t * remain : Remaining transfer byte count when
+*              :                   : DMA transfer is aborted
+* Return Value : none
+*******************************************************************************/
+void usb1_function_DMAC4_Close (uint32_t * remain)
+{
+
+    /* ==== Abort transfer ==== */
+    RZA_IO_RegWrite_32(&DMAC4.CHCTRL_n,
+                        1,
+                        DMAC4_CHCTRL_n_CLREN_SHIFT,
+                        DMAC4_CHCTRL_n_CLREN);
+
+    while (1 == RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
+                                DMAC4_CHSTAT_n_TACT_SHIFT,
+                                DMAC4_CHSTAT_n_TACT))
+    {
+        /* Loop until transfer is aborted */
+    }
+
+    while (1 == RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
+                                DMAC4_CHSTAT_n_EN_SHIFT,
+                                DMAC4_CHSTAT_n_EN))
+    {
+        /* Loop until 0 is set in EN before checking the remaining transfer byte count */
+    }
+    /* ==== Obtain remaining transfer byte count ==== */
+    *remain = DMAC4.CRTB_n;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC4_Load_Set
+* Description  : Sets the transfer source address, transfer destination
+*              : address, and total transfer byte count respectively
+*              : specified by the argument src_addr, dst_addr, and count to
+*              : DMAC channel 4 as DMA transfer information.
+*              : Sets the register set selected by the CHCFG_n register
+*              : RSEL bit from the Next0 or Next1 register set.
+*              : This function should be called when DMA transfer of DMAC
+*              : channel 4 is aboted.
+* Arguments    : uint32_t src_addr : Transfer source address
+*              : uint32_t dst_addr : Transfer destination address
+*              : uint32_t count    : Total transfer byte count
+* Return Value : none
+*******************************************************************************/
+void usb1_function_DMAC4_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
+{
+    uint8_t reg_set;
+
+    /* Obtain register set in use */
+    reg_set = RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
+                                DMAC4_CHSTAT_n_SR_SHIFT,
+                                DMAC4_CHSTAT_n_SR);
+
+    /* ==== Load ==== */
+    if (0 == reg_set)
+    {
+        /* ---- Next0 Register Set ---- */
+        DMAC4.N0SA_n = src_addr;    /* Start address of transfer source      */
+        DMAC4.N0DA_n = dst_addr;    /* Start address of transfer destination */
+        DMAC4.N0TB_n = count;       /* Total transfer byte count             */
+    }
+    else
+    {
+        /* ---- Next1 Register Set ---- */
+        DMAC4.N1SA_n = src_addr;    /* Start address of transfer source      */
+        DMAC4.N1DA_n = dst_addr;    /* Start address of transfer destination */
+        DMAC4.N1TB_n = count;       /* Total transfer byte count             */
+     }
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/userdef/usb1_function_userdef.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/userdef/usb1_function_userdef.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,762 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_userdef.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include <stdio.h>
+#include "r_typedefs.h"
+#include "iodefine.h"
+#include "devdrv_usb_function_api.h"
+#include "usb1_function_dmacdrv.h"  /* common DMAC driver for USB */
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+#define DUMMY_ACCESS OSTM0CNT
+
+/* #define CACHE_WRITEBACK */
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+extern int32_t io_cwb(unsigned long start, unsigned long end);
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+static void usb1_function_enable_dmac0(uint32_t src, uint32_t dst, uint32_t count,
+                                       uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
+static void usb1_function_enable_dmac1(uint32_t src, uint32_t dst, uint32_t count,
+                                       uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
+static void Userdef_USB_usb1_function_delay_10us_2(void);
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_d0fifo_dmaintid
+* Description  : get D0FIFO DMA Interrupt ID
+* Arguments    : none
+* Return Value : D0FIFO DMA Interrupt ID
+*******************************************************************************/
+IRQn_Type Userdef_USB_usb1_function_d0fifo_dmaintid (void)
+{
+#if 0
+    return DMAINT1_IRQn;
+#else
+    return 0xFFFF;
+#endif
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_d1fifo_dmaintid
+* Description  : get D1FIFO DMA Interrupt ID
+* Arguments    : none
+* Return Value : D1FIFO DMA Interrupt ID
+*******************************************************************************/
+IRQn_Type Userdef_USB_usb1_function_d1fifo_dmaintid (void)
+{
+#if 0
+    return DMAINT1_IRQn;
+#else
+    return 0xFFFF;
+#endif
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_attach
+* Description  : Wait for the software of 1ms.
+*              : Alter this function according to the user's system.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb1_function_attach (void)
+{
+    printf("\n");
+    printf("channel 1 attach device\n");
+    printf("\n");
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_detach
+* Description  : Wait for the software of 1ms.
+*              : Alter this function according to the user's system.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb1_function_detach (void)
+{
+    printf("\n");
+    printf("channel 1 detach device\n");
+    printf("\n");
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_delay_1ms
+* Description  : Wait for the software of 1ms.
+*              : Alter this function according to the user's system.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb1_function_delay_1ms (void)
+{
+    volatile int i;
+    volatile unsigned long tmp;
+
+    /*
+     * Wait 1ms (Please change for your MCU).
+     */
+    for (i = 0; i < 1440; ++i)
+    {
+        tmp = DUMMY_ACCESS;
+    }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_delay_xms
+* Description  : Wait for the software in the period of time specified by the
+*              : argument.
+*              : Alter this function according to the user's system.
+* Arguments    : uint32_t msec ; Wait Time (msec)
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb1_function_delay_xms (uint32_t msec)
+{
+    volatile unsigned short i;
+
+    for (i = 0; i < msec; ++i)
+    {
+        Userdef_USB_usb1_function_delay_1ms();
+    }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_delay_10us
+* Description  : Waits for software for the period specified by the argument.
+*              : Alter this function according to the user's system.
+* Arguments    : uint32_t usec ; Wait Time(x 10usec)
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb1_function_delay_10us (uint32_t usec)
+{
+    volatile int i;
+
+    /* Wait 10us (Please change for your MCU) */
+    for (i = 0; i < usec; ++i)
+    {
+        Userdef_USB_usb1_function_delay_10us_2();
+    }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_delay_10us_2
+* Description  : Waits for software for the period specified by the argument.
+*              : Alter this function according to the user's system.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+static void Userdef_USB_usb1_function_delay_10us_2 (void)
+{
+    volatile int i;
+    volatile unsigned long tmp;
+
+    /* Wait 1us (Please change for your MCU) */
+    for (i = 0; i < 14; ++i)
+    {
+        tmp = DUMMY_ACCESS;
+    }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_delay_500ns
+* Description  : Wait for software for 500ns.
+*              : Alter this function according to the user's system.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb1_function_delay_500ns (void)
+{
+    volatile int i;
+    volatile unsigned long tmp;
+
+    /* Wait 500ns (Please change for your MCU) */
+    /* Wait 500ns I clock 266MHz */
+    tmp = DUMMY_ACCESS;
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_start_dma
+* Description  : Enables DMA transfer on the information specified by the argument.
+*              : Set DMAC register by this function to enable DMA transfer.
+*              : After executing this function, USB module is set to start DMA
+*              : transfer. DMA transfer should not wait for DMA transfer complete.
+* Arguments    : USB_FUNCTION_DMA_t *dma   : DMA parameter
+*              :  typedef struct{
+*              :      uint32_t fifo;    FIFO for using
+*              :      uint32_t buffer;  Start address of transfer source/destination
+*              :      uint32_t bytes;   Transfer size(Byte)
+*              :      uint32_t dir;     Transfer direction(0:Buffer->FIFO, 1:FIFO->Buffer)
+*              :      uint32_t size;    DMA transfer size
+*              :   } USB_FUNCTION_DMA_t;
+*              : uint16_t dfacc ; 0 : cycle steal mode
+*              :                  1 : 16byte continuous mode
+*              :                  2 : 32byte continuous mode
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb1_function_start_dma (USB_FUNCTION_DMA_t * dma, uint16_t dfacc)
+{
+    uint32_t trncount;
+    uint32_t src;
+    uint32_t dst;
+    uint32_t size;
+    uint32_t dir;
+#ifdef CACHE_WRITEBACK
+    uint32_t ptr;
+#endif
+
+    trncount = dma->bytes;
+    dir      = dma->dir;
+
+    if (dir == USB_FUNCTION_FIFO2BUF)
+    {
+        /* DxFIFO determination */
+        dst = dma->buffer;
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+        if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+        {
+            src = (uint32_t)(&USB201.D0FIFO.UINT32);
+        }
+        else
+        {
+            src = (uint32_t)(&USB201.D1FIFO.UINT32);
+        }
+        size = dma->size;
+
+        if (size == 0)
+        {
+            src += 3;       /* byte access  */
+        }
+        else if (size == 1)
+        {
+            src += 2;       /* short access */
+        }
+        else
+        {
+            /* Do Nothing */
+        }
+#else
+        size = dma->size;
+
+        if (size == 2)
+        {
+            /* 32bit access */
+            if (dfacc == 2)
+            {
+                /* 32byte access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    src = (uint32_t)(&USB201.D0FIFOB0);
+                }
+                else
+                {
+                    src = (uint32_t)(&USB201.D1FIFOB0);
+                }
+            }
+            else if (dfacc == 1)
+            {
+                /* 16byte access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    src = (uint32_t)(&USB201.D0FIFOB0);
+                }
+                else
+                {
+                    src = (uint32_t)(&USB201.D1FIFOB0);
+                }
+            }
+            else
+            {
+                /* normal access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    src = (uint32_t)(&USB201.D0FIFO.UINT32);
+                }
+                else
+                {
+                    src = (uint32_t)(&USB201.D1FIFO.UINT32);
+                }
+            }
+        }
+        else if (size == 1)
+        {
+            /* 16bit access */
+            dfacc = 0;      /* force normal access */
+
+            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+            {
+                src = (uint32_t)(&USB201.D0FIFO.UINT32);
+            }
+            else
+            {
+                src = (uint32_t)(&USB201.D1FIFO.UINT32);
+            }
+            src += 2;       /* short access */
+        }
+        else
+        {
+            /* 8bit access */
+            dfacc = 0;      /* force normal access */
+
+            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+            {
+                src = (uint32_t)(&USB201.D0FIFO.UINT32);
+            }
+            else
+            {
+                src = (uint32_t)(&USB201.D1FIFO.UINT32);
+            }
+            src += 3;       /* byte access */
+        }
+#endif
+    }
+    else
+    {
+        /* DxFIFO determination */
+        src = dma->buffer;
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+        if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+        {
+            dst = (uint32_t)(&USB201.D0FIFO.UINT32);
+        }
+        else
+        {
+            dst = (uint32_t)(&USB201.D1FIFO.UINT32);
+        }
+        size = dma->size;
+
+        if (size == 0)
+        {
+            dst += 3;       /* byte access  */
+        }
+        else if (size == 1)
+        {
+            dst += 2;       /* short access */
+        }
+        else
+        {
+            /* Do Nothing */
+        }
+#else
+        size = dma->size;
+
+        if (size == 2)
+        {
+            /* 32bit access */
+            if (dfacc == 2)
+            {
+                /* 32byte access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    dst = (uint32_t)(&USB201.D0FIFOB0);
+                }
+                else
+                {
+                    dst = (uint32_t)(&USB201.D1FIFOB0);
+                }
+            }
+            else if (dfacc == 1)
+            {
+                /* 16byte access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    dst = (uint32_t)(&USB201.D0FIFOB0);
+                }
+                else
+                {
+                    dst = (uint32_t)(&USB201.D1FIFOB0);
+                }
+            }
+            else
+            {
+                /* normal access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    dst = (uint32_t)(&USB201.D0FIFO.UINT32);
+                }
+                else
+                {
+                    dst = (uint32_t)(&USB201.D1FIFO.UINT32);
+                }
+            }
+        }
+        else if (size == 1)
+        {
+            /* 16bit access */
+            dfacc = 0;      /* force normal access */
+            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+            {
+                dst = (uint32_t)(&USB201.D0FIFO.UINT32);
+            }
+            else
+            {
+                dst = (uint32_t)(&USB201.D1FIFO.UINT32);
+            }
+            dst += 2;       /* short access */
+        }
+        else
+        {
+            /* 8bit access */
+            dfacc = 0;      /* force normal access */
+
+            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+            {
+                dst = (uint32_t)(&USB201.D0FIFO.UINT32);
+            }
+            else
+            {
+                dst = (uint32_t)(&USB201.D1FIFO.UINT32);
+            }
+            dst += 3;       /* byte access  */
+        }
+#endif
+    }
+
+#ifdef CACHE_WRITEBACK
+    ptr = (uint32_t)dma->buffer;
+
+    if ((ptr & 0x20000000ul) == 0)
+    {
+        io_cwb((uint32_t)ptr, (uint32_t)(ptr) + trncount);
+    }
+#endif
+
+    if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+    {
+        usb1_function_enable_dmac0(src, dst, trncount, size, dir, dma->fifo, dfacc);
+    }
+    else
+    {
+        usb1_function_enable_dmac1(src, dst, trncount, size, dir, dma->fifo, dfacc);
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_enable_dmac0
+* Description  : Enables DMA transfer on the information specified by the argument.
+* Arguments    : uint32_t src   : src address
+*              : uint32_t dst   : dst address
+*              : uint32_t count : transfer byte
+*              : uint32_t size  : transfer size
+*              : uint32_t dir   : direction
+*              : uint32_t fifo  : FIFO(D0FIFO or D1FIFO)
+*              : uint16_t dfacc : 0 : normal access
+*              :                : 1 : 16byte access
+*              :                : 2 : 32byte access
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_enable_dmac0 (uint32_t src, uint32_t dst, uint32_t count,
+                                        uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
+{
+    dmac_transinfo_t trans_info;
+    uint32_t         request_factor = 0;
+    int32_t          ret;
+
+    /* ==== Variable setting for DMAC initialization ==== */
+    trans_info.src_addr = (uint32_t)src;                /* Start address of transfer source      */
+    trans_info.dst_addr = (uint32_t)dst;                /* Start address of transfer destination */
+    trans_info.count    = (uint32_t)count;              /* Total byte count to be transferred    */
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+    if (size == 0)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_8;        /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_8;        /* Transfer destination transfer size */
+    }
+    else if (size == 1)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_16;       /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_16;       /* Transfer destination transfer size */
+    }
+    else if (size == 2)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_32;       /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_32;       /* Transfer destination transfer size */
+    }
+    else
+    {
+        printf("size error!!\n");
+    }
+#else
+    if (dfacc == 2)
+    {
+        /* 32byte access */
+        trans_info.src_size = DMAC_TRANS_SIZE_256;      /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_256;      /* Transfer destination transfer size */
+    }
+    else if (dfacc == 1)
+    {
+        /* 16byte access */
+        trans_info.src_size = DMAC_TRANS_SIZE_128;      /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_128;      /* Transfer destination transfer size */
+    }
+    else
+    {
+        /* normal access */
+        if (size == 0)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_8;    /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_8;    /* Transfer destination transfer size */
+        }
+        else if (size == 1)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_16;   /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_16;   /* Transfer destination transfer size */
+        }
+        else if (size == 2)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_32;   /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_32;   /* Transfer destination transfer size */
+        }
+        else
+        {
+            printf("size error!!\n");
+        }
+    }
+#endif
+
+    if (dir == USB_FUNCTION_FIFO2BUF)
+    {
+        request_factor =DMAC_REQ_USB1_DMA0_RX;          /* USB_0 channel 0 receive FIFO full               */
+        trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer source address      */
+        trans_info.daddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer destination address */
+    }
+    else if (dir == USB_FUNCTION_BUF2FIFO)
+    {
+        request_factor =DMAC_REQ_USB1_DMA0_TX;          /* USB_0 channel 0 receive FIFO empty              */
+        trans_info.saddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer source address      */
+        trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer destination address */
+    }
+    else
+    {
+        /* Do Nothing */
+    }
+
+    /* ==== DMAC initialization ==== */
+    usb1_function_DMAC3_PeriReqInit((const dmac_transinfo_t *)&trans_info,
+                                    DMAC_MODE_REGISTER,
+                                    DMAC_SAMPLE_SINGLE,
+                                    request_factor,
+                                    0);     /* Don't care DMAC_REQ_REQD is setting in
+                                            usb1_function_DMAC3_PeriReqInit() */
+
+    /* ==== DMAC startup ==== */
+    ret = usb1_function_DMAC3_Open(DMAC_REQ_MODE_PERI);
+    if (ret != 0)
+    {
+        printf("DMAC3 Open error!!\n");
+    }
+
+    return;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_enable_dmac1
+* Description  : Enables DMA transfer on the information specified by the argument.
+* Arguments    : uint32_t src   : src address
+*              : uint32_t dst   : dst address
+*              : uint32_t count : transfer byte
+*              : uint32_t size  : transfer size
+*              : uint32_t dir   : direction
+*              : uint32_t fifo  : FIFO(D0FIFO or D1FIFO)
+*              : uint16_t dfacc : 0 : normal access
+*              :                : 1 : 16byte access
+*              :                : 2 : 32byte access
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_enable_dmac1 (uint32_t src, uint32_t dst, uint32_t count,
+                                        uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
+{
+    dmac_transinfo_t trans_info;
+    uint32_t         request_factor = 0;
+    int32_t          ret;
+
+    /* ==== Variable setting for DMAC initialization ==== */
+    trans_info.src_addr = (uint32_t)src;                /* Start address of transfer source      */
+    trans_info.dst_addr = (uint32_t)dst;                /* Start address of transfer destination */
+    trans_info.count    = (uint32_t)count;              /* Total byte count to be transferred    */
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+    if (size == 0)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_8;        /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_8;        /* Transfer destination transfer size */
+    }
+    else if (size == 1)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_16;       /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_16;       /* Transfer destination transfer size */
+    }
+    else if (size == 2)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_32;       /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_32;       /* Transfer destination transfer size */
+    }
+    else
+    {
+        printf("size error!!\n");
+    }
+#else
+    if (dfacc == 2)
+    {
+        /* 32byte access */
+        trans_info.src_size = DMAC_TRANS_SIZE_256;      /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_256;      /* Transfer destination transfer size */
+    }
+    else if (dfacc == 1)
+    {
+        /* 16byte access */
+        trans_info.src_size = DMAC_TRANS_SIZE_128;      /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_128;      /* Transfer destination transfer size */
+    }
+    else
+    {
+        /* normal access */
+        if (size == 0)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_8;    /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_8;    /* Transfer destination transfer size */
+        }
+        else if (size == 1)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_16;   /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_16;   /* Transfer destination transfer size */
+        }
+        else if (size == 2)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_32;   /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_32;   /* Transfer destination transfer size */
+        }
+        else
+        {
+            printf("size error!!\n");
+        }
+    }
+#endif
+
+    if (dir == USB_FUNCTION_FIFO2BUF)
+    {
+        request_factor =DMAC_REQ_USB1_DMA1_RX;          /* USB_0 channel 0 receive FIFO full               */
+        trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer source address      */
+        trans_info.daddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer destination address */
+    }
+    else if (dir == USB_FUNCTION_BUF2FIFO)
+    {
+        request_factor =DMAC_REQ_USB1_DMA1_TX;          /* USB_0 channel 0 receive FIFO empty              */
+        trans_info.saddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer source address      */
+        trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer destination address */
+    }
+    else
+    {
+        /* Do Nothing */
+    }
+
+    /* ==== DMAC initialization ==== */
+    usb1_function_DMAC4_PeriReqInit((const dmac_transinfo_t *)&trans_info,
+                                    DMAC_MODE_REGISTER,
+                                    DMAC_SAMPLE_SINGLE,
+                                    request_factor,
+                                    0);     /* Don't care DMAC_REQ_REQD is setting in
+                                            usb1_function_DMAC4_PeriReqInit() */
+
+    /* ==== DMAC startup ==== */
+    ret = usb1_function_DMAC4_Open(DMAC_REQ_MODE_PERI);
+    if (ret != 0)
+    {
+        printf("DMAC4 Open error!!\n");
+    }
+
+    return;
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_stop_dma0
+* Description  : Disables DMA transfer.
+*              : This function should be executed to DMAC executed at the time
+*              : of specification of D0_FIF0_DMA in dma->fifo.
+* Arguments    : none
+* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
+*              : regarding to the bus width.
+*******************************************************************************/
+uint32_t Userdef_USB_usb1_function_stop_dma0 (void)
+{
+    uint32_t remain;
+
+    /* ==== DMAC release ==== */
+    usb1_function_DMAC3_Close(&remain);
+
+    return remain;
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_stop_dma1
+* Description  : Disables DMA transfer.
+*              : This function should be executed to DMAC executed at the time
+*              : of specification of D1_FIF0_DMA in dma->fifo.
+* Arguments    : none
+* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
+*              : regarding to the bus width.
+*******************************************************************************/
+uint32_t Userdef_USB_usb1_function_stop_dma1 (void)
+{
+    uint32_t remain;
+
+    /* ==== DMAC release ==== */
+    usb1_function_DMAC4_Close(&remain);
+
+    return remain;
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_RZ_A1H/usb_function_setting.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/usb_function_setting.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,173 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2014 - 2015 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+
+#ifndef USB_FUNCTION_SETTING_H
+#define USB_FUNCTION_SETTING_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define USB_FUNCTION_CH                       0
+#define USB_FUNCTION_HISPEED                  1
+
+#if (USB_FUNCTION_CH == 0)
+#include "usb0_function.h"
+#define USB20X                                USB200
+#define USBIX_IRQn                            USBI0_IRQn
+#define g_usbx_function_bit_set               g_usb0_function_bit_set
+#define g_usbx_function_PipeDataSize          g_usb0_function_PipeDataSize
+#define g_usbx_function_data_count            g_usb0_function_data_count
+#define g_usbx_function_PipeTbl               g_usb0_function_PipeTbl
+#define g_usbx_function_DmaStatus             g_usb0_function_DmaStatus
+#define g_usbx_function_pipecfg               g_usb0_function_pipecfg
+#define g_usbx_function_pipe_status           g_usb0_function_pipe_status
+#define g_usbx_function_data_pointer          g_usb0_function_data_pointer
+#define g_usbx_function_pipebuf               g_usb0_function_pipebuf
+#define g_usbx_function_pipemaxp              g_usb0_function_pipemaxp
+#define g_usbx_function_pipeperi              g_usb0_function_pipeperi
+#define g_usbx_function_TestModeFlag          g_usb0_function_TestModeFlag
+#define usbx_function_BRDYInterruptPIPE0      usb0_function_BRDYInterruptPIPE0
+#define usbx_function_BRDYInterrupt           usb0_function_BRDYInterrupt
+#define usbx_function_NRDYInterruptPIPE0      usb0_function_NRDYInterruptPIPE0
+#define usbx_function_NRDYInterrupt           usb0_function_NRDYInterrupt
+#define usbx_function_BEMPInterruptPIPE0      usb0_function_BEMPInterruptPIPE0
+#define usbx_function_BEMPInterrupt           usb0_function_BEMPInterrupt
+#define usbx_function_read_buffer_c           usb0_function_read_buffer_c
+#define usbx_function_set_pid_buf             usb0_function_set_pid_buf
+#define usbx_function_disable_brdy_int        usb0_function_disable_brdy_int
+#define usbx_function_set_pid_stall           usb0_function_set_pid_stall
+#define usbx_function_dma_interrupt_d0fifo    usb0_function_dma_interrupt_d0fifo
+#define usbx_function_read_dma                usb0_function_read_dma
+#define usbx_function_dma_interrupt_d1fifo    usb0_function_dma_interrupt_d1fifo
+#define usbx_function_write_buffer            usb0_function_write_buffer
+#define usbx_function_set_pid_nak             usb0_function_set_pid_nak
+#define usbx_function_get_mbw                 usb0_function_get_mbw
+#define usbx_function_set_curpipe             usb0_function_set_curpipe
+#define usbx_function_aclrm                   usb0_function_aclrm
+#define usbx_function_enable_nrdy_int         usb0_function_enable_nrdy_int
+#define usbx_function_enable_brdy_int         usb0_function_enable_brdy_int
+#define usbx_function_get_pid                 usb0_function_get_pid
+#define usbx_function_get_inbuf               usb0_function_get_inbuf
+#define usbx_function_disable_bemp_int        usb0_function_disable_bemp_int
+#define usbx_function_EpToPipe                usb0_function_EpToPipe
+#define usbx_function_clear_pipe_tbl          usb0_function_clear_pipe_tbl
+#define Userdef_USB_usbx_function_d0fifo_dmaintid Userdef_USB_usb0_function_d0fifo_dmaintid
+#define Userdef_USB_usbx_function_d1fifo_dmaintid Userdef_USB_usb0_function_d1fifo_dmaintid
+#define usbx_function_reset_module            usb0_function_reset_module
+#define usbx_function_init_status             usb0_function_init_status
+#define usbx_function_InitModule              usb0_function_InitModule
+#define usbx_function_clear_alt               usb0_function_clear_alt
+#define usbx_function_set_sqclr               usb0_function_set_sqclr
+#define usbx_api_function_CtrlWriteStart      usb0_api_function_CtrlWriteStart
+#define usbx_api_function_CtrlReadStart       usb0_api_function_CtrlReadStart
+#define usbx_function_write_buffer_c          usb0_function_write_buffer_c
+#define usbx_api_function_check_pipe_status   usb0_api_function_check_pipe_status
+#define usbx_api_function_set_pid_nak         usb0_api_function_set_pid_nak
+#define usbx_api_function_clear_pipe_status   usb0_api_function_clear_pipe_status
+#define usbx_api_function_start_receive_transfer usb0_api_function_start_receive_transfer
+#define usbx_function_read_buffer             usb0_function_read_buffer
+#define usbx_api_function_start_send_transfer usb0_api_function_start_send_transfer
+#define usbx_function_stop_transfer           usb0_function_stop_transfer
+#define usbx_function_clear_pid_stall         usb0_function_clear_pid_stall
+#define usbx_function_CheckVBUStaus           usb0_function_CheckVBUStaus
+#define usbx_function_USB_FUNCTION_Attach     usb0_function_USB_FUNCTION_Attach
+#define usbx_function_USB_FUNCTION_Detach     usb0_function_USB_FUNCTION_Detach
+#define usbx_function_is_hispeed              usb0_function_is_hispeed
+#define usbx_function_ResetDescriptor         usb0_function_ResetDescriptor
+#define usbx_function_USB_FUNCTION_Suspend    usb0_function_USB_FUNCTION_Suspend
+#define usbx_function_USB_FUNCTION_TestMode   usb0_function_USB_FUNCTION_TestMode
+#else
+#include "usb1_function.h"
+#define USB20X                                USB201
+#define USBIX_IRQn                            USBI1_IRQn
+#define g_usbx_function_bit_set               g_usb1_function_bit_set
+#define g_usbx_function_PipeDataSize          g_usb1_function_PipeDataSize
+#define g_usbx_function_data_count            g_usb1_function_data_count
+#define g_usbx_function_PipeTbl               g_usb1_function_PipeTbl
+#define g_usbx_function_DmaStatus             g_usb1_function_DmaStatus
+#define g_usbx_function_pipecfg               g_usb1_function_pipecfg
+#define g_usbx_function_pipe_status           g_usb1_function_pipe_status
+#define g_usbx_function_data_pointer          g_usb1_function_data_pointer
+#define g_usbx_function_pipebuf               g_usb1_function_pipebuf
+#define g_usbx_function_pipemaxp              g_usb1_function_pipemaxp
+#define g_usbx_function_pipeperi              g_usb1_function_pipeperi
+#define g_usbx_function_TestModeFlag          g_usb1_function_TestModeFlag
+#define usbx_function_BRDYInterruptPIPE0      usb1_function_BRDYInterruptPIPE0
+#define usbx_function_BRDYInterrupt           usb1_function_BRDYInterrupt
+#define usbx_function_NRDYInterruptPIPE0      usb1_function_NRDYInterruptPIPE0
+#define usbx_function_NRDYInterrupt           usb1_function_NRDYInterrupt
+#define usbx_function_BEMPInterruptPIPE0      usb1_function_BEMPInterruptPIPE0
+#define usbx_function_BEMPInterrupt           usb1_function_BEMPInterrupt
+#define usbx_function_read_buffer_c           usb1_function_read_buffer_c
+#define usbx_function_set_pid_buf             usb1_function_set_pid_buf
+#define usbx_function_disable_brdy_int        usb1_function_disable_brdy_int
+#define usbx_function_set_pid_stall           usb1_function_set_pid_stall
+#define usbx_function_dma_interrupt_d0fifo    usb1_function_dma_interrupt_d0fifo
+#define usbx_function_read_dma                usb1_function_read_dma
+#define usbx_function_dma_interrupt_d1fifo    usb1_function_dma_interrupt_d1fifo
+#define usbx_function_write_buffer            usb1_function_write_buffer
+#define usbx_function_set_pid_nak             usb1_function_set_pid_nak
+#define usbx_function_get_mbw                 usb1_function_get_mbw
+#define usbx_function_set_curpipe             usb1_function_set_curpipe
+#define usbx_function_aclrm                   usb1_function_aclrm
+#define usbx_function_enable_nrdy_int         usb1_function_enable_nrdy_int
+#define usbx_function_enable_brdy_int         usb1_function_enable_brdy_int
+#define usbx_function_get_pid                 usb1_function_get_pid
+#define usbx_function_get_inbuf               usb1_function_get_inbuf
+#define usbx_function_disable_bemp_int        usb1_function_disable_bemp_int
+#define usbx_function_EpToPipe                usb1_function_EpToPipe
+#define usbx_function_clear_pipe_tbl          usb1_function_clear_pipe_tbl
+#define Userdef_USB_usbx_function_d0fifo_dmaintid Userdef_USB_usb1_function_d0fifo_dmaintid
+#define Userdef_USB_usbx_function_d1fifo_dmaintid Userdef_USB_usb1_function_d1fifo_dmaintid
+#define usbx_function_reset_module            usb1_function_reset_module
+#define usbx_function_init_status             usb1_function_init_status
+#define usbx_function_InitModule              usb1_function_InitModule
+#define usbx_function_clear_alt               usb1_function_clear_alt
+#define usbx_function_set_sqclr               usb1_function_set_sqclr
+#define usbx_api_function_CtrlWriteStart      usb1_api_function_CtrlWriteStart
+#define usbx_api_function_CtrlReadStart       usb1_api_function_CtrlReadStart
+#define usbx_function_write_buffer_c          usb1_function_write_buffer_c
+#define usbx_api_function_check_pipe_status   usb1_api_function_check_pipe_status
+#define usbx_api_function_set_pid_nak         usb1_api_function_set_pid_nak
+#define usbx_api_function_clear_pipe_status   usb1_api_function_clear_pipe_status
+#define usbx_api_function_start_receive_transfer usb1_api_function_start_receive_transfer
+#define usbx_function_read_buffer             usb1_function_read_buffer
+#define usbx_api_function_start_send_transfer usb1_api_function_start_send_transfer
+#define usbx_function_stop_transfer           usb1_function_stop_transfer
+#define usbx_function_clear_pid_stall         usb1_function_clear_pid_stall
+#define usbx_function_CheckVBUStaus           usb1_function_CheckVBUStaus
+#define usbx_function_USB_FUNCTION_Attach     usb1_function_USB_FUNCTION_Attach
+#define usbx_function_USB_FUNCTION_Detach     usb1_function_USB_FUNCTION_Detach
+#define usbx_function_is_hispeed              usb1_function_is_hispeed
+#define usbx_function_ResetDescriptor         usb1_function_ResetDescriptor
+#define usbx_function_USB_FUNCTION_Suspend    usb1_function_USB_FUNCTION_Suspend
+#define usbx_function_USB_FUNCTION_TestMode   usb1_function_USB_FUNCTION_TestMode
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* USB_FUNCTION_SETTING_H */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/inc/devdrv_usb_function_api.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/inc/devdrv_usb_function_api.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,365 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : devdrv_usb_function_api.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description  : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB_FUNCTION_API_H
+#define USB_FUNCTION_API_H
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include <VKRZA1H.h>
+#include "r_typedefs.h"
+#include "usb0_function_api.h"
+#include "usb1_function_api.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+typedef struct
+{
+    uint32_t fifo;
+    uint32_t buffer;
+    uint32_t bytes;
+    uint32_t dir;
+    uint32_t size;
+} USB_FUNCTION_DMA_t;
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+#define USBFCLOCK_X1_48MHZ                          (0x0000u)       /* USB_X1_48MHz */
+#define USBFCLOCK_EXTAL_12MHZ                       (0x0004u)       /* EXTAL_12MHz  */
+
+#define DEVDRV_USBF_ON                              (1)
+#define DEVDRV_USBF_OFF                             (0)
+#define DEVDRV_USBF_YES                             (1)
+#define DEVDRV_USBF_NO                              (0)
+
+#define DEVDRV_USBF_STALL                           (-2)
+
+#define DEVDRV_USBF_WRITEEND                        (0)
+#define DEVDRV_USBF_WRITESHRT                       (1)
+#define DEVDRV_USBF_WRITING                         (2)
+#define DEVDRV_USBF_WRITEDMA                        (3)
+
+#define DEVDRV_USBF_FIFOERROR                       (0xffff)
+
+#define DEVDRV_USBF_PIPE_IDLE                       (0x00)
+#define DEVDRV_USBF_PIPE_WAIT                       (0x01)
+#define DEVDRV_USBF_PIPE_DONE                       (0x02)
+#define DEVDRV_USBF_PIPE_NORES                      (0x03)
+#define DEVDRV_USBF_PIPE_STALL                      (0x04)
+
+#define DEVDRV_USBF_PID_NAK                         (0x0000u)
+#define DEVDRV_USBF_PID_BUF                         (0x0001u)
+#define DEVDRV_USBF_PID_STALL                       (0x0002u)
+#define DEVDRV_USBF_PID_STALL2                      (0x0003u)
+
+#define USB_FUNCTION_NON_SPEED                      (0)
+#define USB_FUNCTION_LOW_SPEED                      (1)
+#define USB_FUNCTION_FULL_SPEED                     (2)
+#define USB_FUNCTION_HIGH_SPEED                     (3)
+
+#define USB_FUNCTION_READEND                        (0)
+#define USB_FUNCTION_READSHRT                       (1)
+#define USB_FUNCTION_READING                        (2)
+#define USB_FUNCTION_READOVER                       (3)
+#define USB_FUNCTION_READZERO                       (4)
+
+#define USB_FUNCTION_MAX_PIPE_NO                    (15u)
+#define USB_FUNCTION_PIPE0                          (0)
+#define USB_FUNCTION_PIPE1                          (1)
+#define USB_FUNCTION_PIPE2                          (2)
+#define USB_FUNCTION_PIPE3                          (3)
+#define USB_FUNCTION_PIPE4                          (4)
+#define USB_FUNCTION_PIPE5                          (5)
+#define USB_FUNCTION_PIPE6                          (6)
+#define USB_FUNCTION_PIPE7                          (7)
+#define USB_FUNCTION_PIPE8                          (8)
+#define USB_FUNCTION_PIPE9                          (9)
+#define USB_FUNCTION_PIPEA                          (10)
+#define USB_FUNCTION_PIPEB                          (11)
+#define USB_FUNCTION_PIPEC                          (12)
+#define USB_FUNCTION_PIPED                          (13)
+#define USB_FUNCTION_PIPEE                          (14)
+#define USB_FUNCTION_PIPEF                          (15)
+
+#define USB_FUNCTION_ISO                            (0xc000u)
+#define USB_FUNCTION_INTERRUPT                      (0x8000u)
+#define USB_FUNCTION_BULK                           (0x4000u)
+
+#define USB_FUNCTION_NONE                           (0x0000u)
+#define USB_FUNCTON_BFREFIELD                       (0x0400u)
+#define USB_FUNCTION_BFREON                         (0x0400u)
+#define USB_FUNCTION_BFREOFF                        (0x0000u)
+#define USB_FUNCTION_DBLBFIELD                      (0x0200u)
+#define USB_FUNCTION_DBLBON                         (0x0200u)
+#define USB_FUNCTION_DBLBOFF                        (0x0000u)
+#define USB_FUNCTION_CNTMDFIELD                     (0x0100u)
+#define USB_FUNCTION_CNTMDON                        (0x0100u)
+#define USB_FUNCTION_CNTMDOFF                       (0x0000u)
+#define USB_FUNCTION_SHTNAKON                       (0x0080u)
+#define USB_FUNCTION_SHTNAKOFF                      (0x0000u)
+#define USB_FUNCTION_DIRFIELD                       (0x0010u)
+#define USB_FUNCTION_DIR_P_OUT                      (0x0000u)
+#define USB_FUNCTION_DIR_P_IN                       (0x0010u)
+#define USB_FUNCTION_EPNUMFIELD                     (0x000fu)
+#define USB_FUNCTION_MAX_EP_NO                      (15u)
+#define USB_FUNCTION_EP0                            (0u)
+#define USB_FUNCTION_EP1                            (1u)
+#define USB_FUNCTION_EP2                            (2u)
+#define USB_FUNCTION_EP3                            (3u)
+#define USB_FUNCTION_EP4                            (4u)
+#define USB_FUNCTION_EP5                            (5u)
+#define USB_FUNCTION_EP6                            (6u)
+#define USB_FUNCTION_EP7                            (7u)
+#define USB_FUNCTION_EP8                            (8u)
+#define USB_FUNCTION_EP9                            (9u)
+#define USB_FUNCTION_EP10                           (10u)
+#define USB_FUNCTION_EP11                           (11u)
+#define USB_FUNCTION_EP12                           (12u)
+#define USB_FUNCTION_EP13                           (13u)
+#define USB_FUNCTION_EP14                           (14u)
+#define USB_FUNCTION_EP15                           (15u)
+
+#define USB_FUNCTION_EPTABLE_LENGTH                 (5u)
+
+#define USB_FUNCTION_CUSE                           (0)
+#define USB_FUNCTION_D0USE                          (1)
+#define USB_FUNCTION_D0DMA                          (2)
+#define USB_FUNCTION_D1USE                          (3)
+#define USB_FUNCTION_D1DMA                          (4)
+
+#define USB_FUNCTION_CFIFO_USE                      (0x0000)
+#define USB_FUNCTION_D0FIFO_USE                     (0x1000)
+#define USB_FUNCTION_D1FIFO_USE                     (0x2000)
+#define USB_FUNCTION_D0FIFO_DMA                     (0x5000)
+#define USB_FUNCTION_D1FIFO_DMA                     (0x6000)
+
+#define USB_FUNCTION_BUF2FIFO                       (0)
+#define USB_FUNCTION_FIFO2BUF                       (1)
+
+#define USB_FUNCTION_DVST_POWERED                   (0x0001)
+#define USB_FUNCTION_DVST_DEFAULT                   (0x0002)
+#define USB_FUNCTION_DVST_ADDRESS                   (0x0003)
+#define USB_FUNCTION_DVST_CONFIGURED                (0x0004)
+#define USB_FUNCTION_DVST_SUSPEND                   (0x0005)
+#define USB_FUNCTION_DVST_CONFIGURED_SUSPEND        (0x0006)
+
+#define USB_FUNCTION_FUNCTION_TEST_SELECT           (0xff00u)
+#define USB_FUNCTION_FUNCTION_TEST_J                (0x0100u)
+#define USB_FUNCTION_FUNCTION_TEST_K                (0x0200u)
+#define USB_FUNCTION_FUNCTION_TEST_SE0_NAK          (0x0300u)
+#define USB_FUNCTION_FUNCTION_TEST_PACKET           (0x0400u)
+#define USB_FUNCTION_FUNCTION_TEST_FORCE_ENABLE     (0x0500u)
+#define USB_FUNCTION_FUNCTION_TEST_STSelectors      (0x0600u)
+#define USB_FUNCTION_FUNCTION_TEST_Reserved         (0x4000u)
+#define USB_FUNCTION_FUNCTION_TEST_VSTModes         (0xc000u)
+
+#define USB_FUNCTION_DT_TYPE                        (0xff00u)
+#define USB_FUNCTION_DT_INDEX                       (0xff)
+#define USB_FUNCTION_DT_DEVICE                      (0x01)
+#define USB_FUNCTION_DT_CONFIGURATION               (0x02)
+#define USB_FUNCTION_DT_STRING                      (0x03)
+#define USB_FUNCTION_DT_INTERFACE                   (0x04)
+#define USB_FUNCTION_DT_ENDPOINT                    (0x05)
+#define USB_FUNCTION_DT_DEVICE_QUALIFIER            (0x06)
+#define USB_FUNCTION_DT_OTHER_SPEED_CONFIGURATION   (0x07)
+#define USB_FUNCTION_DT_INTERFACE_POWER             (0x08)
+
+#define USB_FUNCTION_CF_RESERVED                    (0x80)
+#define USB_FUNCTION_CF_SELF                        (0x40)
+#define USB_FUNCTION_CF_RWUP                        (0x20)
+#define USB_FUNCTION_CF_NORWUP                      (0x00)
+#define USB_FUNCTION_EP_ERROR                       (0xff)
+
+#define USB_FUNCTION_EP_OUT                         (0x00)
+#define USB_FUNCTION_EP_IN                          (0x80)
+#define USB_FUNCTION_EP_CNTRL                       (0x00)
+#define USB_FUNCTION_EP_ISO                         (0x01)
+#define USB_FUNCTION_EP_BULK                        (0x02)
+#define USB_FUNCTION_EP_INT                         (0x03)
+
+#define USB_FUNCTION_STANDARD_REQUEST               (0x0000u)
+#define USB_FUNCTION_CLASS_REQUEST                  (0x0020u)
+#define USB_FUNCTION_VENDOR_REQUEST                 (0x0040u)
+#define USB_FUNCTION_DEVICE_REQUEST                 (0x0000u)
+#define USB_FUNCTION_INTERFACE_REQUEST              (0x0001u)
+#define USB_FUNCTION_ENDPOINT_REQUEST               (0x0002u)
+
+#define USB_FUNCTION_GETSTATUS_BUSPOWERD            (0x0000u)
+#define USB_FUNCTION_GETSTATUS_SELFPOWERD           (0x0001u)
+#define USB_FUNCTION_GETSTATUS_REMOTEWAKEUP         (0x0002u)
+#define USB_FUNCTION_GETSTATUS_NOTHALT              (0x0000u)
+#define USB_FUNCTION_GETSTATUS_HALT                 (0x0001u)
+
+#define USB_FUNCTION_FEATURE_ENDPOINT_HALT          (0x0000u)
+#define USB_FUNCTION_FEATURE_REMOTE_WAKEUP          (0x0001u)
+#define USB_FUNCTION_FEATURE_TEST_MODE              (0x0002u)
+
+#define USB_FUNCTION_bRequest                       (0xff00u)       /* b15-8:bRequest */
+#define USB_FUNCTION_bmRequestType                  (0x00ffu)       /* b7-0: bmRequestType */
+#define USB_FUNCTION_bmRequestTypeDir               (0x0080u)       /* b7  : Data transfer direction */
+#define USB_FUNCTION_bmRequestTypeType              (0x0060u)       /* b6-5: Type */
+#define USB_FUNCTION_bmRequestTypeRecip             (0x001fu)       /* b4-0: Recipient */
+
+
+/*******************************************************************************
+Variable Externs
+*******************************************************************************/
+
+
+/*******************************************************************************
+Functions Prototypes
+*******************************************************************************/
+#if 0
+void     R_USB_api_function_init(uint16_t root, uint8_t int_level, uint16_t mode, uint16_t clockmode);
+uint16_t R_USB_api_function_IsConfigured(uint16_t root);
+uint16_t R_USB_api_function_CtrlReadStart(uint16_t root, uint32_t size, uint8_t *data);
+void     R_USB_api_function_CtrlWriteStart(uint16_t root, uint32_t size, uint8_t *data);
+uint16_t R_USB_api_function_start_send_transfer(uint16_t root, uint16_t pipe, uint32_t size, uint8_t *data);
+uint16_t R_USB_api_function_check_pipe_status(uint16_t root, uint16_t pipe, uint32_t *size);
+void     R_USB_api_function_clear_pipe_status(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_start_receive_transfer(uint16_t root, uint16_t pipe, uint32_t size, uint8_t *data);
+void     R_USB_api_function_set_pid_buf(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_set_pid_nak(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_set_pid_stall(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_clear_pid_stall(uint16_t root, uint16_t pipe);
+uint16_t R_USB_api_function_get_pid(uint16_t root, uint16_t pipe);
+int32_t  R_USB_api_function_check_stall(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_set_sqclr(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_set_sqset(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_set_csclr(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_set_curpipe(uint16_t root, uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
+void     R_USB_api_function_clear_brdy_sts(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_clear_bemp_sts(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_clear_nrdy_sts(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_enable_brdy_int(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_disable_brdy_int(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_enable_bemp_int(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_disable_bemp_int(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_enable_nrdy_int(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_disable_nrdy_int(uint16_t root, uint16_t pipe);
+void     R_USB_api_function_stop_transfer(uint16_t root, uint16_t pipe);
+#endif
+
+#ifdef USB0_FUNCTION_API_H
+void     usb0_function_interrupt(uint32_t int_sense);
+void     usb0_function_dma_interrupt_d0fifo(uint32_t int_sense);
+void     usb0_function_dma_interrupt_d1fifo(uint32_t int_sense);
+
+void     usb0_function_Class0(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Class1(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Class2(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Class3(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Class4(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Class5(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Vendor0(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Vendor1(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Vendor2(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Vendor3(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Vendor4(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Vendor5(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_ResetDescriptor(uint16_t mode);
+
+IRQn_Type Userdef_USB_usb0_function_d0fifo_dmaintid(void);
+IRQn_Type Userdef_USB_usb0_function_d1fifo_dmaintid(void);
+void     Userdef_USB_usb0_function_attach(void);
+void     Userdef_USB_usb0_function_detach(void);
+void     Userdef_USB_usb0_function_delay_1ms(void);
+void     Userdef_USB_usb0_function_delay_xms(uint32_t msec);
+void     Userdef_USB_usb0_function_delay_10us(uint32_t usec);
+void     Userdef_USB_usb0_function_delay_500ns(void);
+void     Userdef_USB_usb0_function_start_dma(USB_FUNCTION_DMA_t *dma, uint16_t dfacc);
+uint32_t Userdef_USB_usb0_function_stop_dma0(void);
+uint32_t Userdef_USB_usb0_function_stop_dma1(void);
+
+void     usb0_function_stop_transfer(uint16_t pipe);
+void     usb0_function_enable_brdy_int(uint16_t pipe);
+void     usb0_function_disable_brdy_int(uint16_t pipe);
+void     usb0_function_enable_bemp_int(uint16_t pipe);
+void     usb0_function_disable_bemp_int(uint16_t pipe);
+void     usb0_function_enable_nrdy_int(uint16_t pipe);
+void     usb0_function_disable_nrdy_int(uint16_t pipe);
+#endif
+
+#ifdef  USB1_FUNCTION_API_H
+void     usb1_function_interrupt(uint32_t int_sense);
+void     usb1_function_dma_interrupt_d0fifo(uint32_t int_sense);
+void     usb1_function_dma_interrupt_d1fifo(uint32_t int_sense);
+
+void     usb1_function_Class0(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Class1(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Class2(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Class3(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Class4(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Class5(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Vendor0(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Vendor1(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Vendor2(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Vendor3(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Vendor4(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Vendor5(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_ResetDescriptor(uint16_t mode);
+
+IRQn_Type Userdef_USB_usb1_function_d0fifo_dmaintid(void);
+IRQn_Type Userdef_USB_usb1_function_d1fifo_dmaintid(void);
+void     Userdef_USB_usb1_function_attach(void);
+void     Userdef_USB_usb1_function_detach(void);
+void     Userdef_USB_usb1_function_delay_1ms(void);
+void     Userdef_USB_usb1_function_delay_xms(uint32_t msec);
+void     Userdef_USB_usb1_function_delay_10us(uint32_t usec);
+void     Userdef_USB_usb1_function_delay_500ns(void);
+void     Userdef_USB_usb1_function_start_dma(USB_FUNCTION_DMA_t *dma, uint16_t dfacc);
+uint32_t Userdef_USB_usb1_function_stop_dma0(void);
+uint32_t Userdef_USB_usb1_function_stop_dma1(void);
+
+void     usb1_function_stop_transfer(uint16_t pipe);
+void     usb1_function_enable_brdy_int(uint16_t pipe);
+void     usb1_function_disable_brdy_int(uint16_t pipe);
+void     usb1_function_enable_bemp_int(uint16_t pipe);
+void     usb1_function_disable_bemp_int(uint16_t pipe);
+void     usb1_function_enable_nrdy_int(uint16_t pipe);
+void     usb1_function_disable_nrdy_int(uint16_t pipe);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* USB_FUNCTION_API_H */
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/inc/usb_function.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/inc/usb_function.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,143 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb_function.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description  : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB_FUNCTION_H
+#define USB_FUNCTION_H
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "r_typedefs.h"
+#include "iodefine.h"
+#include "rza_io_regrw.h"
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+#define USB_FUNCTION_ALT_NO         (255)
+#define USB_FUNCTION_ALT_SET        (0xff)
+
+#define USB_FUNCTION_BITUPLLE       (0x0002u)
+#define USB_FUNCTION_BITUCKSEL      (0x0004u)
+#define USB_FUNCTION_BITBWAIT       (0x003fu)
+
+#define USB_FUNCTION_BUSWAIT_02     (0x0000u)
+#define USB_FUNCTION_BUSWAIT_03     (0x0001u)
+#define USB_FUNCTION_BUSWAIT_04     (0x0002u)
+#define USB_FUNCTION_BUSWAIT_05     (0x0003u)
+#define USB_FUNCTION_BUSWAIT_06     (0x0004u)
+#define USB_FUNCTION_BUSWAIT_07     (0x0005u)
+#define USB_FUNCTION_BUSWAIT_08     (0x0006u)
+#define USB_FUNCTION_BUSWAIT_09     (0x0007u)
+#define USB_FUNCTION_BUSWAIT_10     (0x0008u)
+#define USB_FUNCTION_BUSWAIT_11     (0x0009u)
+#define USB_FUNCTION_BUSWAIT_12     (0x000au)
+#define USB_FUNCTION_BUSWAIT_13     (0x000bu)
+#define USB_FUNCTION_BUSWAIT_14     (0x000cu)
+#define USB_FUNCTION_BUSWAIT_15     (0x000du)
+#define USB_FUNCTION_BUSWAIT_16     (0x000eu)
+#define USB_FUNCTION_BUSWAIT_17     (0x000fu)
+
+#define USB_FUNCTION_BITRESUME      (0x0020u)
+#define USB_FUNCTION_BITUACT        (0x0010u)
+#define USB_FUNCTION_HSPROC         (0x0004u)
+#define USB_FUNCTION_HSMODE         (0x0003u)
+#define USB_FUNCTION_FSMODE         (0x0002u)
+#define USB_FUNCTION_LSMODE         (0x0001u)
+#define USB_FUNCTION_UNDECID        (0x0000u)
+
+#define USB_FUNCTION_BITRCNT        (0x8000u)
+#define USB_FUNCTION_BITDREQE       (0x1000u)
+#define USB_FUNCTION_BITMBW         (0x0c00u)
+#define USB_FUNCTION_BITMBW_8       (0x0000u)
+#define USB_FUNCTION_BITMBW_16      (0x0400u)
+#define USB_FUNCTION_BITMBW_32      (0x0800u)
+#define USB_FUNCTION_BITBYTE_LITTLE (0x0000u)
+#define USB_FUNCTION_BITBYTE_BIG    (0x0100u)
+#define USB_FUNCTION_BITISEL        (0x0020u)
+#define USB_FUNCTION_BITCURPIPE     (0x000fu)
+
+#define USB_FUNCTION_CFIFO_READ     (0x0000u)
+#define USB_FUNCTION_CFIFO_WRITE    (0x0020u)
+
+#define USB_FUNCTION_BITBVAL        (0x8000u)
+#define USB_FUNCTION_BITBCLR        (0x4000u)
+#define USB_FUNCTION_BITFRDY        (0x2000u)
+#define USB_FUNCTION_BITDTLN        (0x0fffu)
+
+#define USB_FUNCTION_BITVBSE        (0x8000u)
+#define USB_FUNCTION_BITRSME        (0x4000u)
+#define USB_FUNCTION_BITSOFE        (0x2000u)
+#define USB_FUNCTION_BITDVSE        (0x1000u)
+#define USB_FUNCTION_BITCTRE        (0x0800u)
+#define USB_FUNCTION_BITVBINT       (0x8000u)
+#define USB_FUNCTION_BITRESM        (0x4000u)
+#define USB_FUNCTION_BITSOFR        (0x2000u)
+#define USB_FUNCTION_BITDVST        (0x1000u)
+#define USB_FUNCTION_BITCTRT        (0x0800u)
+
+#define USB_FUNCTION_BITBEMPE       (0x0400u)
+#define USB_FUNCTION_BITNRDYE       (0x0200u)
+#define USB_FUNCTION_BITBRDYE       (0x0100u)
+#define USB_FUNCTION_BITBEMP        (0x0400u)
+#define USB_FUNCTION_BITNRDY        (0x0200u)
+#define USB_FUNCTION_BITBRDY        (0x0100u)
+
+#define USB_FUNCTION_BITDVSQ        (0x0070u)
+#define USB_FUNCTION_BITDVSQS       (0x0030u)
+#define USB_FUNCTION_DS_SPD_CNFG    (0x0070u)
+#define USB_FUNCTION_DS_SPD_ADDR    (0x0060u)
+#define USB_FUNCTION_DS_SPD_DFLT    (0x0050u)
+#define USB_FUNCTION_DS_SPD_POWR    (0x0040u)
+#define USB_FUNCTION_DS_CNFG        (0x0030u)
+#define USB_FUNCTION_DS_ADDS        (0x0020u)
+#define USB_FUNCTION_DS_DFLT        (0x0010u)
+#define USB_FUNCTION_DS_POWR        (0x0000u)
+#define USB_FUNCTION_BITVALID       (0x0008u)
+#define USB_FUNCTION_BITCTSQ        (0x0007u)
+#define USB_FUNCTION_CS_SQER        (0x0006u)
+#define USB_FUNCTION_CS_WRND        (0x0005u)
+#define USB_FUNCTION_CS_WRSS        (0x0004u)
+#define USB_FUNCTION_CS_WRDS        (0x0003u)
+#define USB_FUNCTION_CS_RDSS        (0x0002u)
+#define USB_FUNCTION_CS_RDDS        (0x0001u)
+#define USB_FUNCTION_CS_IDST        (0x0000u)
+
+#define USB_FUNCTION_PIPExBUF       (64u)
+
+#define USB_FUNCTION_D0FIFO         (0)
+#define USB_FUNCTION_D1FIFO         (1)
+#define USB_FUNCTION_DMA_READY      (0)
+#define USB_FUNCTION_DMA_BUSY       (1)
+#define USB_FUNCTION_DMA_BUSYEND    (2)
+
+#define USB_FUNCTION_FIFO_USE       (0x7000)
+
+#endif /* USB_FUNCTION_FUNCTION_H */
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/inc/usb_function_version.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/inc/usb_function_version.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,32 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb_function_version.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description  : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+
+#define USB_FUNCTION_LOCAL_Rev  "VER080_140709"
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/inc/usb0_function.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/inc/usb0_function.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,171 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description  : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB0_FUNCTION_H
+#define USB0_FUNCTION_H
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "devdrv_usb_function_api.h"
+#include "usb_function.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+extern const uint16_t       g_usb0_function_bit_set[];
+extern uint32_t             g_usb0_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint8_t              *g_usb0_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+extern uint16_t             g_usb0_function_PipeIgnore[];
+extern uint16_t             g_usb0_function_PipeTbl[];
+extern uint16_t             g_usb0_function_pipe_status[];
+extern uint32_t             g_usb0_function_PipeDataSize[];
+
+extern USB_FUNCTION_DMA_t   g_usb0_function_DmaInfo[];
+extern uint16_t             g_usb0_function_DmaPipe[];
+extern uint16_t             g_usb0_function_DmaBval[];
+extern uint16_t             g_usb0_function_DmaStatus[];
+
+extern uint16_t             g_usb0_function_CtrZeroLengthFlag;
+
+extern uint16_t             g_usb0_function_ConfigNum;
+extern uint16_t             g_usb0_function_Alternate[USB_FUNCTION_ALT_NO];
+extern uint16_t             g_usb0_function_RemoteWakeupFlag;
+extern uint16_t             g_usb0_function_TestModeFlag;
+extern uint16_t             g_usb0_function_TestModeSelectors;
+
+extern uint16_t             g_usb0_function_ReqType;
+extern uint16_t             g_usb0_function_ReqTypeType;
+extern uint16_t             g_usb0_function_ReqTypeRecip;
+extern uint16_t             g_usb0_function_ReqRequest;
+extern uint16_t             g_usb0_function_ReqValue;
+extern uint16_t             g_usb0_function_ReqIndex;
+extern uint16_t             g_usb0_function_ReqLength;
+
+extern uint16_t             g_usb0_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
+
+extern uint16_t             g_usb0_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint16_t             g_usb0_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint16_t             g_usb0_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint16_t             g_usb0_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+/* ==== common ==== */
+void     usb0_function_dma_stop_d0(uint16_t pipe, uint32_t remain);
+void     usb0_function_dma_stop_d1(uint16_t pipe, uint32_t remain);
+uint16_t usb0_function_is_hispeed(void);
+uint16_t usb0_function_is_hispeed_enable(void);
+uint16_t usb0_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+uint16_t usb0_function_write_buffer(uint16_t pipe);
+uint16_t usb0_function_write_buffer_c(uint16_t pipe);
+uint16_t usb0_function_write_buffer_d0(uint16_t pipe);
+uint16_t usb0_function_write_buffer_d1(uint16_t pipe);
+void     usb0_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+uint16_t usb0_function_read_buffer(uint16_t pipe);
+uint16_t usb0_function_read_buffer_c(uint16_t pipe);
+uint16_t usb0_function_read_buffer_d0(uint16_t pipe);
+uint16_t usb0_function_read_buffer_d1(uint16_t pipe);
+uint16_t usb0_function_change_fifo_port(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
+void     usb0_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
+void     usb0_function_set_curpipe2(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc);
+uint16_t usb0_function_get_mbw(uint32_t trncount, uint32_t dtptr);
+uint16_t usb0_function_read_dma(uint16_t pipe);
+void     usb0_function_brdy_int(uint16_t status, uint16_t int_enb);
+void     usb0_function_nrdy_int(uint16_t status, uint16_t int_enb);
+void     usb0_function_bemp_int(uint16_t status, uint16_t int_enb);
+void     usb0_function_setting_interrupt(uint8_t level);
+void     usb0_function_reset_module(uint16_t clockmode);
+uint16_t usb0_function_get_buf_size(uint16_t pipe);
+uint16_t usb0_function_get_mxps(uint16_t pipe);
+void     usb0_function_clear_brdy_sts(uint16_t pipe);
+void     usb0_function_clear_bemp_sts(uint16_t pipe);
+void     usb0_function_clear_nrdy_sts(uint16_t pipe);
+void     usb0_function_set_pid_buf(uint16_t pipe);
+void     usb0_function_set_pid_nak(uint16_t pipe);
+void     usb0_function_set_pid_stall(uint16_t pipe);
+void     usb0_function_clear_pid_stall(uint16_t pipe);
+uint16_t usb0_function_get_pid(uint16_t pipe);
+void     usb0_function_set_sqclr(uint16_t pipe);
+void     usb0_function_set_sqset(uint16_t pipe);
+void     usb0_function_set_csclr(uint16_t pipe);
+void     usb0_function_aclrm(uint16_t pipe);
+void     usb0_function_set_aclrm(uint16_t pipe);
+void     usb0_function_clr_aclrm(uint16_t pipe);
+uint16_t usb0_function_get_sqmon(uint16_t pipe);
+uint16_t usb0_function_get_inbuf(uint16_t pipe);
+
+/* ==== function ==== */
+void     usb0_function_init_status(void);
+void     usb0_function_InitModule(uint16_t mode);
+uint16_t usb0_function_CheckVBUStaus(void);
+void     usb0_function_USB_FUNCTION_Attach(void);
+void     usb0_function_USB_FUNCTION_Detach(void);
+void     usb0_function_USB_FUNCTION_BusReset(void);
+void     usb0_function_USB_FUNCTION_Resume(void);
+void     usb0_function_USB_FUNCTION_Suspend(void);
+void     usb0_function_USB_FUNCTION_TestMode(void);
+void     usb0_function_ResetDCP(void);
+void     usb0_function_ResetEP(uint16_t num);
+uint16_t usb0_function_EpToPipe(uint16_t ep);
+void     usb0_function_InitEPTable(uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num);
+uint16_t usb0_function_GetConfigNum(void);
+uint16_t usb0_function_GetAltNum(uint16_t Con_Num, uint16_t Int_Num);
+uint16_t usb0_function_CheckRemoteWakeup(void);
+void     usb0_function_clear_alt(void);
+void     usb0_function_clear_pipe_tbl(void);
+void     usb0_function_clear_ep_table_index(void);
+uint16_t usb0_function_GetInterfaceNum(uint16_t num);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* USB0_FUNCTION_H */
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/inc/usb0_function_api.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/inc/usb0_function_api.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,104 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_api.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description  : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB0_FUNCTION_API_H
+#define USB0_FUNCTION_API_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Variable Externs
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+void     usb0_api_function_init(uint8_t int_level, uint16_t mode, uint16_t clockmode);
+uint16_t usb0_api_function_IsConfigured(void);
+uint16_t usb0_function_GetDeviceState(void);
+uint16_t usb0_api_function_CtrlReadStart(uint32_t size, uint8_t *data);
+void     usb0_api_function_CtrlWriteStart(uint32_t size, uint8_t *data);
+uint16_t usb0_api_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+uint16_t usb0_api_function_check_pipe_status(uint16_t pipe, uint32_t *size);
+void     usb0_api_function_clear_pipe_status(uint16_t pipe);
+void     usb0_api_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+void     usb0_api_function_set_pid_buf(uint16_t pipe);
+void     usb0_api_function_set_pid_nak(uint16_t pipe);
+void     usb0_api_function_set_pid_stall(uint16_t pipe);
+void     usb0_api_function_clear_pid_stall(uint16_t pipe);
+uint16_t usb0_api_function_get_pid(uint16_t pipe);
+int32_t  usb0_api_function_check_stall(uint16_t pipe);
+void     usb0_api_function_set_sqclr(uint16_t pipe);
+void     usb0_api_function_set_sqset(uint16_t pipe);
+void     usb0_api_function_set_csclr(uint16_t pipe);
+void     usb0_api_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
+void     usb0_api_function_clear_brdy_sts(uint16_t pipe);
+void     usb0_api_function_clear_bemp_sts(uint16_t pipe);
+void     usb0_api_function_clear_nrdy_sts(uint16_t pipe);
+
+void     usb0_function_ClearFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_SetFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_SetAddress(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_SetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_SetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_SetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_SynchFrame(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_GetStatus(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_GetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_GetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_GetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Resrv_0(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Resrv_123(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Resrv_4(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb0_function_Resrv_5(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* USB0_FUNCTION_API_H */
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/inc/usb0_function_dmacdrv.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/inc/usb0_function_dmacdrv.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,142 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_dmacdrv.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description  : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB0_FUNCTION_DMACDRV_H
+#define USB0_FUNCTION_DMACDRV_H
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+typedef struct dmac_transinfo
+{
+    uint32_t src_addr;      /* Transfer source address                */
+    uint32_t dst_addr;      /* Transfer destination address           */
+    uint32_t count;         /* Transfer byte count                    */
+    uint32_t src_size;      /* Transfer source data size              */
+    uint32_t dst_size;      /* Transfer destination data size         */
+    uint32_t saddr_dir;     /* Transfer source address direction      */
+    uint32_t daddr_dir;     /* Transfer destination address direction */
+} dmac_transinfo_t;
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+/* ==== Transfer specification of the sample program ==== */
+#define DMAC_SAMPLE_SINGLE          (0)     /* Single transfer                   */
+#define DMAC_SAMPLE_CONTINUATION    (1)     /* Continuous transfer (use REN bit) */
+
+/* ==== DMA modes ==== */
+#define DMAC_MODE_REGISTER          (0)     /* Register mode */
+#define DMAC_MODE_LINK              (1)     /* Link mode     */
+
+/* ==== Transfer requests ==== */
+#define DMAC_REQ_MODE_EXT           (0)     /* External request                   */
+#define DMAC_REQ_MODE_PERI          (1)     /* On-chip peripheral module request  */
+#define DMAC_REQ_MODE_SOFT          (2)     /* Auto-request (request by software) */
+
+/* ==== DMAC transfer sizes ==== */
+#define DMAC_TRANS_SIZE_8           (0)     /* 8 bits    */
+#define DMAC_TRANS_SIZE_16          (1)     /* 16 bits   */
+#define DMAC_TRANS_SIZE_32          (2)     /* 32 bits   */
+#define DMAC_TRANS_SIZE_64          (3)     /* 64 bits   */
+#define DMAC_TRANS_SIZE_128         (4)     /* 128 bits  */
+#define DMAC_TRANS_SIZE_256         (5)     /* 256 bits  */
+#define DMAC_TRANS_SIZE_512         (6)     /* 512 bits  */
+#define DMAC_TRANS_SIZE_1024        (7)     /* 1024 bits */
+
+/* ==== Address increment for transferring ==== */
+#define DMAC_TRANS_ADR_NO_INC       (1)     /* Not increment */
+#define DMAC_TRANS_ADR_INC          (0)     /* Increment     */
+
+/* ==== Method for detecting DMA request ==== */
+#define DMAC_REQ_DET_FALL           (0)     /* Falling edge detection */
+#define DMAC_REQ_DET_RISE           (1)     /* Rising edge detection  */
+#define DMAC_REQ_DET_LOW            (2)     /* Low level detection    */
+#define DMAC_REQ_DET_HIGH           (3)     /* High level detection   */
+
+/* ==== Request Direction ==== */
+#define DMAC_REQ_DIR_SRC            (0)     /* DMAREQ is the source/ DMAACK is active when reading      */
+#define DMAC_REQ_DIR_DST            (1)     /* DMAREQ is the destination/ DMAACK is active when writing */
+
+/* ==== Descriptors ==== */
+#define DMAC_DESC_HEADER            (0)     /* Header              */
+#define DMAC_DESC_SRC_ADDR          (1)     /* Source Address      */
+#define DMAC_DESC_DST_ADDR          (2)     /* Destination Address */
+#define DMAC_DESC_COUNT             (3)     /* Transaction Byte    */
+#define DMAC_DESC_CHCFG             (4)     /* Channel Confg       */
+#define DMAC_DESC_CHITVL            (5)     /* Channel Interval    */
+#define DMAC_DESC_CHEXT             (6)     /* Channel Extension   */
+#define DMAC_DESC_LINK_ADDR         (7)     /* Link Address        */
+
+/* ==== On-chip peripheral module requests ===== */
+typedef enum dmac_request_factor
+{
+    DMAC_REQ_USB0_DMA0_TX,      /* USB_0 channel 0 transmit FIFO empty            */
+    DMAC_REQ_USB0_DMA0_RX,      /* USB_0 channel 0 receive FIFO full              */
+    DMAC_REQ_USB0_DMA1_TX,      /* USB_0 channel 1 transmit FIFO empty            */
+    DMAC_REQ_USB0_DMA1_RX,      /* USB_0 channel 1 receive FIFO full              */
+    DMAC_REQ_USB1_DMA0_TX,      /* USB_1 channel 0 transmit FIFO empty            */
+    DMAC_REQ_USB1_DMA0_RX,      /* USB_1 channel 0 receive FIFO full              */
+    DMAC_REQ_USB1_DMA1_TX,      /* USB_1 channel 1 transmit FIFO empty            */
+    DMAC_REQ_USB1_DMA1_RX,      /* USB_1 channel 1 receive FIFO full              */
+} dmac_request_factor_t;
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+void usb0_function_DMAC1_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
+                                        uint32_t request_factor, uint32_t req_direction);
+int32_t usb0_function_DMAC1_Open(uint32_t req);
+void usb0_function_DMAC1_Close(uint32_t *remain);
+void usb0_function_DMAC1_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
+
+void usb0_function_DMAC2_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
+                                        uint32_t request_factor, uint32_t req_direction);
+int32_t usb0_function_DMAC2_Open(uint32_t req);
+void usb0_function_DMAC2_Close(uint32_t *remain);
+void usb0_function_DMAC2_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* USB0_FUNCTION_DMACDRV_H */
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_dataio.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_dataio.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,2933 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_dataio.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb0_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+static uint16_t g_usb0_function_mbw[(USB_FUNCTION_MAX_PIPE_NO + 1)];
+
+static void     usb0_function_start_receive_trns_c(uint16_t pipe, uint32_t size, uint8_t *data);
+static void     usb0_function_start_receive_trns_d0(uint16_t pipe, uint32_t size, uint8_t *data);
+static void     usb0_function_start_receive_trns_d1(uint16_t pipe, uint32_t size, uint8_t *data);
+static void     usb0_function_start_receive_dma_d0(uint16_t pipe, uint32_t size, uint8_t *data);
+static void     usb0_function_start_receive_dma_d1(uint16_t pipe, uint32_t size, uint8_t *data);
+static uint16_t usb0_function_read_dma_d0(uint16_t pipe);
+static uint16_t usb0_function_read_dma_d1(uint16_t pipe);
+static uint16_t usb0_function_write_dma_d0(uint16_t pipe);
+static uint16_t usb0_function_write_dma_d1(uint16_t pipe);
+
+static void     usb0_function_read_c_fifo(uint16_t pipe, uint16_t count);
+static void     usb0_function_write_c_fifo(uint16_t Pipe, uint16_t count);
+static void     usb0_function_read_d0_fifo(uint16_t pipe, uint16_t count);
+static void     usb0_function_write_d0_fifo(uint16_t pipe, uint16_t count);
+static void     usb0_function_read_d1_fifo(uint16_t pipe, uint16_t count);
+static void     usb0_function_write_d1_fifo(uint16_t pipe, uint16_t count);
+
+static void     usb0_function_clear_transaction_counter(uint16_t pipe);
+static void     usb0_function_set_transaction_counter(uint16_t pipe, uint32_t count);
+
+static uint32_t usb0_function_com_get_dmasize(uint32_t trncount, uint32_t dtptr);
+
+static uint16_t usb0_function_set_dfacc_d0(uint16_t mbw, uint32_t count);
+static uint16_t usb0_function_set_dfacc_d1(uint16_t mbw, uint32_t count);
+
+
+/*******************************************************************************
+* Function Name: usb0_function_start_send_transfer
+* Description  : Starts the USB data communication using pipe specified by the argument.
+* Arguments    : uint16_t  pipe    ; Pipe Number
+*              : uint32_t size     ; Data Size
+*              : uint8_t  *data    ; Data Address
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t status;
+    uint16_t usefifo;
+    uint16_t mbw;
+
+    g_usb0_function_data_count[pipe]   = size;
+    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    usb0_function_clear_bemp_sts(pipe);
+    usb0_function_clear_brdy_sts(pipe);
+    usb0_function_clear_nrdy_sts(pipe);
+
+    mbw = usb0_function_get_mbw(size, (uint32_t)data);
+
+    usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+    switch (usefifo)
+    {
+        case USB_FUNCTION_D0FIFO_USE:
+        case USB_FUNCTION_D0FIFO_DMA:
+            usefifo = USB_FUNCTION_D0USE;
+        break;
+
+        case USB_FUNCTION_D1FIFO_USE:
+        case USB_FUNCTION_D1FIFO_DMA:
+            usefifo = USB_FUNCTION_D1USE;
+        break;
+
+        default:
+            usefifo = USB_FUNCTION_CUSE;
+        break;
+    };
+
+    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, usefifo, DEVDRV_USBF_NO, mbw);
+
+    usb0_function_clear_transaction_counter(pipe);
+
+    usb0_function_aclrm(pipe);
+
+    status = usb0_function_write_buffer(pipe);
+
+    if (status != DEVDRV_USBF_FIFOERROR)
+    {
+        usb0_function_set_pid_buf(pipe);
+    }
+
+    return status;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_buffer
+* Description  : Writes data in the buffer allocated in the pipe specified by
+*              : the argument. The FIFO for using is set in the pipe definition table.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_write_buffer (uint16_t pipe)
+{
+    uint16_t status;
+    uint16_t usefifo;
+
+    g_usb0_function_PipeIgnore[pipe] = 0;
+    usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+    switch (usefifo)
+    {
+        case USB_FUNCTION_D0FIFO_USE:
+            status = usb0_function_write_buffer_d0(pipe);
+        break;
+
+        case USB_FUNCTION_D1FIFO_USE:
+            status = usb0_function_write_buffer_d1(pipe);
+        break;
+
+        case USB_FUNCTION_D0FIFO_DMA:
+            status = usb0_function_write_dma_d0(pipe);
+        break;
+
+        case USB_FUNCTION_D1FIFO_DMA:
+            status = usb0_function_write_dma_d1(pipe);
+        break;
+
+        default:
+            status = usb0_function_write_buffer_c(pipe);
+        break;
+    };
+
+    switch (status)
+    {
+        case DEVDRV_USBF_WRITING:                       /* Continue of data write */
+            usb0_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
+            usb0_function_enable_brdy_int(pipe);        /* Enable Ready Interrupt */
+        break;
+
+        case DEVDRV_USBF_WRITEEND:                      /* End of data write */
+        case DEVDRV_USBF_WRITESHRT:                     /* End of data write */
+            usb0_function_disable_brdy_int(pipe);       /* Disable Ready Interrupt */
+            usb0_function_clear_nrdy_sts(pipe);
+            usb0_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
+            /* for last transfer */
+            usb0_function_enable_bemp_int(pipe);        /* Enable Empty Interrupt */
+        break;
+
+        case DEVDRV_USBF_WRITEDMA:                      /* DMA write */
+            usb0_function_clear_nrdy_sts(pipe);
+            usb0_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
+        break;
+
+        case DEVDRV_USBF_FIFOERROR:                     /* FIFO access status */
+        default:
+            usb0_function_disable_brdy_int(pipe);       /* Disable Ready Interrupt */
+            usb0_function_disable_bemp_int(pipe);       /* Disable Empty Interrupt */
+            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+        break;
+    }
+
+    return status;                      /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_buffer_c
+* Description  : Writes data in the buffer allocated in the pipe specified in
+*              : the argument. Writes data by CPU transfer using CFIFO.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_write_buffer_c (uint16_t pipe)
+{
+    uint32_t count;
+    uint16_t size;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+
+    if (g_usb0_function_CtrZeroLengthFlag == 1)
+    {
+        g_usb0_function_CtrZeroLengthFlag = 0;                  /* Zero Length Packet Flag CLR */
+        return DEVDRV_USBF_WRITEEND;
+    }
+
+    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+    if (pipe == USB_FUNCTION_PIPE0)
+    {
+        buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
+    }
+    else
+    {
+        buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
+    }
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    size = usb0_function_get_buf_size(pipe);                    /* Data buffer size */
+    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb0_function_data_count[pipe] <= (uint32_t)size)
+    {
+        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
+        count  = g_usb0_function_data_count[pipe];
+
+        if (count == 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
+        }
+    }
+    else
+    {
+        status = DEVDRV_USBF_WRITING;                           /* write continues */
+        count  = (uint32_t)size;
+    }
+
+    usb0_function_write_c_fifo(pipe, (uint16_t)count);
+
+    if (g_usb0_function_data_count[pipe] < (uint32_t)size)
+    {
+        g_usb0_function_data_count[pipe] = 0;
+
+        if (RZA_IO_RegRead_16(&USB200.CFIFOCTR, USB_CFIFOCTR_BVAL_SHIFT, USB_CFIFOCTR_BVAL) == 0)
+        {
+            USB200.CFIFOCTR = USB_FUNCTION_BITBVAL;             /* Short Packet */
+            g_usb0_function_CtrZeroLengthFlag = 1;              /* Zero Length Packet Flag */
+        }
+    }
+    else
+    {
+        g_usb0_function_data_count[pipe] -= count;
+    }
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_buffer_d0
+* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
+*              : Writes data by CPU transfer using D0FIFO.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_write_buffer_d0 (uint16_t pipe)
+{
+    uint32_t count;
+    uint16_t size;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+
+    mbw    = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    size = usb0_function_get_buf_size(pipe);                    /* Data buffer size */
+    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb0_function_data_count[pipe] <= (uint32_t)size)
+    {
+        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
+        count  = g_usb0_function_data_count[pipe];
+
+        if (count == 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
+        }
+    }
+    else
+    {
+        status = DEVDRV_USBF_WRITING;                           /* write continues */
+        count  = (uint32_t)size;
+    }
+
+    usb0_function_write_d0_fifo(pipe, (uint16_t)count);
+
+    if (g_usb0_function_data_count[pipe] < (uint32_t)size)
+    {
+        g_usb0_function_data_count[pipe] = 0;
+        if (RZA_IO_RegRead_16(&USB200.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+        {
+            USB200.D0FIFOCTR = USB_FUNCTION_BITBVAL;            /* Short Packet */
+        }
+    }
+    else
+    {
+        g_usb0_function_data_count[pipe] -= count;
+    }
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_buffer_d1
+* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
+*              : Writes data by CPU transfer using D1FIFO.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_write_buffer_d1 (uint16_t pipe)
+{
+    uint32_t count;
+    uint16_t size;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+
+    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    size = usb0_function_get_buf_size(pipe);                    /* Data buffer size */
+    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb0_function_data_count[pipe] <= (uint32_t)size)
+    {
+        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
+        count  = g_usb0_function_data_count[pipe];
+
+        if (count == 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
+        }
+    }
+    else
+    {
+        status = DEVDRV_USBF_WRITING;                           /* write continues */
+        count  = (uint32_t)size;
+    }
+
+    usb0_function_write_d1_fifo(pipe, (uint16_t)count);
+
+    if (g_usb0_function_data_count[pipe] < (uint32_t)size)
+    {
+        g_usb0_function_data_count[pipe] = 0;
+
+        if (RZA_IO_RegRead_16(&USB200.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+        {
+            USB200.D1FIFOCTR = USB_FUNCTION_BITBVAL;            /* Short Packet */
+        }
+    }
+    else
+    {
+        g_usb0_function_data_count[pipe] -= count;
+    }
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_dma_d0
+* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
+*              : Writes data by DMA transfer using D0FIFO.
+*              : The DMA-ch for using is specified by Userdef_USB_usb0_function_start_dma().
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           : Write end
+*              : DEVDRV_USBF_WRITESHRT          : short data
+*              : DEVDRV_USBF_WRITING            : Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           : Write DMA
+*              : DEVDRV_USBF_FIFOERROR          : FIFO status
+*******************************************************************************/
+static uint16_t usb0_function_write_dma_d0 (uint16_t pipe)
+{
+    uint32_t count;
+    uint16_t size;
+    uint16_t buffer;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t dfacc = 0;
+
+    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                            /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    size  = usb0_function_get_buf_size(pipe);                       /* Data buffer size */
+    count = g_usb0_function_data_count[pipe];
+
+    if (count != 0)
+    {
+        g_usb0_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe;
+
+        if ((count % size) != 0)
+        {
+            g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] = 1;
+        }
+        else
+        {
+            g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] = 0;
+        }
+
+        dfacc = usb0_function_set_dfacc_d0(mbw, count);
+
+        if (mbw == USB_FUNCTION_BITMBW_32)
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2;  /* 32bit transfer */
+        }
+        else if (mbw == USB_FUNCTION_BITMBW_16)
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1;  /* 16bit transfer */
+        }
+        else
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0;  /* 8bit transfer */
+        }
+
+        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo   = USB_FUNCTION_D0FIFO_DMA;
+        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].dir    = USB_FUNCTION_BUF2FIFO;
+        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
+        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes  = count;
+
+        Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
+
+        usb0_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+        RZA_IO_RegWrite_16(&USB200.D0FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+
+        g_usb0_function_data_count[pipe]    = 0;
+        g_usb0_function_data_pointer[pipe] += count;
+        status = DEVDRV_USBF_WRITEDMA;                              /* DMA write  */
+    }
+    else
+    {
+        if (RZA_IO_RegRead_16(&USB200.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+        {
+            RZA_IO_RegWrite_16(&USB200.D0FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
+        }
+        status = DEVDRV_USBF_WRITESHRT;                             /* Short Packet is end of write */
+    }
+
+    return status;                                                  /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_dma_d1
+* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
+*              : Writes data by DMA transfer using D1FIFO.
+*              : The DMA-ch for using is specified by Userdef_USB_usb0_function_start_dma().
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           : Write end
+*              : DEVDRV_USBF_WRITESHRT          : short data
+*              : DEVDRV_USBF_WRITING            : Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           : Write DMA
+*              : DEVDRV_USBF_FIFOERROR          : FIFO status
+*******************************************************************************/
+static uint16_t usb0_function_write_dma_d1 (uint16_t pipe)
+{
+    uint32_t count;
+    uint16_t size;
+    uint16_t buffer;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t dfacc=0;
+
+    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                            /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    size  = usb0_function_get_buf_size(pipe);                       /* Data buffer size */
+    count = g_usb0_function_data_count[pipe];
+
+    if (count != 0)
+    {
+        g_usb0_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe;
+        if ((count % size) != 0)
+        {
+            g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] = 1;
+        }
+        else
+        {
+            g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] = 0;
+        }
+
+        dfacc = usb0_function_set_dfacc_d1(mbw, count);
+
+        if (mbw == USB_FUNCTION_BITMBW_32)
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2;  /* 32bit transfer */
+        }
+        else if (mbw == USB_FUNCTION_BITMBW_16)
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1;  /* 16bit transfer */
+        }
+        else
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0;  /* 8bit transfer */
+        }
+
+        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo   = USB_FUNCTION_D1FIFO_DMA;
+        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].dir    = USB_FUNCTION_BUF2FIFO;
+        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
+        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes  = count;
+
+        Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
+
+        usb0_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+        RZA_IO_RegWrite_16(&USB200.D1FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+
+        g_usb0_function_data_count[pipe]    = 0;
+        g_usb0_function_data_pointer[pipe] += count;
+
+        status = DEVDRV_USBF_WRITEDMA;                             /* DMA write  */
+    }
+    else
+    {
+        if (RZA_IO_RegRead_16(&USB200.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+        {
+            RZA_IO_RegWrite_16(&USB200.D1FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
+        }
+        status = DEVDRV_USBF_WRITESHRT;                             /* Short Packet is end of write */
+    }
+
+    return status;                                                  /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_start_receive_transfer
+* Description  : Starts USB data reception using the pipe specified in the argument.
+*              : The FIFO for using is set in the pipe definition table.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+void usb0_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t usefifo;
+
+    usb0_function_clear_bemp_sts(pipe);
+    usb0_function_clear_brdy_sts(pipe);
+    usb0_function_clear_nrdy_sts(pipe);
+
+    usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+    switch (usefifo)
+    {
+        case USB_FUNCTION_D0FIFO_USE:
+            usb0_function_start_receive_trns_d0(pipe, size, data);
+        break;
+
+        case USB_FUNCTION_D1FIFO_USE:
+            usb0_function_start_receive_trns_d1(pipe, size, data);
+        break;
+
+        case USB_FUNCTION_D0FIFO_DMA:
+            usb0_function_start_receive_dma_d0(pipe, size, data);
+        break;
+
+        case USB_FUNCTION_D1FIFO_DMA:
+            usb0_function_start_receive_dma_d1(pipe, size, data);
+        break;
+
+        default:
+            usb0_function_start_receive_trns_c(pipe, size, data);
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_start_receive_trns_c
+* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by CPU transfer using CFIFO.
+*              : When storing data in the buffer allocated in the pipe specified in the
+*              : argument, BRDY interrupt is generated to read data
+*              : in the interrupt.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_start_receive_trns_c (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb0_function_set_pid_nak(pipe);
+    g_usb0_function_data_count[pipe]   = size;
+    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb0_function_PipeIgnore[pipe]   = 0;
+
+    g_usb0_function_PipeDataSize[pipe] = size;
+    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    mbw = usb0_function_get_mbw(size, (uint32_t)data);
+    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_READ, mbw);
+    USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;
+
+    usb0_function_set_transaction_counter(pipe, size);
+
+    usb0_function_aclrm(pipe);
+
+    usb0_function_enable_nrdy_int(pipe);
+    usb0_function_enable_brdy_int(pipe);
+
+    usb0_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_start_receive_trns_d0
+* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by CPU transfer using D0FIFO.
+*              : This function does not read data from the buffer.
+*              : When storing data in the buffer allocated in the pipe specified
+*              : in the argument, BRDY interrupt is generated to read data in the
+*              : interrupt.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_start_receive_trns_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb0_function_set_pid_nak(pipe);
+    g_usb0_function_data_count[pipe]   = size;
+    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb0_function_PipeIgnore[pipe]   = 0;
+
+    g_usb0_function_PipeDataSize[pipe] = size;
+    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    mbw = usb0_function_get_mbw(size, (uint32_t)data);
+    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+
+    usb0_function_set_transaction_counter(pipe, size);
+
+    usb0_function_aclrm(pipe);
+
+    usb0_function_enable_nrdy_int(pipe);
+    usb0_function_enable_brdy_int(pipe);
+
+    usb0_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_start_receive_trns_d1
+* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by CPU transfer using D1FIFO.
+*              : This function does not read data from the buffer.
+*              : When storing data in the buffer allocated in the pipe specified
+*              : in the argument, BRDY interrupt is generated to read data.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_start_receive_trns_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb0_function_set_pid_nak(pipe);
+    g_usb0_function_data_count[pipe]   = size;
+    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb0_function_PipeIgnore[pipe]   = 0;
+
+    g_usb0_function_PipeDataSize[pipe] = size;
+    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    mbw = usb0_function_get_mbw(size, (uint32_t)data);
+    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+    usb0_function_set_transaction_counter(pipe, size);
+
+    usb0_function_aclrm(pipe);
+
+    usb0_function_enable_nrdy_int(pipe);
+    usb0_function_enable_brdy_int(pipe);
+
+    usb0_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_start_receive_dma_d0
+* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by DMA transfer using D0FIFO.
+*              : This function does not read data from the buffer.
+*              : When storing data in the buffer allocated in the pipe specified
+*              : in the argument, delivered read request to DMAC to read data from
+*              : the buffer by DMAC.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_start_receive_dma_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb0_function_set_pid_nak(pipe);
+    g_usb0_function_data_count[pipe]   = size;
+    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb0_function_PipeIgnore[pipe]   = 0;
+
+    g_usb0_function_PipeDataSize[pipe] = 0;
+    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    mbw = usb0_function_get_mbw(size, (uint32_t)data);
+    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+
+    usb0_function_set_transaction_counter(pipe, size);
+
+    usb0_function_aclrm(pipe);
+
+    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        usb0_function_read_dma(pipe);
+
+        usb0_function_enable_nrdy_int(pipe);
+        usb0_function_enable_brdy_int(pipe);
+    }
+    else
+    {
+        usb0_function_enable_nrdy_int(pipe);
+        usb0_function_enable_brdy_int(pipe);
+    }
+
+    usb0_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_start_receive_dma_d1
+* Description  : Read data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by DMA transfer using D0FIFO.
+*              : This function does not read data from the buffer.
+*              : When storing data in the buffer allocated in the pipe specified
+*              : in the argument, delivered read request to DMAC to read data from
+*              : the buffer by DMAC.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_start_receive_dma_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb0_function_set_pid_nak(pipe);
+    g_usb0_function_data_count[pipe]   = size;
+    g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb0_function_PipeIgnore[pipe]   = 0;
+
+    g_usb0_function_PipeDataSize[pipe] = 0;
+    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    mbw = usb0_function_get_mbw(size, (uint32_t)data);
+    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+    usb0_function_set_transaction_counter(pipe, size);
+
+    usb0_function_aclrm(pipe);
+
+    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        usb0_function_read_dma(pipe);
+
+        usb0_function_enable_nrdy_int(pipe);
+        usb0_function_enable_brdy_int(pipe);
+    }
+    else
+    {
+        usb0_function_enable_nrdy_int(pipe);
+        usb0_function_enable_brdy_int(pipe);
+    }
+
+    usb0_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_buffer
+* Description  : Reads data from the buffer allocated in the pipe specified
+*              : in the argument.
+*              : Uses FIF0 set in the pipe definition table.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_read_buffer (uint16_t pipe)
+{
+    uint16_t status;
+
+    g_usb0_function_PipeIgnore[pipe] = 0;
+
+    if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
+    {
+        status = usb0_function_read_buffer_d0(pipe);
+    }
+    else if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
+    {
+        status = usb0_function_read_buffer_d1(pipe);
+    }
+    else
+    {
+        status = usb0_function_read_buffer_c(pipe);
+    }
+
+    switch (status)
+    {
+        case USB_FUNCTION_READING:                                      /* Continue of data read */
+        break;
+
+        case USB_FUNCTION_READEND:                                      /* End of data read */
+        case USB_FUNCTION_READSHRT:                                     /* End of data read */
+            usb0_function_disable_brdy_int(pipe);
+            g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
+            g_usb0_function_pipe_status[pipe]   = DEVDRV_USBF_PIPE_DONE;
+        break;
+
+        case USB_FUNCTION_READOVER:                                     /* buffer over */
+            if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
+            {
+                USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+            }
+            else if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
+            {
+                USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+            }
+            else
+            {
+                USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;                 /* Clear BCLR */
+            }
+            usb0_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
+            g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
+            g_usb0_function_pipe_status[pipe]   = DEVDRV_USBF_FIFOERROR;
+        break;
+
+        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access status */
+        default:
+            usb0_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
+            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+        break;
+    }
+
+    return status;                                                      /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_buffer_c
+* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by CPU transfer using CFIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_read_buffer_c (uint16_t pipe)
+{
+    uint32_t count;
+    uint32_t dtln;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+
+    mbw    = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb0_function_data_count[pipe] < dtln)                /* Buffer Over ? */
+    {
+        status = USB_FUNCTION_READOVER;
+        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = g_usb0_function_data_count[pipe];
+    }
+    else if (g_usb0_function_data_count[pipe] == dtln)          /* just Receive Size */
+    {
+        status = USB_FUNCTION_READEND;
+        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = dtln;
+
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+        }
+    }
+    else                                                        /* continue Receive data */
+    {
+        status = USB_FUNCTION_READING;
+        count  = dtln;
+
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+    }
+
+    if (count == 0)                                             /* 0 length packet */
+    {
+        USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;                 /* Clear BCLR */
+    }
+    else
+    {
+        usb0_function_read_c_fifo(pipe, (uint16_t)count);
+    }
+
+    g_usb0_function_data_count[pipe] -= count;
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_buffer_d0
+* Description  : Reads data from the buffer allocated in the pipe specified in
+*              : the argument.
+*              : Reads data by CPU transfer using D0FIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_read_buffer_d0 (uint16_t pipe)
+{
+    uint32_t count;
+    uint32_t dtln;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t pipebuf_size;
+
+    mbw    = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb0_function_data_count[pipe] < dtln)                /* Buffer Over ? */
+    {
+        status = USB_FUNCTION_READOVER;
+        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = g_usb0_function_data_count[pipe];
+    }
+    else if (g_usb0_function_data_count[pipe] == dtln)          /* just Receive Size */
+    {
+        status = USB_FUNCTION_READEND;
+        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = dtln;
+
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+        }
+    }
+    else                                                        /* continue Receive data */
+    {
+        status = USB_FUNCTION_READING;
+        count  = dtln;
+
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+        else
+        {
+            pipebuf_size = usb0_function_get_buf_size(pipe);    /* Data buffer size */
+
+            if (count != pipebuf_size)
+            {
+                status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
+                usb0_function_set_pid_nak(pipe);                /* Set NAK */
+            }
+        }
+    }
+
+    if (count == 0)                                             /* 0 length packet */
+    {
+        USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+    }
+    else
+    {
+        usb0_function_read_d0_fifo(pipe, (uint16_t)count);
+    }
+
+    g_usb0_function_data_count[pipe] -= count;
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_buffer_d1
+* Description  : Reads data from the buffer allocated in the pipe specified
+*              : in the argument.
+*              : Reads data by CPU transfer using D1FIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_read_buffer_d1 (uint16_t pipe)
+{
+    uint32_t count;
+    uint32_t dtln;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t pipebuf_size;
+
+    mbw    = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+    buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+    mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb0_function_data_count[pipe] < dtln)                /* Buffer Over ? */
+    {
+        status = USB_FUNCTION_READOVER;
+        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = g_usb0_function_data_count[pipe];
+    }
+    else if (g_usb0_function_data_count[pipe] == dtln)          /* just Receive Size */
+    {
+        status = USB_FUNCTION_READEND;
+        usb0_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = dtln;
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+        }
+    }
+    else                                                        /* continue Receive data */
+    {
+        status = USB_FUNCTION_READING;
+        count  = dtln;
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            usb0_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+        else
+        {
+            pipebuf_size = usb0_function_get_buf_size(pipe);    /* Data buffer size */
+
+            if (count != pipebuf_size)
+            {
+                status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
+                usb0_function_set_pid_nak(pipe);                /* Set NAK */
+            }
+        }
+    }
+
+    if (count == 0)                                             /* 0 length packet */
+    {
+        USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+    }
+    else
+    {
+        usb0_function_read_d1_fifo(pipe, (uint16_t)count);
+    }
+
+    g_usb0_function_data_count[pipe] -= count;
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_dma
+* Description  : Reads data from the buffer allocated in the pipe specified
+*              : in the argument.
+*              : Reads data by DMA transfer using D0FIFO or D1FIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_read_dma (uint16_t pipe)
+{
+    uint16_t status;
+
+    g_usb0_function_PipeIgnore[pipe] = 0;
+    if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
+    {
+        status = usb0_function_read_dma_d0(pipe);
+    }
+    else
+    {
+        status = usb0_function_read_dma_d1(pipe);
+    }
+
+    switch (status)
+    {
+        case USB_FUNCTION_READING:                                      /* Continue of data read */
+        break;
+
+        case USB_FUNCTION_READZERO:                                     /* End of data read */
+            usb0_function_disable_brdy_int(pipe);
+            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+        break;
+
+        case USB_FUNCTION_READEND:                                      /* End of data read */
+        case USB_FUNCTION_READSHRT:                                     /* End of data read */
+            usb0_function_disable_brdy_int(pipe);
+
+            if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+            {
+                g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
+            }
+        break;
+
+        case USB_FUNCTION_READOVER:                                     /* buffer over */
+            usb0_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
+
+            if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+            {
+                g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
+            }
+            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+        break;
+
+        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access status */
+        default:
+            usb0_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
+            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+        break;
+    }
+
+    return status;                                                      /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_dma_d0
+* Description  : Writes data in the buffer allocated in the pipe specified
+*              : in the argument.
+*              : Reads data by DMA transfer using D0FIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READZERO         ; zero data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+static uint16_t usb0_function_read_dma_d0 (uint16_t pipe)
+{
+    uint32_t count;
+    uint32_t dtln;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t dfacc = 0;
+    uint16_t pipebuf_size;
+
+    g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
+
+    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+
+    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        count  = g_usb0_function_data_count[pipe];
+        status = USB_FUNCTION_READING;
+    }
+    else
+    {
+        buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
+
+        if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+        {
+            return DEVDRV_USBF_FIFOERROR;
+        }
+
+        dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+        mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
+
+        if (g_usb0_function_data_count[pipe] < dtln)                /* Buffer Over ? */
+        {
+            status = USB_FUNCTION_READOVER;
+            count  = g_usb0_function_data_count[pipe];
+        }
+        else if (g_usb0_function_data_count[pipe] == dtln)          /* just Receive Size */
+        {
+            status = USB_FUNCTION_READEND;
+            count  = dtln;
+            if (count == 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            }
+
+            if ((count % mxps) != 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            }
+        }
+        else                                                        /* continue Receive data */
+        {
+            status = USB_FUNCTION_READING;
+            count  = dtln;
+
+            if (count == 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            }
+
+            if ((count % mxps) != 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            }
+            else
+            {
+                pipebuf_size = usb0_function_get_buf_size(pipe);    /* Data buffer size */
+                if (count != pipebuf_size)
+                {
+                    status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
+                }
+            }
+        }
+    }
+
+    if (count == 0)                                                 /* 0 length packet */
+    {
+        if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+        {
+            USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+            status = USB_FUNCTION_READZERO;                         /* Null Packet receive */
+        }
+        else
+        {
+            usb0_function_set_curpipe(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
+                                                                    /* transaction counter No set */
+                                                                    /* FRDY = 1, DTLN = 0 -> BRDY */
+        }
+    }
+    else
+    {
+        dfacc = usb0_function_set_dfacc_d0(mbw, count);
+
+        if (mbw == USB_FUNCTION_BITMBW_32)
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2;  /* 32bit transfer */
+        }
+        else if (mbw == USB_FUNCTION_BITMBW_16)
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1;  /* 16bit transfer */
+        }
+        else
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0;  /* 8bit transfer */
+        }
+
+        g_usb0_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe;        /* not use in read operation */
+        g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] = 0;           /* not use in read operation */
+
+        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo   = USB_FUNCTION_D0FIFO_DMA;
+        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].dir    = USB_FUNCTION_FIFO2BUF;
+        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
+        g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes  = count;
+
+        if (status == USB_FUNCTION_READING)
+        {
+            g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSY;
+        }
+        else
+        {
+            g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSYEND;
+        }
+
+        Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
+
+        usb0_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+        RZA_IO_RegWrite_16(&USB200.D0FIFOSEL,
+                            1,
+                            USB_DnFIFOSEL_DREQE_SHIFT,
+                            USB_DnFIFOSEL_DREQE);
+    }
+
+    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+    {
+        g_usb0_function_data_count[pipe]   -= count;
+        g_usb0_function_data_pointer[pipe] += count;
+        g_usb0_function_PipeDataSize[pipe] += count;
+    }
+
+    return status;                                                  /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_dma_d1
+* Description  : Reads data from the buffer allocated in the pipe specified in
+*              : the argument.
+*              : Reads data by DMA transfer using D1FIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READZERO         ; zero data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+static uint16_t usb0_function_read_dma_d1 (uint16_t pipe)
+{
+    uint32_t count;
+    uint32_t dtln;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t dfacc=0;
+    uint16_t pipebuf_size;
+
+    g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
+
+    mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+
+    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        count  = g_usb0_function_data_count[pipe];
+        status = USB_FUNCTION_READING;
+    }
+    else
+    {
+        buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
+        if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+        {
+            return DEVDRV_USBF_FIFOERROR;
+        }
+
+        dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+        mxps = usb0_function_get_mxps(pipe);                        /* Max Packet Size */
+
+        if (g_usb0_function_data_count[pipe] < dtln)                /* Buffer Over ? */
+        {
+            status = USB_FUNCTION_READOVER;
+            count  = g_usb0_function_data_count[pipe];
+        }
+        else if (g_usb0_function_data_count[pipe] == dtln)          /* just Receive Size */
+        {
+            status = USB_FUNCTION_READEND;
+            count  = dtln;
+            if (count == 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            }
+
+            if ((count % mxps) != 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            }
+        }
+        else                                                        /* continue Receive data */
+        {
+            status = USB_FUNCTION_READING;
+            count  = dtln;
+            if (count == 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            }
+
+            if ((count % mxps) != 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            }
+            else
+            {
+                pipebuf_size = usb0_function_get_buf_size(pipe);    /* Data buffer size */
+                if (count != pipebuf_size)
+                {
+                    status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
+                }
+            }
+        }
+    }
+
+    if (count == 0)                                                 /* 0 length packet */
+    {
+        if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+        {
+            USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+            status = USB_FUNCTION_READZERO;                         /* Null Packet receive */
+        }
+        else
+        {
+            usb0_function_set_curpipe(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
+                                                                    /* transaction counter No set */
+                                                                    /* FRDY = 1, DTLN = 0 -> BRDY */
+        }
+    }
+    else
+    {
+        dfacc = usb0_function_set_dfacc_d1(mbw, count);
+
+        if (mbw == USB_FUNCTION_BITMBW_32)
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2;  /* 32bit transfer */
+        }
+        else if (mbw == USB_FUNCTION_BITMBW_16)
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1;  /* 16bit transfer */
+        }
+        else
+        {
+            g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0;  /* 8bit transfer */
+        }
+
+        g_usb0_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe;        /* not use in read operation */
+        g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] = 0;           /* not use in read operation */
+
+        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo   = USB_FUNCTION_D1FIFO_DMA;
+        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].dir    = USB_FUNCTION_FIFO2BUF;
+        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
+        g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes  = count;
+
+        if (status == USB_FUNCTION_READING)
+        {
+            g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSY;
+        }
+        else
+        {
+            g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSYEND;
+        }
+
+        Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
+
+        usb0_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+        RZA_IO_RegWrite_16(&USB200.D1FIFOSEL,
+                            1,
+                            USB_DnFIFOSEL_DREQE_SHIFT,
+                            USB_DnFIFOSEL_DREQE);
+    }
+
+    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+    {
+        g_usb0_function_data_count[pipe]   -= count;
+        g_usb0_function_data_pointer[pipe] += count;
+        g_usb0_function_PipeDataSize[pipe] += count;
+    }
+
+    return status;                                                  /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_change_fifo_port
+* Description  : Allocates FIF0 specified by the argument in the pipe assigned
+*              : by the argument. After allocating FIF0, waits in the software
+*              : till the corresponding pipe becomes ready.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t fifosel   ; Select FIFO
+*              : uint16_t isel      ; FIFO Access Direction
+*              : uint16_t mbw       ; FIFO Port Access Bit Width
+* Return Value : DEVDRV_USBF_FIFOERROR         ; Error
+*              : Others            ; CFIFOCTR/D0FIFOCTR/D1FIFOCTR Register Value
+*******************************************************************************/
+uint16_t usb0_function_change_fifo_port (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
+{
+    uint16_t buffer;
+    uint32_t loop;
+    volatile uint32_t loop2;
+
+    usb0_function_set_curpipe(pipe, fifosel, isel, mbw);
+
+    for (loop = 0; loop < 4; loop++)
+    {
+        switch (fifosel)
+        {
+            case USB_FUNCTION_CUSE:
+                buffer = USB200.CFIFOCTR;
+            break;
+
+            case USB_FUNCTION_D0USE:
+            case USB_FUNCTION_D0DMA:
+                buffer = USB200.D0FIFOCTR;
+            break;
+
+            case USB_FUNCTION_D1USE:
+            case USB_FUNCTION_D1DMA:
+                buffer = USB200.D1FIFOCTR;
+            break;
+
+            default:
+                buffer = 0;
+            break;
+        }
+
+        if ((buffer & USB_FUNCTION_BITFRDY) == USB_FUNCTION_BITFRDY)
+        {
+            return buffer;
+        }
+
+        loop2 = 25;
+        while (loop2-- > 0)
+        {
+            /* wait */
+        }
+    }
+
+    return DEVDRV_USBF_FIFOERROR;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_curpipe
+* Description  : Allocates FIF0 specified by the argument in the pipe assigned
+*              : by the argument.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t fifosel   ; Select FIFO
+*              : uint16_t isel      ; FIFO Access Direction
+*              : uint16_t mbw       ; FIFO Port Access Bit Width
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
+{
+    uint16_t buffer;
+    uint32_t loop;
+    volatile uint32_t loop2;
+
+    g_usb0_function_mbw[pipe] = mbw;
+
+    switch (fifosel)
+    {
+        case USB_FUNCTION_CUSE:
+            buffer  = USB200.CFIFOSEL;
+            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
+            buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
+            USB200.CFIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(isel | pipe | mbw);
+            USB200.CFIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        case USB_FUNCTION_D0DMA:
+        case USB_FUNCTION_D0USE:
+            buffer  = USB200.D0FIFOSEL;
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+            USB200.D0FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+                        (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(pipe | mbw);
+            USB200.D0FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+                        (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        case USB_FUNCTION_D1DMA:
+        case USB_FUNCTION_D1USE:
+            buffer  = USB200.D1FIFOSEL;
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+            USB200.D1FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+                        (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(pipe | mbw);
+            USB200.D1FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+                        (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        default:
+        break;
+    }
+
+    /* Cautions !!!
+     * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
+     * For details, please look at the data sheet.   */
+    loop2 = 100;
+
+    while (loop2-- > 0)
+    {
+        /* wait */
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_curpipe2
+* Description  : Allocates FIF0 specified by the argument in the pipe assigned
+*              : by the argument.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t fifosel   ; Select FIFO
+*              : uint16_t isel      ; FIFO Access Direction
+*              : uint16_t mbw       ; FIFO Port Access Bit Width
+*              : uint16_t dfacc     ; DFACC Access mode
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_curpipe2 (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc)
+{
+    uint16_t buffer;
+    uint32_t loop;
+#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
+    uint32_t dummy;
+#endif
+    volatile uint32_t loop2;
+
+    g_usb0_function_mbw[pipe] = mbw;
+
+    switch (fifosel)
+    {
+        case USB_FUNCTION_CUSE:
+            buffer  = USB200.CFIFOSEL;
+            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
+            buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
+            USB200.CFIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(isel | pipe | mbw);
+            USB200.CFIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        case USB_FUNCTION_D0DMA:
+        case USB_FUNCTION_D0USE:
+            buffer  = USB200.D0FIFOSEL;
+#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+
+            if (dfacc != 0)
+            {
+                buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
+            }
+#else
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+#endif
+            USB200.D0FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+
+#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
+            if (dfacc != 0)
+            {
+                dummy = USB200.D0FIFO.UINT32;
+            }
+#endif
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(pipe | mbw);
+            USB200.D0FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        case USB_FUNCTION_D1DMA:
+        case USB_FUNCTION_D1USE:
+            buffer  = USB200.D1FIFOSEL;
+#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+
+            if (dfacc != 0)
+            {
+                buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
+            }
+#else
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+#endif
+            USB200.D1FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
+            if (dfacc != 0)
+            {
+                dummy = USB200.D1FIFO.UINT32;
+                loop = dummy;                   // avoid warning.
+            }
+#endif
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(pipe | mbw);
+            USB200.D1FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        default:
+        break;
+    }
+
+    /* Cautions !!!
+     * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
+     * For details, please look at the data sheet.   */
+    loop2 = 100;
+
+    while (loop2-- > 0)
+    {
+        /* wait */
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_c_fifo
+* Description  : Writes data in CFIFO.
+*              : Writes data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating CFIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb0_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_write_c_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            USB200.CFIFO.UINT8[HH] = *g_usb0_function_data_pointer[pipe];
+            g_usb0_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)(count / 2); even; --even)
+        {
+            USB200.CFIFO.UINT16[H] = *((uint16_t *)g_usb0_function_data_pointer[pipe]);
+            g_usb0_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)(count / 4); even; --even)
+        {
+            USB200.CFIFO.UINT32 = *((uint32_t *)g_usb0_function_data_pointer[pipe]);
+            g_usb0_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_c_fifo
+* Description  : Reads data from CFIFO.
+*              : Reads data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating CFIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb0_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_read_c_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            *g_usb0_function_data_pointer[pipe] = USB200.CFIFO.UINT8[HH];
+            g_usb0_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)((count + 1) / 2); even; --even)
+        {
+            *((uint16_t *)g_usb0_function_data_pointer[pipe]) = USB200.CFIFO.UINT16[H];
+            g_usb0_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)((count + 3) / 4); even; --even)
+        {
+            *((uint32_t *)g_usb0_function_data_pointer[pipe]) = USB200.CFIFO.UINT32;
+            g_usb0_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_d0_fifo
+* Description  : Writes data in D0FIFO.
+*              : Writes data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating CFIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb0_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_write_d0_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            USB200.D0FIFO.UINT8[HH] = *g_usb0_function_data_pointer[pipe];
+            g_usb0_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)(count / 2); even; --even)
+        {
+            USB200.D0FIFO.UINT16[H] = *((uint16_t *)g_usb0_function_data_pointer[pipe]);
+            g_usb0_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)(count / 4); even; --even)
+        {
+            USB200.D0FIFO.UINT32 = *((uint32_t *)g_usb0_function_data_pointer[pipe]);
+            g_usb0_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_d0_fifo
+* Description  : Reads data from D0FIFO.
+*              : Reads data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating DOFIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb0_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_read_d0_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            *g_usb0_function_data_pointer[pipe] = USB200.D0FIFO.UINT8[HH];
+            g_usb0_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)((count + 1) / 2); even; --even)
+        {
+            *((uint16_t *)g_usb0_function_data_pointer[pipe]) = USB200.D0FIFO.UINT16[H];
+            g_usb0_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)((count + 3) / 4); even; --even)
+        {
+            *((uint32_t *)g_usb0_function_data_pointer[pipe]) = USB200.D0FIFO.UINT32;
+            g_usb0_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_d1_fifo
+* Description  : Writes data in D1FIFO.
+*              : Writes data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating D1FIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb0_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_write_d1_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            USB200.D1FIFO.UINT8[HH] = *g_usb0_function_data_pointer[pipe];
+            g_usb0_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)(count / 2); even; --even)
+        {
+            USB200.D1FIFO.UINT16[H] = *((uint16_t *)g_usb0_function_data_pointer[pipe]);
+            g_usb0_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)(count / 4); even; --even)
+        {
+            USB200.D1FIFO.UINT32 = *((uint32_t *)g_usb0_function_data_pointer[pipe]);
+            g_usb0_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_d1_fifo
+* Description  : Reads data from D1FIFO.
+*              : Reads data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating D1FIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb0_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_read_d1_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            *g_usb0_function_data_pointer[pipe] = USB200.D1FIFO.UINT8[HH];
+            g_usb0_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)((count + 1) / 2); even; --even)
+        {
+            *((uint16_t *)g_usb0_function_data_pointer[pipe]) = USB200.D1FIFO.UINT16[H];
+            g_usb0_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)((count + 3) / 4); even; --even)
+        {
+            *((uint32_t *)g_usb0_function_data_pointer[pipe]) = USB200.D1FIFO.UINT32;
+            g_usb0_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_com_get_dmasize
+* Description  : Calculates access width of DMA transfer by the argument to
+*              : return as the Return Value.
+* Arguments    : uint32_t trncount   : transfer byte
+*              : uint32_t dtptr      : transfer data pointer
+* Return Value : DMA transfer size    : 0   8bit
+*              :                      : 1  16bit
+*              :                      : 2  32bit
+*******************************************************************************/
+static uint32_t usb0_function_com_get_dmasize (uint32_t trncount, uint32_t dtptr)
+{
+    uint32_t size;
+
+    if (((trncount & 0x0001) != 0) || ((dtptr & 0x00000001) != 0))
+    {
+        /*  When transfer byte count is odd         */
+        /* or transfer data area is 8-bit alignment */
+        size = 0;           /* 8bit */
+    }
+    else if (((trncount & 0x0003) != 0) || ((dtptr & 0x00000003) != 0))
+    {
+        /* When the transfer byte count is multiples of 2 */
+        /* or the transfer data area is 16-bit alignment */
+        size = 1;           /* 16bit */
+    }
+    else
+    {
+        /* When the transfer byte count is multiples of 4 */
+        /* or the transfer data area is 32-bit alignment */
+        size = 2;           /* 32bit */
+    }
+
+    return size;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_get_mbw
+* Description  : Calculates access width of DMA to return the value set in MBW.
+* Arguments    : uint32_t trncount   : transfer byte
+*              : uint32_t dtptr      : transfer data pointer
+* Return Value : FIFO transfer size   : USB_FUNCTION_BITMBW_8    8bit
+*              :                      : USB_FUNCTION_BITMBW_16  16bit
+*              :                      : USB_FUNCTION_BITMBW_32  32bit
+*******************************************************************************/
+uint16_t usb0_function_get_mbw (uint32_t trncount, uint32_t dtptr)
+{
+    uint32_t size;
+    uint16_t mbw;
+
+    size = usb0_function_com_get_dmasize(trncount, dtptr);
+
+    if (size == 0)
+    {
+        /* 8bit */
+        mbw = USB_FUNCTION_BITMBW_8;
+    }
+    else if (size == 1)
+    {
+        /* 16bit */
+        mbw = USB_FUNCTION_BITMBW_16;
+    }
+    else
+    {
+        /* 32bit */
+        mbw = USB_FUNCTION_BITMBW_32;
+    }
+
+    return mbw;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_transaction_counter
+* Description  : Sets transaction counter by the argument(PIPEnTRN).
+*              : Clears transaction before setting to enable transaction counter setting.
+* Arguments    : uint16_t pipe     ; Pipe number
+*              : uint32_t bsize    : Data transfer size
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_set_transaction_counter (uint16_t pipe, uint32_t bsize)
+{
+    uint16_t mxps;
+    uint16_t cnt;
+
+    if (bsize  == 0)
+    {
+        return;
+    }
+
+    mxps = usb0_function_get_mxps(pipe);            /* Max Packet Size */
+
+    if ((bsize % mxps) == 0)
+    {
+        cnt = (uint16_t)(bsize / mxps);
+    }
+    else
+    {
+        cnt = (uint16_t)((bsize / mxps) + 1);
+    }
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPE1TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPE2TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPE3TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPE4TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPE5TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPE9TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEATRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPEATRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPEATRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPEBTRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPECTRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPECTRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPEDTRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEETRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPEETRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPEETRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB200.PIPEFTRN             = cnt;
+            RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_transaction_counter
+* Description  : Clears the transaction counter by the argument.
+*              : After executing this function, the transaction counter is invalid.
+* Arguments    : uint16_t pipe     ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_clear_transaction_counter (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEATRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPEATRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECTRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPECTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEETRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPEETRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_stop_transfer
+* Description  : Stops the USB transfer in the pipe specified by the argument.
+*              : After stopping the USB transfer, clears the buffer allocated in
+*              : the pipe.
+*              : After executing this function, allocation in FIF0 becomes USB_FUNCTION_PIPE0;
+*              : invalid. After executing this function, BRDY/NRDY/BEMP interrupt
+*              : in the corresponding pipe becomes invalid. Sequence bit is also
+*              : cleared.
+* Arguments    : uint16_t  pipe     ; Pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_stop_transfer (uint16_t pipe)
+{
+    uint16_t usefifo;
+    uint32_t remain;
+    uint16_t fifo;
+
+    usb0_function_set_pid_nak(pipe);
+
+    usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+    switch (usefifo)
+    {
+        case USB_FUNCTION_D0FIFO_USE:
+            usb0_function_clear_transaction_counter(pipe);
+            USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
+            fifo = USB_FUNCTION_D0USE;
+        break;
+
+        case USB_FUNCTION_D1FIFO_USE:
+            usb0_function_clear_transaction_counter(pipe);
+            USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
+            fifo = USB_FUNCTION_D1USE;
+        break;
+
+        case USB_FUNCTION_D0FIFO_DMA:
+            remain = Userdef_USB_usb0_function_stop_dma0();
+            usb0_function_dma_stop_d0(pipe, remain);
+            usb0_function_clear_transaction_counter(pipe);
+            USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
+            fifo = USB_FUNCTION_D0DMA;
+        break;
+
+        case USB_FUNCTION_D1FIFO_DMA:
+            remain = Userdef_USB_usb0_function_stop_dma1();
+            usb0_function_dma_stop_d1(pipe, remain);
+            usb0_function_clear_transaction_counter(pipe);
+            USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
+            fifo = USB_FUNCTION_D1DMA;
+        break;
+
+        default:
+            usb0_function_clear_transaction_counter(pipe);
+            USB200.CFIFOCTR =  USB_FUNCTION_BITBCLR;        /* Buffer Clear */
+            fifo = USB_FUNCTION_CUSE;
+        break;
+    }
+
+    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, fifo, DEVDRV_USBF_NO, USB_FUNCTION_BITMBW_16);
+
+    /* Interrupt of pipe set is disabled */
+    usb0_function_disable_brdy_int(pipe);
+    usb0_function_disable_nrdy_int(pipe);
+    usb0_function_disable_bemp_int(pipe);
+
+    usb0_function_aclrm(pipe);
+    usb0_function_set_csclr(pipe);
+
+    if ( g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT )
+    {
+        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
+    }
+
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_dfacc_d0
+* Description  : Sets the DFACC setting value in D0FIFO using the transfer size.
+* Arguments    : uint16_t mbw     ; MBW
+*              : uint16_t count   ; data count
+* Return Value : DFACC Access mode
+*******************************************************************************/
+static uint16_t usb0_function_set_dfacc_d0 (uint16_t mbw, uint32_t count)
+{
+    uint16_t dfacc = 0;
+
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+    RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                        0,
+                        USB_DnFBCFG_DFACC_SHIFT,
+                        USB_DnFBCFG_DFACC);
+    RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                        0,
+                        USB_DnFBCFG_TENDE_SHIFT,
+                        USB_DnFBCFG_TENDE);
+    dfacc = 0;
+#else
+    if (mbw == USB_FUNCTION_BITMBW_32)
+    {
+        if ((count % 32) == 0)
+        {
+            /* 32byte transfer */
+            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                                2,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 2;
+        }
+        else if ((count % 16) == 0)
+        {
+            /* 16byte transfer */
+            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                                1,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 1;
+        }
+        else
+        {
+            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                                0,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 0;
+        }
+    }
+    else if (mbw == USB_FUNCTION_BITMBW_16)
+    {
+        RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                            0,
+                            USB_DnFBCFG_DFACC_SHIFT,
+                            USB_DnFBCFG_DFACC);
+        RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                            0,
+                            USB_DnFBCFG_TENDE_SHIFT,
+                            USB_DnFBCFG_TENDE);
+        dfacc = 0;
+    }
+    else
+    {
+        RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                            0,
+                            USB_DnFBCFG_DFACC_SHIFT,
+                            USB_DnFBCFG_DFACC);
+        RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+                            0,
+                            USB_DnFBCFG_TENDE_SHIFT,
+                            USB_DnFBCFG_TENDE);
+        dfacc = 0;
+    }
+#endif
+    return dfacc;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_dfacc_d1
+* Description  : Set the DFACC setting value in D1FIFO using the transfer size.
+* Arguments    : uint16_t mbw     ; MBW
+*              : uint16_t count   ; data count
+* Return Value : DFACC Access mode
+*******************************************************************************/
+static uint16_t usb0_function_set_dfacc_d1 (uint16_t mbw, uint32_t count)
+{
+    uint16_t dfacc = 0;
+
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+    RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                        0,
+                        USB_DnFBCFG_DFACC_SHIFT,
+                        USB_DnFBCFG_DFACC);
+    RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                        0,
+                        USB_DnFBCFG_TENDE_SHIFT,
+                        USB_DnFBCFG_TENDE);
+    dfacc = 0;
+#else
+    if (mbw == USB_FUNCTION_BITMBW_32)
+    {
+        if ((count % 32) == 0)
+        {
+            /* 32byte transfer */
+            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                                2,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 2;
+        }
+        else if ((count % 16) == 0)
+        {
+            /* 16byte transfer */
+            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                                1,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 1;
+        }
+        else
+        {
+            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                                0,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 0;
+        }
+    }
+    else if (mbw == USB_FUNCTION_BITMBW_16)
+    {
+        RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                            0,
+                            USB_DnFBCFG_DFACC_SHIFT,
+                            USB_DnFBCFG_DFACC);
+        RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                            0,
+                            USB_DnFBCFG_TENDE_SHIFT,
+                            USB_DnFBCFG_TENDE);
+        dfacc = 0;
+    }
+    else
+    {
+        RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                            0,
+                            USB_DnFBCFG_DFACC_SHIFT,
+                            USB_DnFBCFG_DFACC);
+        RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+                            0,
+                            USB_DnFBCFG_TENDE_SHIFT,
+                            USB_DnFBCFG_TENDE);
+        dfacc = 0;
+    }
+#endif
+
+    return dfacc;
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_dma.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_dma.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,346 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_dma.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb0_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+static void usb0_function_dmaint(uint16_t fifo);
+static void usb0_function_dmaint_buf2fifo(uint16_t pipe);
+static void usb0_function_dmaint_fifo2buf(uint16_t pipe);
+
+
+/*******************************************************************************
+* Function Name: usb0_function_dma_stop_d0
+* Description  : D0FIFO DMA stop
+* Arguments    : uint16_t pipe      : pipe number
+*              : uint32_t remain    : transfer byte
+* Return Value : none
+*******************************************************************************/
+void usb0_function_dma_stop_d0 (uint16_t pipe, uint32_t remain)
+{
+    uint16_t dtln;
+    uint16_t dfacc;
+    uint16_t buffer;
+    uint16_t sds_b = 1;
+
+    dfacc = RZA_IO_RegRead_16(&USB200.D0FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
+
+    if (dfacc == 2)
+    {
+        sds_b = 32;
+    }
+    else if (dfacc == 1)
+    {
+        sds_b = 16;
+    }
+    else
+    {
+        if (g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 2)
+        {
+            sds_b = 4;
+        }
+        else if (g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 1)
+        {
+            sds_b = 2;
+        }
+        else
+        {
+            sds_b = 1;
+        }
+    }
+
+    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
+        {
+            buffer = USB200.D0FIFOCTR;
+            dtln   = (buffer & USB_FUNCTION_BITDTLN);
+
+            if ((dtln % sds_b) != 0)
+            {
+                remain += (sds_b - (dtln % sds_b));
+            }
+            g_usb0_function_PipeDataSize[pipe] = (g_usb0_function_data_count[pipe] - remain);
+            g_usb0_function_data_count[pipe]   = remain;
+        }
+    }
+
+    RZA_IO_RegWrite_16(&USB200.D0FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_dma_stop_d1
+* Description  : D1FIFO DMA stop
+* Arguments    : uint16_t pipe      : pipe number
+*              : uint32_t remain    : transfer byte
+* Return Value : none
+*******************************************************************************/
+void usb0_function_dma_stop_d1 (uint16_t pipe, uint32_t remain)
+{
+    uint16_t dtln;
+    uint16_t dfacc;
+    uint16_t buffer;
+    uint16_t sds_b = 1;
+
+    dfacc = RZA_IO_RegRead_16(&USB200.D1FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
+
+    if (dfacc == 2)
+    {
+        sds_b = 32;
+    }
+    else if (dfacc == 1)
+    {
+        sds_b = 16;
+    }
+    else
+    {
+        if (g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 2)
+        {
+            sds_b = 4;
+        }
+        else if (g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 1)
+        {
+            sds_b = 2;
+        }
+        else
+        {
+            sds_b = 1;
+        }
+    }
+
+    if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
+        {
+            buffer = USB200.D1FIFOCTR;
+            dtln   = (buffer & USB_FUNCTION_BITDTLN);
+
+            if ((dtln % sds_b) != 0)
+            {
+                remain += (sds_b - (dtln % sds_b));
+            }
+            g_usb0_function_PipeDataSize[pipe] = (g_usb0_function_data_count[pipe] - remain);
+            g_usb0_function_data_count[pipe]   = remain;
+        }
+    }
+
+    RZA_IO_RegWrite_16(&USB200.D1FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_dma_interrupt_d0fifo
+* Description  : This function is DMA interrupt handler entry.
+*              : Execute usb0_function_dmaint() after disabling DMA interrupt in this function.
+*              : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D0FIFO_DMA is
+*              : specified by dma->fifo.
+*              : Register this function as DMA complete interrupt.
+* Arguments    : uint32_t int_sense ; Interrupts detection mode
+*              :                    ;  INTC_LEVEL_SENSITIVE : Level sense
+*              :                    ;  INTC_EDGE_TRIGGER : Edge trigger
+* Return Value : none
+*******************************************************************************/
+void usb0_function_dma_interrupt_d0fifo (uint32_t int_sense)
+{
+    usb0_function_dmaint(USB_FUNCTION_D0FIFO);
+    g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_dma_interrupt_d1fifo
+* Description  : This function is DMA interrupt handler entry.
+*              : Execute usb0_function_dmaint() after disabling DMA interrupt in this function.
+*              : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D1FIFO_DMA is
+*              : specified by dma->fifo.
+*              : Register this function as DMA complete interrupt.
+* Arguments    : uint32_t int_sense ; Interrupts detection mode
+*              :                    ;  INTC_LEVEL_SENSITIVE : Level sense
+*              :                    ;  INTC_EDGE_TRIGGER : Edge trigger
+* Return Value : none
+*******************************************************************************/
+void usb0_function_dma_interrupt_d1fifo (uint32_t int_sense)
+{
+    usb0_function_dmaint(USB_FUNCTION_D1FIFO);
+    g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_dmaint
+* Description  : This function is DMA transfer end interrupt
+* Arguments    : uint16_t fifo  ; fifo number
+*              :                ;  USB_FUNCTION_D0FIFO
+*              :                ;  USB_FUNCTION_D1FIFO
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_dmaint (uint16_t fifo)
+{
+    uint16_t pipe;
+
+    pipe = g_usb0_function_DmaPipe[fifo];
+
+    if (g_usb0_function_DmaInfo[fifo].dir == USB_FUNCTION_BUF2FIFO)
+    {
+        usb0_function_dmaint_buf2fifo(pipe);
+    }
+    else
+    {
+        usb0_function_dmaint_fifo2buf(pipe);
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_dmaint_fifo2buf
+* Description  : Executes read completion from FIFO by DMAC.
+* Arguments    : uint16_t pipe      : pipe number
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_dmaint_fifo2buf (uint16_t pipe)
+{
+    uint32_t remain;
+    uint16_t useport;
+
+    if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
+    {
+        useport = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+        if (useport == USB_FUNCTION_D0FIFO_DMA)
+        {
+            remain = Userdef_USB_usb0_function_stop_dma0();
+            usb0_function_dma_stop_d0(pipe, remain);
+
+            if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+            {
+                if (g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] == USB_FUNCTION_DMA_BUSYEND)
+                {
+                    USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;
+                    g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                }
+                else
+                {
+                    usb0_function_enable_brdy_int(pipe);
+                }
+            }
+        }
+        else
+        {
+            remain = Userdef_USB_usb0_function_stop_dma1();
+            usb0_function_dma_stop_d1(pipe, remain);
+
+            if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+            {
+                if (g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] == USB_FUNCTION_DMA_BUSYEND)
+                {
+                    USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;
+                    g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                }
+                else
+                {
+                    usb0_function_enable_brdy_int(pipe);
+                }
+            }
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_dmaint_buf2fifo
+* Description  : Executes write completion in FIFO by DMAC.
+* Arguments    : uint16_t pipe      : pipe number
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_dmaint_buf2fifo (uint16_t pipe)
+{
+    uint32_t remain;
+    uint16_t useport;
+
+    useport = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+    if (useport == USB_FUNCTION_D0FIFO_DMA)
+    {
+        remain = Userdef_USB_usb0_function_stop_dma0();
+        usb0_function_dma_stop_d0(pipe, remain);
+
+        if (g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] != 0)
+        {
+            RZA_IO_RegWrite_16(&USB200.D0FIFOCTR,
+                                1,
+                                USB_DnFIFOCTR_BVAL_SHIFT,
+                                USB_DnFIFOCTR_BVAL);
+        }
+    }
+    else
+    {
+        remain = Userdef_USB_usb0_function_stop_dma1();
+        usb0_function_dma_stop_d1(pipe, remain);
+
+        if (g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] != 0)
+        {
+            RZA_IO_RegWrite_16(&USB200.D1FIFOCTR,
+                                1,
+                                USB_DnFIFOCTR_BVAL_SHIFT,
+                                USB_DnFIFOCTR_BVAL);
+        }
+    }
+
+    usb0_function_enable_bemp_int(pipe);
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_intrn.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_intrn.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,249 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_intrn.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb0_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb0_function_brdy_int
+* Description  : Executes BRDY interrupt(USB_FUNCTION_PIPE1-9).
+*              : According to the pipe that interrupt is generated in,
+*              : reads/writes buffer allocated in the pipe.
+*              : This function is executed in the BRDY interrupt handler.
+*              : This function clears BRDY interrupt status and BEMP interrupt
+*              : status.
+* Arguments    : uint16_t Status       ; BRDYSTS Register Value
+*              : uint16_t Int_enbl     ; BRDYENB Register Value
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb0_function_brdy_int (uint16_t status, uint16_t int_enb)
+{
+    uint32_t int_sense = 0;
+    uint16_t pipe;
+    uint16_t pipebit;
+
+    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+    {
+        pipebit = g_usb0_function_bit_set[pipe];
+
+        if ((status & pipebit) && (int_enb & pipebit))
+        {
+            USB200.BRDYSTS = (uint16_t)~pipebit;
+            USB200.BEMPSTS = (uint16_t)~pipebit;
+            if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
+            {
+                if (g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] != USB_FUNCTION_DMA_READY)
+                {
+                    usb0_function_dma_interrupt_d0fifo(int_sense);
+                }
+
+                if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+                {
+                    usb0_function_read_dma(pipe);
+                    usb0_function_disable_brdy_int(pipe);
+                }
+                else
+                {
+                    USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;
+                    g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                }
+            }
+            else if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA)
+            {
+                if (g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] != USB_FUNCTION_DMA_READY)
+                {
+                    usb0_function_dma_interrupt_d1fifo(int_sense);
+                }
+
+                if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+                {
+                    usb0_function_read_dma(pipe);
+                    usb0_function_disable_brdy_int(pipe);
+                }
+                else
+                {
+                    USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;
+                    g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                }
+            }
+            else
+            {
+                if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0)
+                {
+                    usb0_function_read_buffer(pipe);
+                }
+                else
+                {
+                    usb0_function_write_buffer(pipe);
+                }
+            }
+        }
+    }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_nrdy_int
+* Description  : Executes NRDY interrupt(USB_FUNCTION_PIPE1-9).
+*              : Checks NRDY interrupt cause by PID. When the cause if STALL,
+*              : regards the pipe state as STALL and ends the processing.
+*              : Then the cause is not STALL, increments the error count to
+*              : communicate again. When the error count is 3, determines
+*              : the pipe state as DEVDRV_USBF_PIPE_NORES and ends the processing.
+*              : This function is executed in the NRDY interrupt handler.
+*              : This function clears NRDY interrupt status.
+* Arguments    : uint16_t status       ; NRDYSTS Register Value
+*              : uint16_t int_enb      ; NRDYENB Register Value
+* Return Value : none
+*******************************************************************************/
+void usb0_function_nrdy_int (uint16_t status, uint16_t int_enb)
+{
+    uint16_t pid;
+    uint16_t pipe;
+    uint16_t bitcheck;
+
+    bitcheck = (uint16_t)(status & int_enb);
+
+    USB200.NRDYSTS = (uint16_t)~status;
+
+    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+    {
+        if ((bitcheck&g_usb0_function_bit_set[pipe]) == g_usb0_function_bit_set[pipe])
+        {
+            if (RZA_IO_RegRead_16(&USB200.SYSCFG0, USB_SYSCFG_DCFM_SHIFT, USB_SYSCFG_DCFM) == 1)
+            {
+                if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT)
+                {
+                    pid = usb0_function_get_pid(pipe);
+                    if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
+                    {
+                        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
+                    }
+                    else
+                    {
+                        g_usb0_function_PipeIgnore[pipe]++;
+                        if (g_usb0_function_PipeIgnore[pipe] == 3)
+                        {
+                            g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
+                        }
+                        else
+                        {
+                            usb0_function_set_pid_buf(pipe);
+                        }
+                    }
+                }
+            }
+            else
+            {
+                /* USB Function */
+            }
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_bemp_int
+* Description  : Executes BEMP interrupt(USB_FUNCTION_PIPE1-9).
+* Arguments    : uint16_t status       ; BEMPSTS Register Value
+*              : uint16_t int_enb      ; BEMPENB Register Value
+* Return Value : none
+*******************************************************************************/
+void usb0_function_bemp_int (uint16_t status, uint16_t int_enb)
+{
+    uint16_t pid;
+    uint16_t pipe;
+    uint16_t bitcheck;
+    uint16_t inbuf;
+
+    bitcheck = (uint16_t)(status & int_enb);
+
+    USB200.BEMPSTS = (uint16_t)~status;
+
+    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+    {
+        if ((bitcheck&g_usb0_function_bit_set[pipe]) == g_usb0_function_bit_set[pipe])
+        {
+            pid = usb0_function_get_pid(pipe);
+
+            if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
+            {
+                g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
+            }
+            else
+            {
+                inbuf = usb0_function_get_inbuf(pipe);
+
+                if (inbuf == 0)
+                {
+                    usb0_function_disable_bemp_int(pipe);
+                    usb0_function_set_pid_nak(pipe);
+                    g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                }
+            }
+        }
+    }
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_lib.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/common/usb0_function_lib.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,2026 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_lib.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb0_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb0_function_enable_brdy_int
+* Description  : Enables BRDY interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
+*              : BRDY. Enables BRDY interrupt in the pipe specified by the argument
+*              : in the disabled status. After enabling BRDY, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe           ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_enable_brdy_int (uint16_t pipe)
+{
+    /* enable brdy interrupt */
+    USB200.BRDYENB |= (uint16_t)g_usb0_function_bit_set[pipe];
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_disable_brdy_int
+* Description  : Disables BRDY interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
+*              : BRDY. Enables BRDY interrupt in the pipe specified by the argument
+*              : in the disabled status. After disabling BRDY, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_disable_brdy_int (uint16_t pipe)
+{
+    /* disable brdy interrupt */
+    USB200.BRDYENB &= (uint16_t)~(g_usb0_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_brdy_sts
+* Description  : Clear BRDY interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_clear_brdy_sts (uint16_t pipe)
+{
+    /* clear brdy status */
+    USB200.BRDYSTS = (uint16_t)~(g_usb0_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_enable_bemp_int
+* Description  : Enables BEMP interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
+*              : BEMP. Enables BEMP interrupt in the pipe specified by the argument
+*              : in the disabled status. After enabling BEMP, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe           ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_enable_bemp_int (uint16_t pipe)
+{
+    /* enable bemp interrupt */
+    USB200.BEMPENB |= (uint16_t)g_usb0_function_bit_set[pipe];
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_disable_bemp_int
+* Description  : Disables BEMP interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
+*              : BEMP. Enables BEMP interrupt in the pipe specified by the argument
+*              : in the disabled status. After enabling BEMP, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe           ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_disable_bemp_int (uint16_t pipe)
+{
+    /* disable bemp interrupt */
+    USB200.BEMPENB &= (uint16_t)~(g_usb0_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_bemp_sts
+* Description  : Clear BEMP interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_clear_bemp_sts (uint16_t pipe)
+{
+    /* clear bemp status */
+    USB200.BEMPSTS = (uint16_t)~(g_usb0_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_enable_nrdy_int
+* Description  : Enables NRDY interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
+*              : NRDY. Enables NRDY interrupt in the pipe specified by the argument
+*              : in the disabled status. After enabling NRDY, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe             ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_enable_nrdy_int (uint16_t pipe)
+{
+    /* enable nrdy interrupt */
+    USB200.NRDYENB |= (uint16_t)g_usb0_function_bit_set[pipe];
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_disable_nrdy_int
+* Description  : Disables NRDY interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
+*              : NRDY. Disables NRDY interrupt in the pipe specified by the argument
+*              : in the disabled status. After disabling NRDY, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_disable_nrdy_int (uint16_t pipe)
+{
+    /* disable nrdy interrupt */
+    USB200.NRDYENB &= (uint16_t)~(g_usb0_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_nrdy_sts
+* Description  : Clear NRDY interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_clear_nrdy_sts (uint16_t pipe)
+{
+    /* clear nrdy status */
+    USB200.NRDYSTS = (uint16_t)~(g_usb0_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_is_hispeed
+* Description  : Returns the result of USB reset hand shake (RHST) as
+*              : return value.
+* Arguments    : none
+* Return Value : USB_FUNCTION_HIGH_SPEED    ; Hi-Speed
+*              : USB_FUNCTION_FULL_SPEED    ; Full-Speed
+*              : LOW_SPEED                  ; Low-Speed
+*              : USB_FUNCTION_NON_SPEED     ; error
+*******************************************************************************/
+uint16_t usb0_function_is_hispeed (void)
+{
+    uint16_t rhst;
+    uint16_t speed;
+
+    rhst = RZA_IO_RegRead_16(&USB200.DVSTCTR0, USB_DVSTCTR0_RHST_SHIFT, USB_DVSTCTR0_RHST);
+
+    if (rhst == USB_FUNCTION_HSMODE)
+    {
+        speed = USB_FUNCTION_HIGH_SPEED;
+    }
+    else if (rhst == USB_FUNCTION_FSMODE)
+    {
+        speed = USB_FUNCTION_FULL_SPEED;
+    }
+    else if (rhst == USB_FUNCTION_LSMODE)
+    {
+        speed = USB_FUNCTION_LOW_SPEED;
+    }
+    else
+    {
+        speed = USB_FUNCTION_NON_SPEED;
+    }
+
+    return speed;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_is_hispeed_enable
+* Description  : Returns the USB High-Speed connection enabled status as
+*              : return value.
+* Arguments    : none
+* Return Value : DEVDRV_USBF_YES  : Hi-Speed Enable
+*              : DEVDRV_USBF_NO   : Hi-Speed Disable
+*******************************************************************************/
+uint16_t usb0_function_is_hispeed_enable (void)
+{
+    uint16_t ret;
+
+    ret = DEVDRV_USBF_NO;
+
+    if (RZA_IO_RegRead_16(&USB200.SYSCFG0, USB_SYSCFG_HSE_SHIFT, USB_SYSCFG_HSE) == 1)
+    {
+        ret = DEVDRV_USBF_YES;
+    }
+
+    return ret;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_pid_buf
+* Description  : Enables communicaqtion in the pipe specified by the argument
+*              : (BUF).
+* Arguments    : uint16_t pipe             ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_pid_buf (uint16_t pipe)
+{
+    uint16_t pid;
+
+    pid = usb0_function_get_pid(pipe);
+
+    if (pid == DEVDRV_USBF_PID_STALL2)
+    {
+        usb0_function_set_pid_nak(pipe);
+    }
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB200.DCPCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_DCPCTR_PID_SHIFT,
+                                USB_DCPCTR_PID);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_9_PID_SHIFT,
+                                USB_PIPEnCTR_9_PID);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_pid_nak
+* Description  : Disables communication (NAK) in the pipe specified by the argument.
+*              : When the pipe status was enabling communication (BUF) before
+*              : executing before executing this function, waits in the software
+*              : until the pipe becomes ready after setting disabled.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_pid_nak (uint16_t pipe)
+{
+    uint16_t pid;
+    uint16_t pbusy;
+    uint32_t loop;
+
+    pid = usb0_function_get_pid(pipe);
+
+    if (pid == DEVDRV_USBF_PID_STALL2)
+    {
+        usb0_function_set_pid_stall(pipe);
+    }
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB200.DCPCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_DCPCTR_PID_SHIFT,
+                                USB_DCPCTR_PID);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_9_PID_SHIFT,
+                                USB_PIPEnCTR_9_PID);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        default:
+        break;
+    }
+
+    if (pid == DEVDRV_USBF_PID_BUF)
+    {
+        for (loop = 0; loop < 200; loop++)
+        {
+            switch (pipe)
+            {
+                case USB_FUNCTION_PIPE0:
+                    pbusy = RZA_IO_RegRead_16(&USB200.DCPCTR,
+                                                USB_DCPCTR_PBUSY_SHIFT,
+                                                USB_DCPCTR_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE1:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE2:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE3:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE4:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE5:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE6:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE6CTR,
+                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_6_8_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE7:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE7CTR,
+                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_6_8_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE8:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE8CTR,
+                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_6_8_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE9:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
+                                                USB_PIPEnCTR_9_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_9_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEA:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEACTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEB:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEC:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPECCTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPED:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEE:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEECTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEF:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                default:
+                    pbusy   = 1;
+                break;
+            }
+
+            if (pbusy == 0)
+            {
+                break;
+            }
+            Userdef_USB_usb0_function_delay_500ns();
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_pid_stall
+* Description  : Disables communication (STALL) in the pipe specified by the
+*              : argument.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_pid_stall (uint16_t pipe)
+{
+    uint16_t pid;
+
+    pid = usb0_function_get_pid(pipe);
+    if (pid == DEVDRV_USBF_PID_BUF)
+    {
+        switch (pipe)
+        {
+            case USB_FUNCTION_PIPE0:
+                RZA_IO_RegWrite_16(&USB200.DCPCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_DCPCTR_PID_SHIFT,
+                                    USB_DCPCTR_PID);
+            break;
+
+            case USB_FUNCTION_PIPE1:
+                RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE2:
+                RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE3:
+                RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE4:
+                RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE5:
+                RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE6:
+                RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE7:
+                RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE8:
+                RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE9:
+                RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_9_PID_SHIFT,
+                                    USB_PIPEnCTR_9_PID);
+            break;
+
+            case USB_FUNCTION_PIPEA:
+                RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEB:
+                RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEC:
+                RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPED:
+                RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEE:
+                RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEF:
+                RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            default:
+            break;
+        }
+    }
+    else
+    {
+        switch (pipe)
+        {
+            case USB_FUNCTION_PIPE0:
+                RZA_IO_RegWrite_16(&USB200.DCPCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_DCPCTR_PID_SHIFT,
+                                    USB_DCPCTR_PID);
+            break;
+
+            case USB_FUNCTION_PIPE1:
+                RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE2:
+                RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE3:
+                RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE4:
+                RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE5:
+                RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE6:
+                RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE7:
+                RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE8:
+                RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE9:
+                RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_9_PID_SHIFT,
+                                    USB_PIPEnCTR_9_PID);
+            break;
+
+            case USB_FUNCTION_PIPEA:
+                RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEB:
+                RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEC:
+                RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPED:
+                RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEE:
+                RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEF:
+                RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            default:
+            break;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_pid_stall
+* Description  : Disables communication (NAK) in the pipe specified by the argument.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_clear_pid_stall (uint16_t pipe)
+{
+    usb0_function_set_pid_nak(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_get_pid
+* Description  : Returns the pipe state specified by the argument.
+* Arguments    : uint16_t pipe          ; Pipe Number
+* Return Value : PID
+*******************************************************************************/
+uint16_t usb0_function_get_pid (uint16_t pipe)
+{
+    uint16_t pid;
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            pid = RZA_IO_RegRead_16(&USB200.DCPCTR,
+                                    USB_DCPCTR_PID_SHIFT,
+                                    USB_DCPCTR_PID);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE6CTR,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE7CTR,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE8CTR,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
+                                    USB_PIPEnCTR_9_PID_SHIFT,
+                                    USB_PIPEnCTR_9_PID);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            pid = RZA_IO_RegRead_16(&USB200.PIPEACTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            pid = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            pid = RZA_IO_RegRead_16(&USB200.PIPECCTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            pid = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            pid = RZA_IO_RegRead_16(&USB200.PIPEECTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            pid = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        default:
+            pid = 0;
+        break;
+    }
+
+    return pid;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_csclr
+* Description  : CSPLIT status clear setting of sprit transaction in specified
+*              : pipe is performed.
+*              : When SQSET bit or SQCLR bit, and SQSET bit or SQCLR bit
+*              : in DCPCTR register are continuously changed (when the sequence
+*              : toggle bit of data PID is continuously changed over two or more pipes),
+*              : the access cycle with 120 ns and more than 5 cycle bus clock is necessary.
+*              : Do not set both SQCLR bit and SQSET bit to 1 at the same time.
+*              : In addition, both bits should be operated after PID is set to NAK.
+*              : However, when it is set to the isochronous transfer as the transfer type
+*              : (TYPE=11), writing in SQSET bit is disabled.
+* Arguments    : uint16_t pipe     ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_csclr (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB200.DCPCTR,
+                                1,
+                                USB_DCPCTR_CSCLR_SHIFT,
+                                USB_DCPCTR_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                1,
+                                USB_PIPEnCTR_9_CSCLR_SHIFT,
+                                USB_PIPEnCTR_9_CSCLR);
+        break;
+
+        default:
+            /* PIPEA-F have not CSCLR */
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_sqclr
+* Description  : Sets the sequence bit of the pipe specified by the argument to
+*              : DATA0.
+* Arguments    : uint16_t pipe              ; Pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_sqclr (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB200.DCPCTR,
+                                1,
+                                USB_DCPCTR_SQCLR_SHIFT,
+                                USB_DCPCTR_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                1,
+                                USB_PIPEnCTR_9_SQCLR_SHIFT,
+                                USB_PIPEnCTR_9_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_sqset
+* Description  : Sets the sequence bit of the pipe specified by the argument to
+*              : DATA1.
+* Arguments    : uint16_t pipe   ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_sqset (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB200.DCPCTR,
+                                1,
+                                USB_DCPCTR_SQSET_SHIFT,
+                                USB_DCPCTR_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
+                                USB_PIPEnCTR_6_8_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
+                                USB_PIPEnCTR_6_8_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
+                                USB_PIPEnCTR_6_8_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                1,
+                                USB_PIPEnCTR_9_SQSET_SHIFT,
+                                USB_PIPEnCTR_9_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_get_sqmon
+* Description  : Toggle bit of specified pipe is obtained
+* Arguments    : uint16_t pipe   ; Pipe number
+* Return Value : sqmon
+*******************************************************************************/
+uint16_t usb0_function_get_sqmon (uint16_t pipe)
+{
+    uint16_t sqmon;
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            sqmon = RZA_IO_RegRead_16(&USB200.DCPCTR,
+                                        USB_DCPCTR_SQMON_SHIFT,
+                                        USB_DCPCTR_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE6CTR,
+                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
+                                        USB_PIPEnCTR_6_8_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE7CTR,
+                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
+                                        USB_PIPEnCTR_6_8_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE8CTR,
+                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
+                                        USB_PIPEnCTR_6_8_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
+                                        USB_PIPEnCTR_9_SQMON_SHIFT,
+                                        USB_PIPEnCTR_9_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPEACTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPECCTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPEECTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        default:
+            sqmon = 0;
+        break;
+    }
+
+    return sqmon;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_aclrm
+* Description  : The buffer of specified pipe is initialized
+* Arguments    : uint16_t pipe    : Pipe
+* Return Value : none
+*******************************************************************************/
+void usb0_function_aclrm (uint16_t pipe)
+{
+    usb0_function_set_aclrm(pipe);
+    usb0_function_clr_aclrm(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_aclrm
+* Description  : The auto buffer clear mode of specified pipe is enabled
+* Arguments    : uint16_t pipe    : Pipe
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_aclrm (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                1,
+                                USB_PIPEnCTR_9_ACLRM_SHIFT,
+                                USB_PIPEnCTR_9_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_clr_aclrm
+* Description  : The auto buffer clear mode of specified pipe is enabled
+* Arguments    : uint16_t pipe    : Pipe
+* Return Value : none
+*******************************************************************************/
+void usb0_function_clr_aclrm (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                0,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                0,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                0,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                0,
+                                USB_PIPEnCTR_9_ACLRM_SHIFT,
+                                USB_PIPEnCTR_9_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_get_inbuf
+* Description  : Returns INBUFM of the pipe specified by the argument.
+* Arguments    : uint16_t pipe             ; Pipe Number
+* Return Value : inbuf
+*******************************************************************************/
+uint16_t usb0_function_get_inbuf (uint16_t pipe)
+{
+    uint16_t inbuf;
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            inbuf = 0;
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            inbuf = 0;
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            inbuf = 0;
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            inbuf = 0;
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
+                                    USB_PIPEnCTR_9_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_9_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPEACTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPECCTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPEECTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        default:
+            inbuf = 0;
+        break;
+    }
+
+    return inbuf;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_setting_interrupt
+* Description  : Sets the USB module interrupt level.
+* Arguments    : uint8_t level ;interrupt level
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb0_function_setting_interrupt (uint8_t level)
+{
+    uint16_t d0fifo_dmaintid;
+    uint16_t d1fifo_dmaintid;
+
+    R_INTC_RegistIntFunc(INTC_ID_USBI0, usb0_function_interrupt);
+    R_INTC_SetPriority(INTC_ID_USBI0, level);
+    R_INTC_Enable(INTC_ID_USBI0);
+
+    d0fifo_dmaintid = Userdef_USB_usb0_function_d0fifo_dmaintid();
+
+    if (d0fifo_dmaintid != 0xFFFF)
+    {
+        R_INTC_RegistIntFunc(d0fifo_dmaintid, usb0_function_dma_interrupt_d0fifo);
+        R_INTC_SetPriority(d0fifo_dmaintid, level);
+        R_INTC_Enable(d0fifo_dmaintid);
+    }
+
+    d1fifo_dmaintid = Userdef_USB_usb0_function_d1fifo_dmaintid();
+
+    if (d1fifo_dmaintid != 0xFFFF)
+    {
+        R_INTC_RegistIntFunc(d1fifo_dmaintid, usb0_function_dma_interrupt_d1fifo);
+        R_INTC_SetPriority(d1fifo_dmaintid, level);
+        R_INTC_Enable(d1fifo_dmaintid);
+    }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_reset_module
+* Description  : Initializes the USB module.
+*              : Enables providing clock to the USB module.
+*              : Sets USB bus wait register.
+* Arguments    : uint16_t clockmode ; 48MHz ; USBFCLOCK_X1_48MHZ
+*              :                    ; 12MHz ; USBFCLOCK_EXTAL_12MHZ
+* Return Value : none
+*******************************************************************************/
+void usb0_function_reset_module (uint16_t clockmode)
+{
+    /* UPLLE bit is only USB0 */
+    if (RZA_IO_RegRead_16(&USB200.SYSCFG0,
+                                USB_SYSCFG_UPLLE_SHIFT,
+                                USB_SYSCFG_UPLLE) == 1)
+    {
+        if ((USB200.SYSCFG0 & USB_FUNCTION_BITUCKSEL) != clockmode)
+        {
+            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                                0,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+            USB200.SYSCFG0 = 0;
+            USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
+            Userdef_USB_usb0_function_delay_xms(1);
+            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                                1,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+        }
+        else
+        {
+            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                                0,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+            Userdef_USB_usb0_function_delay_xms(1);
+            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                                1,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+        }
+    }
+    else
+    {
+        RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                            0,
+                            USB_SUSPMODE_SUSPM_SHIFT,
+                            USB_SUSPMODE_SUSPM);
+        USB200.SYSCFG0 = 0;
+        USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
+        Userdef_USB_usb0_function_delay_xms(1);
+        RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                            1,
+                            USB_SUSPMODE_SUSPM_SHIFT,
+                            USB_SUSPMODE_SUSPM);
+    }
+
+    USB200.BUSWAIT = (uint16_t)(USB_FUNCTION_BUSWAIT_05 & USB_FUNCTION_BITBWAIT);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_get_buf_size
+* Description  : Obtains pipe buffer size specified by the argument and
+*              : maximum packet size of the USB device in use.
+*              : When USB_FUNCTION_PIPE0 is specified by the argument, obtains the maximum
+*              : packet size of the USB device using the corresponding pipe.
+*              : For the case that USB_FUNCTION_PIPE0 is not assigned by the argument, when the
+*              : corresponding pipe is in continuous transfer mode,
+*              : obtains the buffer size allocated in the corresponcing pipe,
+*              : when incontinuous transfer, obtains maximum packet size.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : Maximum packet size or buffer size
+*******************************************************************************/
+uint16_t usb0_function_get_buf_size (uint16_t pipe)
+{
+    uint16_t size;
+    uint16_t bufsize;
+
+    if (pipe == USB_FUNCTION_PIPE0)
+    {
+        size = RZA_IO_RegRead_16(&USB200.DCPMAXP,
+                                USB_DCPMAXP_MXPS_SHIFT,
+                                USB_DCPMAXP_MXPS);
+    }
+    else
+    {
+        if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_CNTMD_SHIFT, USB_PIPECFG_CNTMD) == 1)
+        {
+            bufsize = RZA_IO_RegRead_16(&g_usb0_function_pipebuf[pipe], USB_PIPEBUF_BUFSIZE_SHIFT, USB_PIPEBUF_BUFSIZE);
+            size = (uint16_t)((bufsize + 1) * USB_FUNCTION_PIPExBUF);
+        }
+        else
+        {
+            size = RZA_IO_RegRead_16(&g_usb0_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
+        }
+    }
+    return size;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_get_mxps
+* Description  : Obtains maximum packet size of the USB device using the pipe
+*              : specified by the argument.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : Max Packet Size
+*******************************************************************************/
+uint16_t usb0_function_get_mxps (uint16_t pipe)
+{
+    uint16_t size;
+
+    if (pipe == USB_FUNCTION_PIPE0)
+    {
+        size = RZA_IO_RegRead_16(&USB200.DCPMAXP,
+                                USB_DCPMAXP_MXPS_SHIFT,
+                                USB_DCPMAXP_MXPS);
+    }
+    else
+    {
+        size = RZA_IO_RegRead_16(&g_usb0_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
+    }
+    return size;
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_api.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_api.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,441 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_api.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb0_function.h"
+#include "dev_drv.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb0_api_function_init
+* Description  : Initializes the USB module in the USB function mode.
+* Arguments    : uint8_t  int_level ; interruput level
+*              : uint16_t mode      : Speed modes
+*              :                    :  USB_FUCNTION_HIGH_SPEED: High-speed device
+*              :                    :  USB_FUCNTION_FULL_SPEED: Full-speed device
+*              : uint16_t clockmode ; 48MHz ; USBFCLOCK_X1_48MHZ
+*              :                    ; 12MHz ; USBFCLOCK_EXTAL_12MHZ
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb0_api_function_init (uint8_t int_level, uint16_t mode, uint16_t clockmode)
+{
+    volatile uint8_t dummy_buf;
+
+    CPG.STBCR7  &= 0xfd;                        /* The clock of USB0 modules is permitted */
+    dummy_buf   = CPG.STBCR7;                   /* (Dummy read) */
+
+    usb0_function_setting_interrupt(int_level);
+
+    usb0_function_reset_module(clockmode);      /* reset USB module with setting tranciever */
+                                                /* and HSE=1                                */
+
+    usb0_function_init_status();                /* clear variables                          */
+
+    usb0_function_InitModule(mode);             /* select USB Function and Interrupt Enable */
+                                                /* Detect USB Device to attach or detach    */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_api_function_IsConfigured
+* Description  : Checks if the USB device is configured to return the result as
+*              : the return value.
+* Arguments    : none
+* Return Value : DEVDRV_USBF_YES  : Configured & Configured Suspend
+*              : DEVDRV_USBF_NO   : not Configured
+*******************************************************************************/
+uint16_t usb0_api_function_IsConfigured (void)
+{
+    uint16_t dvst;
+
+    dvst = usb0_function_GetDeviceState();
+
+    if ((dvst == USB_FUNCTION_DVST_CONFIGURED) ||
+        (dvst == USB_FUNCTION_DVST_CONFIGURED_SUSPEND))
+    {
+        return DEVDRV_USBF_YES;
+    }
+
+    return DEVDRV_USBF_NO;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_GetDeviceState
+* Description  : Returns the state of USB device.
+* Arguments    : none
+* Return Value : Device States
+*******************************************************************************/
+uint16_t usb0_function_GetDeviceState (void)
+{
+    uint16_t dvsq;
+    uint16_t dvst;
+
+    dvsq = USB200.INTSTS0;
+    switch(dvsq & USB_FUNCTION_BITDVSQ)
+    {
+        case USB_FUNCTION_DS_POWR:                      /* Power state *//* power-on */
+            dvst = USB_FUNCTION_DVST_POWERED;
+        break;
+
+        case USB_FUNCTION_DS_DFLT:                      /* Default state *//* bus-reset */
+            dvst = USB_FUNCTION_DVST_DEFAULT;
+        break;
+
+        case USB_FUNCTION_DS_ADDS:                      /* Address state */
+            dvst = USB_FUNCTION_DVST_ADDRESS;
+        break;
+
+        case USB_FUNCTION_DS_CNFG:                      /* Configured state */
+            dvst = USB_FUNCTION_DVST_CONFIGURED;
+        break;
+
+        case USB_FUNCTION_DS_SPD_CNFG:                  /* Configured Suspend state */
+            dvst = USB_FUNCTION_DVST_CONFIGURED_SUSPEND;
+        break;
+
+        case USB_FUNCTION_DS_SPD_POWR:                  /* Power      Suspend state */
+        case USB_FUNCTION_DS_SPD_DFLT:                  /* Default    Suspend state */
+        case USB_FUNCTION_DS_SPD_ADDR:                  /* Address    Suspend state */
+            dvst = USB_FUNCTION_DVST_SUSPEND;
+        break;
+
+        default:                                        /* error */
+            dvst = USB_FUNCTION_DVST_SUSPEND;
+        break;
+    }
+
+    return dvst;
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_start_receive_transfer
+* Description  : Starts USB data reception using the pipe specified in the argument.
+*              : The FIFO for using is set in the pipe definition table.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data data Address
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    usb0_function_start_receive_transfer(pipe, size, data);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_start_send_transfer
+* Description  : Starts the USB data communication using pipe specified by the argument.
+* Arguments    : uint16_t pipe     ; Pipe Number
+*              : uint32_t size     ; Data Size
+*              : uint8_t *data     ; Data data Address
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb0_api_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t status;
+
+    status = usb0_function_start_send_transfer(pipe, size, data);
+
+    return status;
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_check_pipe_status
+* Description  : Starts USB data reception using the pipe specified in the argument.
+*              : The FIFO for using is set in the pipe definition table.
+* Arguments    : uint16_t  pipe     ; Pipe Number
+*              : uint32_t *size     ; Data Size
+* Return Value : Pipe Status
+*******************************************************************************/
+uint16_t usb0_api_function_check_pipe_status (uint16_t pipe, uint32_t * size)
+{
+    if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_DONE)
+    {
+        *size = g_usb0_function_PipeDataSize[pipe];
+        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+        return DEVDRV_USBF_PIPE_DONE;
+    }
+    else if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_NORES)
+    {
+        *size = 0;
+        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+        return DEVDRV_USBF_PIPE_NORES;
+    }
+    else if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_STALL)
+    {
+        *size = 0;
+        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+        return DEVDRV_USBF_PIPE_STALL;
+    }
+    else if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_FIFOERROR)
+    {
+        *size = 0;
+        g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+        return DEVDRV_USBF_FIFOERROR;
+    }
+    else
+    {
+        /* Do Nothing */
+    }
+
+    return g_usb0_function_pipe_status[pipe];
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_clear_pipe_status
+* Description  : Starts USB data reception using the pipe specified in the argument.
+*              : The FIFO for using is set in the pipe definition table.
+* Arguments    : uint16_t  pipe     ; Pipe Number
+* Return Value : Pipe Status
+*******************************************************************************/
+void usb0_api_function_clear_pipe_status (uint16_t pipe)
+{
+    g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
+    g_usb0_function_PipeDataSize[pipe] = 0;
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_set_pid_buf
+* Description  : Enables communicaqtion in the pipe specified by the argument
+*              : (BUF).
+* Arguments    : uint16_t pipe             ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_set_pid_buf (uint16_t pipe)
+{
+    usb0_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_set_pid_nak
+* Description  : Disables communication (NAK) in the pipe specified by the argument.
+*              : When the pipe status was enabling communication (BUF) before
+*              : executing before executing this function, waits in the software
+*              : until the pipe becomes ready after setting disabled.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_set_pid_nak (uint16_t pipe)
+{
+    usb0_function_set_pid_nak(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_set_pid_stall
+* Description  : Disables communication (STALL) in the pipe specified by the
+*              : argument.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_set_pid_stall (uint16_t pipe)
+{
+    usb0_function_set_pid_stall(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_clear_pid_stall
+* Description  : Disables communication (NAK) in the pipe specified by the argument.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_clear_pid_stall (uint16_t pipe)
+{
+    usb0_function_clear_pid_stall(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_get_pid
+* Description  : Returns the pipe state specified by the argument.
+* Arguments    : uint16_t pipe          ; Pipe Number
+* Return Value : PID
+*******************************************************************************/
+uint16_t usb0_api_function_get_pid (uint16_t pipe)
+{
+    uint16_t pid;
+
+    pid = usb0_function_get_pid(pipe);
+
+    return pid;
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_check_stall
+* Description  :
+* Arguments    : uint16_t pipe          ; Pipe Number
+* Return Value : PID
+*******************************************************************************/
+int32_t usb0_api_function_check_stall (uint16_t pipe)
+{
+    uint16_t pid;
+
+    pid = usb0_function_get_pid(pipe);
+
+    if ((pid & DEVDRV_USBF_PID_STALL) == DEVDRV_USBF_PID_STALL)
+    {
+        return DEVDRV_USBF_STALL;
+    }
+
+    return DEVDRV_SUCCESS;
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_set_sqclr
+* Description  : Sets the sequence bit of the pipe specified by the argument to
+*              : DATA0.
+* Arguments    : uint16_t pipe              ; Pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_set_sqclr (uint16_t pipe)
+{
+    usb0_function_set_sqclr(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_set_sqset
+* Description  : Sets the sequence bit of the pipe specified by the argument to
+*              : DATA1.
+* Arguments    : uint16_t pipe   ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_set_sqset (uint16_t pipe)
+{
+    usb0_function_set_sqset(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_set_csclr
+* Description  : CSPLIT status clear setting of sprit transaction in specified
+*              : pipe is performed.
+*              : When SQSET bit or SQCLR bit, and SQSET bit or SQCLR bit
+*              : in DCPCTR register are continuously changed (when the sequence
+*              : toggle bit of data PID is continuously changed over two or more pipes),
+*              : the access cycle with 120 ns and more than 5 cycle bus clock is necessary.
+*              : Do not set both SQCLR bit and SQSET bit to 1 at the same time.
+*              : In addition, both bits should be operated after PID is set to NAK.
+*              : However, when it is set to the isochronous transfer as the transfer type
+*              : (TYPE=11), writing in SQSET bit is disabled.
+* Arguments    : uint16_t pipe     ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_set_csclr (uint16_t pipe)
+{
+    usb0_function_set_csclr(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_set_curpipe
+* Description  : Allocates FIF0 specifed by the argument in the pipe assigned
+*              : by the argument.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t fifosel   ; Select FIFO
+*              : uint16_t isel      ; FIFO Access Direction
+*              : uint16_t mbw       ; FIFO Port Access Bit Width
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
+{
+    usb0_function_set_curpipe(pipe, fifosel, isel, mbw);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_clear_brdy_sts
+* Description  : Clear BRDY interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_clear_brdy_sts (uint16_t pipe)
+{
+    usb0_function_clear_brdy_sts(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_clear_bemp_sts
+* Description  : Clear BEMP interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_clear_bemp_sts (uint16_t pipe)
+{
+    usb0_function_clear_bemp_sts(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_clear_nrdy_sts
+* Description  : Clear NRDY interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_clear_nrdy_sts (uint16_t pipe)
+{
+    usb0_function_clear_nrdy_sts(pipe);
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_controlrw.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_controlrw.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,142 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_controlrw.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb0_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb0_api_function_CtrlReadStart
+* Description  : Executes the USB control read transfer.
+*              : USB host controller <- USB device
+* Arguments    : uint16_t size     ; Data Size
+*              : uint8_t  *data    ; Data Address
+* Return Value : DEVDRV_USBF_WRITEEND          ; End of data write
+*              : DEVDRV_USBF_WRITESHRT         ; End of short data write
+*              : DEVDRV_USBF_WRITING           ; Continue of data write
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO access error
+*******************************************************************************/
+uint16_t usb0_api_function_CtrlReadStart (uint32_t size, uint8_t * data)
+{
+    uint16_t status;
+    uint16_t mbw;
+
+    usb0_function_set_pid_nak(USB_FUNCTION_PIPE0);
+
+    g_usb0_function_data_count[USB_FUNCTION_PIPE0]   = size;
+    g_usb0_function_data_pointer[USB_FUNCTION_PIPE0] = data;
+
+    mbw = usb0_function_get_mbw(g_usb0_function_data_count[USB_FUNCTION_PIPE0],
+                                 (uint32_t)g_usb0_function_data_pointer[USB_FUNCTION_PIPE0]);
+    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
+    USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;
+
+    status = usb0_function_write_buffer_c(USB_FUNCTION_PIPE0);
+
+    /* Peripheral Control sequence */
+    switch (status)
+    {
+        case DEVDRV_USBF_WRITESHRT:                                     /* End of data write */
+        case DEVDRV_USBF_WRITEEND:                                      /* End of data write (not null) */
+        case DEVDRV_USBF_WRITING:                                       /* Continue of data write */
+            usb0_function_enable_bemp_int(USB_FUNCTION_PIPE0);          /* Enable Empty Interrupt */
+            usb0_function_set_pid_buf(USB_FUNCTION_PIPE0);              /* Set BUF */
+        break;
+
+        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access error */
+        break;
+
+        default:
+        break;
+    }
+
+    return status;                                                      /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_CtrlWriteStart
+* Description  : Executes the USB control write transfer.
+*              : USB host controller -> USB device
+* Arguments    : uint16_t  size         ; Data Size
+*              : uint8_t  *data         ; Data Address
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_CtrlWriteStart (uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb0_function_set_pid_nak(USB_FUNCTION_PIPE0);
+
+    g_usb0_function_data_count[USB_FUNCTION_PIPE0]   = size;
+    g_usb0_function_data_pointer[USB_FUNCTION_PIPE0] = data;
+
+    mbw = usb0_function_get_mbw(g_usb0_function_data_count[USB_FUNCTION_PIPE0],
+                                (uint32_t)g_usb0_function_data_pointer[USB_FUNCTION_PIPE0]);
+    usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
+    USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;
+
+    usb0_function_enable_brdy_int(USB_FUNCTION_PIPE0);
+    usb0_function_set_pid_buf(USB_FUNCTION_PIPE0);
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_global.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_global.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,144 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_global.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb0_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+const uint16_t g_usb0_function_bit_set[16] =
+{
+    0x0001, 0x0002, 0x0004, 0x0008,
+    0x0010, 0x0020, 0x0040, 0x0080,
+    0x0100, 0x0200, 0x0400, 0x0800,
+    0x1000, 0x2000, 0x4000, 0x8000
+};
+
+uint32_t g_usb0_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint8_t  * g_usb0_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+uint16_t g_usb0_function_PipeIgnore[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb0_function_PipeTbl[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb0_function_pipe_status[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint32_t g_usb0_function_PipeDataSize[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+USB_FUNCTION_DMA_t g_usb0_function_DmaInfo[2];
+uint16_t g_usb0_function_DmaPipe[2];
+uint16_t g_usb0_function_DmaBval[2];
+uint16_t g_usb0_function_DmaStatus[2];
+
+uint16_t g_usb0_function_CtrZeroLengthFlag;
+
+//uint16_t g_usb0_function_ConfigNum;
+//uint16_t g_usb0_function_Alternate[USB_FUNCTION_ALT_NO];
+//uint16_t g_usb0_function_RemoteWakeupFlag;
+uint16_t g_usb0_function_TestModeFlag;
+uint16_t g_usb0_function_TestModeSelectors;
+
+//uint16_t g_usb0_function_ReqType;
+//uint16_t g_usb0_function_ReqTypeType;
+//uint16_t g_usb0_function_ReqTypeRecip;
+//uint16_t g_usb0_function_ReqRequest;
+//uint16_t g_usb0_function_ReqValue;
+//uint16_t g_usb0_function_ReqIndex;
+//uint16_t g_usb0_function_ReqLength;
+
+//uint16_t g_usb0_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
+
+uint16_t g_usb0_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb0_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb0_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb0_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+
+/*******************************************************************************
+* Function Name: usb0_function_init_status
+* Description  : Initialization USB Sample Driver Variable.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb0_function_init_status (void)
+{
+    uint16_t pipe;
+
+    //g_usb0_function_ConfigNum         = 0;
+    //g_usb0_function_RemoteWakeupFlag  = DEVDRV_USBF_OFF;
+    g_usb0_function_TestModeFlag      = DEVDRV_USBF_OFF;
+    g_usb0_function_CtrZeroLengthFlag = 0;
+
+#if 0
+    usb0_function_clear_alt();
+#endif
+
+    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
+    {
+        g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
+        g_usb0_function_PipeDataSize[pipe] = 0;
+        g_usb0_function_data_count[pipe]   = 0;
+
+        /* pipe configuration in usb0_function_ResetEP() */
+        g_usb0_function_pipecfg[pipe]  = 0;
+        g_usb0_function_pipebuf[pipe]  = 0;
+        g_usb0_function_pipemaxp[pipe] = 0;
+        g_usb0_function_pipeperi[pipe] = 0;
+    }
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_sig.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_sig.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,330 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_sig.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb0_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+static void usb0_function_EnableINTModule(void);
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb0_function_InitModule
+* Description  : Initializes the USB module in the USB function mode.
+* Arguments    : uint16_t mode  ; USB_FUNCTION_HIGH_SPEED ; Hi-Speed Mode
+*              :                ; other                   ; Full-speed Mode
+* Return Value : none
+*******************************************************************************/
+void usb0_function_InitModule (uint16_t mode)
+{
+    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+                        0,
+                        USB_SYSCFG_DCFM_SHIFT,
+                        USB_SYSCFG_DCFM);           /* USB function */
+
+    /* USB module operation enabled     */
+    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+                        1,
+                        USB_SYSCFG_USBE_SHIFT,
+                        USB_SYSCFG_USBE);
+
+    if (mode == USB_FUNCTION_HIGH_SPEED)
+    {
+        RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+                            1,
+                            USB_SYSCFG_HSE_SHIFT,
+                            USB_SYSCFG_HSE);        /* Hi-Speed Mode */
+    }
+    else
+    {
+        RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+                            0,
+                            USB_SYSCFG_HSE_SHIFT,
+                            USB_SYSCFG_HSE);
+    }
+
+    /* for power-on                     */
+    if (usb0_function_CheckVBUStaus() == DEVDRV_USBF_ON)
+    {
+        usb0_function_EnableINTModule();            /* Interrupt Enable         */
+        usb0_function_USB_FUNCTION_Attach();        /* pull-up D+ and open D-   */
+    }
+    else
+    {
+        usb0_function_USB_FUNCTION_Detach();        /* USB Detach               */
+                                                    /* with Interrupt Enable    */
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_CheckVBUStaus
+* Description  : Checks the USB-VBUS state to returns the connection state to
+*              : the USB host.
+* Arguments    : none
+* Return Value : DEVDRV_USBF_ON     :   VBUS ON
+*              : DEVDRV_USBF_OFF    :   VBUS OFF
+*******************************************************************************/
+uint16_t usb0_function_CheckVBUStaus (void)
+{
+    uint16_t buf1;
+    uint16_t buf2;
+    uint16_t buf3;
+
+    /* monitor VBUS pins */
+    do
+    {
+        buf1 = RZA_IO_RegRead_16(&USB200.INTSTS0,
+                                USB_INTSTS0_VBSTS_SHIFT,
+                                USB_INTSTS0_VBSTS);
+        Userdef_USB_usb0_function_delay_10us(1);
+        buf2 = RZA_IO_RegRead_16(&USB200.INTSTS0,
+                                USB_INTSTS0_VBSTS_SHIFT,
+                                USB_INTSTS0_VBSTS);
+        Userdef_USB_usb0_function_delay_10us(1);
+        buf3 = RZA_IO_RegRead_16(&USB200.INTSTS0,
+                                USB_INTSTS0_VBSTS_SHIFT,
+                                USB_INTSTS0_VBSTS);
+    } while ((buf1 != buf2) || (buf2 != buf3));
+
+    if (buf1 == DEVDRV_USBF_OFF)
+    {
+        return DEVDRV_USBF_OFF;         /* detach */
+    }
+
+    return DEVDRV_USBF_ON;              /* attach */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_USB_FUNCTION_Attach
+* Description  : Connects to the USB host controller.
+*              : This function pulls up D+.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb0_function_USB_FUNCTION_Attach (void)
+{
+    Userdef_USB_usb0_function_attach();
+
+    Userdef_USB_usb0_function_delay_xms(10);
+
+    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+                        1,
+                        USB_SYSCFG_DPRPU_SHIFT,
+                        USB_SYSCFG_DPRPU);      /* Pull-up D+ and open D- */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_USB_FUNCTION_Detach
+* Description  : Disconnects from the USB host controller.
+*              : This function opens D+/D-.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb0_function_USB_FUNCTION_Detach (void)
+{
+    uint16_t pipe;
+
+    Userdef_USB_usb0_function_detach();
+
+    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
+    {
+        if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_IDLE)
+        {
+            usb0_function_stop_transfer(pipe);
+        }
+    }
+
+    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+                        0,
+                        USB_SYSCFG_DPRPU_SHIFT,
+                        USB_SYSCFG_DPRPU);                  /* open D+ and D- */
+
+    /* Detach Recovery */
+    Userdef_USB_usb0_function_delay_500ns();                /* need 1us=500ns * 2 wait */
+    Userdef_USB_usb0_function_delay_500ns();
+
+    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+                        1,
+                        USB_SYSCFG_DCFM_SHIFT,
+                        USB_SYSCFG_DCFM);
+    Userdef_USB_usb0_function_delay_500ns();                /* need 100ns wait but 500ns S/W wait */
+
+    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+                        0,
+                        USB_SYSCFG_DCFM_SHIFT,
+                        USB_SYSCFG_DCFM);
+
+    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+                        0,
+                        USB_SYSCFG_USBE_SHIFT,
+                        USB_SYSCFG_USBE);       /* soft reset module */
+    Userdef_USB_usb0_function_delay_500ns();
+
+    RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+                        1,
+                        USB_SYSCFG_USBE_SHIFT,
+                        USB_SYSCFG_USBE);
+
+    usb0_function_EnableINTModule();            /* Interrupt Enable */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_USB_FUNCTION_BusReset
+* Description  : This function is executed when the USB device is transitioned
+*              : to POWERD_STATE. Sets the device descriptor according to the
+*              : connection speed determined by the USB reset hand shake.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+#if 0	/*The USBHAL in mbed does not need this function*/
+void usb0_function_USB_FUNCTION_BusReset (void)
+{
+    usb0_function_init_status();                                    /* memory clear */
+
+    if (usb0_function_is_hispeed() == USB_FUNCTION_HIGH_SPEED)
+    {
+        usb0_function_ResetDescriptor(USB_FUNCTION_HIGH_SPEED);     /* Device Descriptor reset */
+    }
+    else
+    {
+        usb0_function_ResetDescriptor(USB_FUNCTION_FULL_SPEED);     /* Device Descriptor reset */
+    }
+
+    usb0_function_ResetDCP();                                       /* Default Control PIPE reset */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_USB_FUNCTION_Resume
+* Description  : This function is executed when the USB device detects a resume
+*              : signal.
+*              : The USB sample driver does not operate for this function.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+#if 0	/*The USBHAL in mbed does not need this function*/
+void usb0_function_USB_FUNCTION_Resume (void)
+{
+    /* NOP */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_USB_FUNCTION_Suspend
+* Description  : This function is executed when the USB device detects a suspend
+*              : signal.
+*              : The USB sample driver does not operate for this function.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+#if 0	/*The USBHAL in mbed does not need this function*/
+void usb0_function_USB_FUNCTION_Suspend (void)
+{
+    /* NOP */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_USB_FUNCTION_TestMode
+* Description  : This function is executed when the USB device is transitioned U
+*              : to TEST_MODE by the USB standard request.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb0_function_USB_FUNCTION_TestMode (void)
+{
+    switch (g_usb0_function_TestModeSelectors & USB_FUNCTION_FUNCTION_TEST_SELECT)
+    {
+        case USB_FUNCTION_FUNCTION_TEST_J:
+        case USB_FUNCTION_FUNCTION_TEST_K:
+        case USB_FUNCTION_FUNCTION_TEST_SE0_NAK:
+        case USB_FUNCTION_FUNCTION_TEST_PACKET:
+            RZA_IO_RegWrite_16(&USB200.TESTMODE,
+                                (g_usb0_function_TestModeSelectors >> 8),
+                                USB_TESTMODE_UTST_SHIFT,
+                                USB_TESTMODE_UTST);
+        break;
+
+        case USB_FUNCTION_FUNCTION_TEST_FORCE_ENABLE:
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_EnableINTModule
+* Description  : Enables USB interrupt.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_EnableINTModule (void)
+{
+    uint16_t buf;
+
+    buf  = USB200.INTENB0;
+    buf |= (USB_FUNCTION_BITVBSE | USB_FUNCTION_BITDVSE | USB_FUNCTION_BITCTRE |
+             USB_FUNCTION_BITBEMPE | USB_FUNCTION_BITNRDYE | USB_FUNCTION_BITBRDYE);
+    USB200.INTENB0 = buf;
+
+    usb0_function_enable_bemp_int(USB_FUNCTION_PIPE0);
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_sub.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/function/usb0_function_sub.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,453 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_sub.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb0_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+#if 0
+extern const uint16_t *g_usb0_function_EndPntPtr[];
+extern uint8_t         g_usb0_function_DeviceDescriptor[];
+extern uint8_t        *g_usb0_function_ConfigurationPtr[];
+#endif
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb0_function_ResetDCP
+* Description  : Initializes the default control pipe(DCP).
+* Outline      : Reset default control pipe
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb0_function_ResetDCP (void)
+{
+    USB200.DCPCFG  = 0;
+#if 0
+    USB200.DCPMAXP = g_usb0_function_DeviceDescriptor[7];
+#else
+    USB200.DCPMAXP = 64;
+#endif
+
+    USB200.CFIFOSEL  = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+    USB200.D0FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+    USB200.D1FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_ResetEP
+* Description  : Initializes the end point.
+* Arguments    : uint16_t num          ; Configuration Number
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb0_function_ResetEP (uint16_t num)
+{
+    uint16_t   pipe;
+    uint16_t   ep;
+    uint16_t   index;
+    uint16_t   buf;
+    uint16_t * tbl;
+
+    tbl = (uint16_t *)(g_usb0_function_EndPntPtr[num - 1]);
+
+    for (ep = 1; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
+    {
+        if (g_usb0_function_EPTableIndex[ep] != USB_FUNCTION_EP_ERROR)
+        {
+            index = (uint16_t)(USB_FUNCTION_EPTABLE_LENGTH * g_usb0_function_EPTableIndex[ep]);
+            pipe  = (uint16_t)(tbl[index + 0] & USB_FUNCTION_BITCURPIPE);
+
+            g_usb0_function_PipeTbl[pipe] = (uint16_t)( ((tbl[index + 1] & USB_FUNCTION_DIRFIELD) << 3) |
+                                                         ep                                             |
+                                                         (tbl[index + 0] & USB_FUNCTION_FIFO_USE)          );
+
+            if ((tbl[index + 1] & USB_FUNCTION_DIRFIELD) == USB_FUNCTION_DIR_P_OUT)
+            {
+                tbl[index + 1] |= USB_FUNCTION_SHTNAKON;
+#ifdef  __USB_DMA_BFRE_ENABLE__
+                /* this routine cannnot be perfomred if read operation is executed in buffer size */
+                if (((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA) ||
+                    ((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA))
+                {
+                    tbl[index + 1] |= USB_FUNCTION_BFREON;
+                }
+#endif
+            }
+
+            /* Interrupt Disable */
+            buf  = USB200.BRDYENB;
+            buf &= (uint16_t)~g_usb0_function_bit_set[pipe];
+            USB200.BRDYENB = buf;
+            buf  = USB200.NRDYENB;
+            buf &= (uint16_t)~g_usb0_function_bit_set[pipe];
+            USB200.NRDYENB = buf;
+            buf  = USB200.BEMPENB;
+            buf &= (uint16_t)~g_usb0_function_bit_set[pipe];
+            USB200.BEMPENB = buf;
+
+            usb0_function_set_pid_nak(pipe);
+
+            /* CurrentPIPE Clear */
+            if (RZA_IO_RegRead_16(&USB200.CFIFOSEL,
+                                    USB_CFIFOSEL_CURPIPE_SHIFT,
+                                    USB_CFIFOSEL_CURPIPE) == pipe)
+            {
+                RZA_IO_RegWrite_16(&USB200.CFIFOSEL,
+                                    0,
+                                    USB_CFIFOSEL_CURPIPE_SHIFT,
+                                    USB_CFIFOSEL_CURPIPE);
+            }
+
+            if (RZA_IO_RegRead_16(&USB200.D0FIFOSEL,
+                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
+                                    USB_DnFIFOSEL_CURPIPE) == pipe)
+            {
+                RZA_IO_RegWrite_16(&USB200.D0FIFOSEL,
+                                    0,
+                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
+                                    USB_DnFIFOSEL_CURPIPE);
+            }
+
+            if (RZA_IO_RegRead_16(&USB200.D1FIFOSEL,
+                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
+                                    USB_DnFIFOSEL_CURPIPE) == pipe)
+            {
+                RZA_IO_RegWrite_16(&USB200.D1FIFOSEL,
+                                    0,
+                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
+                                    USB_DnFIFOSEL_CURPIPE);
+            }
+
+            /* PIPE Configuration */
+            USB200.PIPESEL  = pipe;
+            USB200.PIPECFG  = tbl[index + 1];
+            USB200.PIPEBUF  = tbl[index + 2];
+            USB200.PIPEMAXP = tbl[index + 3];
+            USB200.PIPEPERI = tbl[index + 4];
+
+            g_usb0_function_pipecfg[pipe]  = tbl[index + 1];
+            g_usb0_function_pipebuf[pipe]  = tbl[index + 2];
+            g_usb0_function_pipemaxp[pipe] = tbl[index + 3];
+            g_usb0_function_pipeperi[pipe] = tbl[index + 4];
+
+            /* Buffer Clear */
+            usb0_function_set_sqclr(pipe);
+            usb0_function_aclrm(pipe);
+
+            /* init Global */
+            g_usb0_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
+            g_usb0_function_PipeDataSize[pipe] = 0;
+        }
+    }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_EpToPipe
+* Description  : Returns the pipe which end point specified by the argument is
+*              : allocated to.
+* Arguments    : uint16_t ep       ; Direction + Endpoint Number
+* Return Value : USB_FUNCTION_EP_ERROR         : Error
+*              : Others           : Pipe Number
+*******************************************************************************/
+uint16_t usb0_function_EpToPipe (uint16_t ep)
+{
+    uint16_t pipe;
+
+    for (pipe = 1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+    {
+        if ((g_usb0_function_PipeTbl[pipe] & 0x00ff) == ep)
+        {
+            return pipe;
+        }
+    }
+
+    return USB_FUNCTION_EP_ERROR;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_InitEPTable
+* Description  : Sets the end point by the Alternate setting value of the
+*              : configuration number and the interface number specified by the
+*              : argument.
+* Arguments    : uint16_t Con_Num       ; Configuration Number
+*              : uint16_t Int_Num       ; Interface Number
+*              : uint16_t Alt_Num       ; Alternate Setting
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb0_function_InitEPTable (uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num)
+{
+    uint8_t  * ptr;
+    uint16_t   point_interface;
+    uint16_t   point_endpoint;
+    uint16_t   length;
+    uint16_t   start;
+    uint16_t   numbers;
+    uint16_t   endpoint;
+
+    ptr = (uint8_t *)g_usb0_function_ConfigurationPtr[Con_Num - 1];
+    point_interface = *ptr;
+    length = (uint16_t)((uint16_t)*(ptr + 3) << 8 | (uint16_t)*(ptr + 2));
+    ptr  += *ptr;
+    start   = 0;
+    numbers = 0;
+    point_endpoint = 0;
+
+    for (; point_interface < length;)
+    {
+        switch (*(ptr + 1))                                     /* Descriptor Type ? */
+        {
+            case USB_FUNCTION_DT_INTERFACE:                     /* Interface */
+                if ((*(ptr + 2) == Int_Num) && (*(ptr + 3) == Alt_Num))
+                {
+                    numbers = *(ptr + 4);
+                }
+                else
+                {
+                    start  += *(ptr + 4);
+                }
+                point_interface += *ptr;
+                ptr += *ptr;
+            break;
+
+            case USB_FUNCTION_DT_ENDPOINT:                      /* Endpoint */
+                if (point_endpoint < numbers)
+                {
+                    endpoint = (uint16_t)(*(ptr + 2) & 0x0f);
+                    g_usb0_function_EPTableIndex[endpoint] = (uint16_t)(start + point_endpoint);
+                    ++point_endpoint;
+                }
+                point_interface += *ptr;
+                ptr += *ptr;
+            break;
+
+            case USB_FUNCTION_DT_DEVICE:                        /* Device */
+            case USB_FUNCTION_DT_CONFIGURATION:                 /* Configuration */
+            case USB_FUNCTION_DT_STRING:                        /* String */
+            default:                                            /* Class, Vendor, else */
+                point_interface += *ptr;
+                ptr += *ptr;
+            break;
+        }
+    }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_GetConfigNum
+* Description  : Returns the number of configuration referring to the number of
+*              : configuration described in the device descriptor.
+* Arguments    : none
+* Return Value : Number of possible configurations (bNumConfigurations).
+*******************************************************************************/
+#if 0
+uint16_t usb0_function_GetConfigNum (void)
+{
+    return (uint16_t)g_usb0_function_DeviceDescriptor[17];
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_GetInterfaceNum
+* Description  : Returns the number of interface referring to the number of
+*              : interface described in the configuration descriptor.
+* Arguments    : uint16_t num       ; Configuration Number
+* Return Value : Number of this interface (bNumInterfaces).
+*******************************************************************************/
+#if 0
+uint16_t usb0_function_GetInterfaceNum (uint16_t num)
+{
+    return (uint16_t)(*(g_usb0_function_ConfigurationPtr[num - 1] + 4));
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_GetAltNum
+* Description  : Returns the Alternate setting value of the configuration number
+*              : and the interface number specified by the argument.
+* Arguments    : uint16_t Con_Num       ; Configuration Number
+*              : uint16_t Int_Num       ; Interface Number
+* Return Value : Value used to select this alternate setting(bAlternateSetting).
+*******************************************************************************/
+#if 0
+uint16_t usb0_function_GetAltNum (uint16_t Con_Num, uint16_t Int_Num)
+{
+    uint8_t  * ptr;
+    uint16_t   point;
+    uint16_t   alt_num = 0;
+    uint16_t   length;
+
+    ptr = (uint8_t *)(g_usb0_function_ConfigurationPtr[Con_Num - 1]);
+    point = ptr[0];
+    ptr  += ptr[0];                                 /* InterfaceDescriptor[0] */
+    length  = (uint16_t)(*(g_usb0_function_ConfigurationPtr[Con_Num - 1] + 2));
+    length |= (uint16_t)((uint16_t)(*(g_usb0_function_ConfigurationPtr[Con_Num - 1] + 3)) << 8);
+
+    for (; point < length;)                                 /* Search Descriptor Table size */
+    {
+        switch (ptr[1])                                     /* Descriptor Type ? */
+        {
+            case USB_FUNCTION_DT_INTERFACE:                 /* Interface */
+                if (Int_Num == ptr[2])
+                {
+                    alt_num = (uint16_t)ptr[3];             /* Alternate Number count */
+                }
+                point += ptr[0];
+                ptr += ptr[0];
+            break;
+
+            case USB_FUNCTION_DT_DEVICE:                    /* Device */
+            case USB_FUNCTION_DT_CONFIGURATION:             /* Configuration */
+            case USB_FUNCTION_DT_STRING:                    /* String */
+            case USB_FUNCTION_DT_ENDPOINT:                  /* Endpoint */
+            default:                                        /* Class, Vendor, else */
+                point += ptr[0];
+                ptr   += ptr[0];
+            break;
+        }
+    }
+    return alt_num;
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_CheckRemoteWakeup
+* Description  : Returns the result of the remote wake up function is supported
+*              : or not referring to the configuration descriptor.
+* Arguments    : none
+* Return Value : DEVDRV_USBF_ON     :   Support Remote Wakeup
+*              : DEVDRV_USBF_OFF    :   not Support Remote Wakeup
+*******************************************************************************/
+#if 0
+uint16_t usb0_function_CheckRemoteWakeup (void)
+{
+    uint8_t atr;
+
+    if (g_usb0_function_ConfigNum == 0)
+    {
+        return DEVDRV_USBF_OFF;
+    }
+
+    atr = *(g_usb0_function_ConfigurationPtr[g_usb0_function_ConfigNum - 1] + 7);
+
+    if (atr & USB_FUNCTION_CF_RWUP)
+    {
+        return DEVDRV_USBF_ON;
+    }
+
+    return DEVDRV_USBF_OFF;
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_alt
+* Description  : Initializes the Alternate setting area.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb0_function_clear_alt (void)
+{
+    int i;
+
+    for (i = 0; i < USB_FUNCTION_ALT_NO; ++i)
+    {
+        g_usb0_function_Alternate[i] = 0;                           /* Alternate */
+    }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_pipe_tbl
+* Description  : Initializes pipe definition table.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb0_function_clear_pipe_tbl (void)
+{
+    int pipe;
+
+    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
+    {
+        g_usb0_function_PipeTbl[pipe] = 0;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_ep_table_index
+* Description  : Initializes the end point table index.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb0_function_clear_ep_table_index (void)
+{
+    int ep;
+
+    for (ep = 0; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
+    {
+        g_usb0_function_EPTableIndex[ep] = USB_FUNCTION_EP_ERROR;
+    }
+}
+#endif
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/userdef/usb0_function_dmacdrv.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/userdef/usb0_function_dmacdrv.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,698 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_dmacdrv.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include <stdio.h>
+#include "r_typedefs.h"
+#include "iodefine.h"
+#include "rza_io_regrw.h"
+#include "usb0_function_dmacdrv.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+#define DMAC_INDEFINE   (255)       /* Macro definition when REQD bit is not used */
+
+/* ==== Request setting information for on-chip peripheral module ==== */
+typedef enum dmac_peri_req_reg_type
+{
+    DMAC_REQ_MID,
+    DMAC_REQ_RID,
+    DMAC_REQ_AM,
+    DMAC_REQ_LVL,
+    DMAC_REQ_REQD
+} dmac_peri_req_reg_type_t;
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+/* ==== Prototype declaration ==== */
+
+/* ==== Global variable ==== */
+/* On-chip peripheral module request setting table */
+static const uint8_t usb0_function_dmac_peri_req_init_table[8][5] =
+{
+    /* MID,RID,AM,LVL,REQD */
+    {32, 3, 2, 1, 1},    /* USB_0 channel 0 transmit FIFO empty */
+    {32, 3, 2, 1, 0},    /* USB_0 channel 0 receive FIFO full   */
+    {33, 3, 2, 1, 1},    /* USB_0 channel 1 transmit FIFO empty */
+    {33, 3, 2, 1, 0},    /* USB_0 channel 1 receive FIFO full   */
+    {34, 3, 2, 1, 1},    /* USB_1 channel 0 transmit FIFO empty */
+    {34, 3, 2, 1, 0},    /* USB_1 channel 0 receive FIFO full   */
+    {35, 3, 2, 1, 1},    /* USB_1 channel 1 transmit FIFO empty */
+    {35, 3, 2, 1, 0},    /* USB_1 channel 1 receive FIFO full   */
+};
+
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC1_PeriReqInit
+* Description  : Sets the register mode for DMA mode and the on-chip peripheral
+*              : module request for transfer request for DMAC channel 1.
+*              : Executes DMAC initial setting using the DMA information
+*              : specified by the argument *trans_info and the enabled/disabled
+*              : continuous transfer specified by the argument continuation.
+*              : Registers DMAC channel 1 interrupt handler function and sets
+*              : the interrupt priority level. Then enables transfer completion
+*              : interrupt.
+* Arguments    : dmac_transinfo_t *trans_info   : Setting information to DMAC register
+*              : uint32_t          dmamode      : DMA mode (only for DMAC_MODE_REGISTER)
+*              : uint32_t          continuation : Set continuous transfer to be valid
+*              :                                  after DMA transfer has been completed
+*              :             DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
+*              :             DMAC_SAMPLE_SINGLE       : Do not execute continuous transfer
+*              : uint32_t request_factor        : Factor for on-chip peripheral module request
+*              :             DMAC_REQ_OSTM0TINT       : OSTM_0 compare match
+*              :             DMAC_REQ_OSTM1TINT       : OSTM_1 compare match
+*              :             DMAC_REQ_TGI0A           : MTU2_0 input capture/compare match
+*              :                  :
+*              : uint32_t          req_direction: Setting value of CHCFG_n register REQD bit
+* Return Value : none
+*******************************************************************************/
+void usb0_function_DMAC1_PeriReqInit (const dmac_transinfo_t * trans_info,
+                                      uint32_t dmamode, uint32_t continuation,
+                                      uint32_t request_factor, uint32_t req_direction)
+{
+    /* ==== Register mode ==== */
+    if (DMAC_MODE_REGISTER == dmamode)
+    {
+        /* ==== Next0 register set ==== */
+        DMAC1.N0SA_n = trans_info->src_addr;        /* Start address of transfer source      */
+        DMAC1.N0DA_n = trans_info->dst_addr;        /* Start address of transfer destination */
+        DMAC1.N0TB_n = trans_info->count;           /* Total transfer byte count             */
+
+        /* DAD : Transfer destination address counting direction */
+        /* SAD : Transfer source address counting direction      */
+        /* DDS : Transfer destination transfer size              */
+        /* SDS : Transfer source transfer size                   */
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            trans_info->daddr_dir,
+                            DMAC1_CHCFG_n_DAD_SHIFT,
+                            DMAC1_CHCFG_n_DAD);
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            trans_info->saddr_dir,
+                            DMAC1_CHCFG_n_SAD_SHIFT,
+                            DMAC1_CHCFG_n_SAD);
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            trans_info->dst_size,
+                            DMAC1_CHCFG_n_DDS_SHIFT,
+                            DMAC1_CHCFG_n_DDS);
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            trans_info->src_size,
+                            DMAC1_CHCFG_n_SDS_SHIFT,
+                            DMAC1_CHCFG_n_SDS);
+
+        /* DMS  : Register mode                            */
+        /* RSEL : Select Next0 register set                */
+        /* SBE  : No discharge of buffer data when aborted */
+        /* DEM  : No DMA interrupt mask                    */
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            0,
+                            DMAC1_CHCFG_n_DMS_SHIFT,
+                            DMAC1_CHCFG_n_DMS);
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            0,
+                            DMAC1_CHCFG_n_RSEL_SHIFT,
+                            DMAC1_CHCFG_n_RSEL);
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            0,
+                            DMAC1_CHCFG_n_SBE_SHIFT,
+                            DMAC1_CHCFG_n_SBE);
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            0,
+                            DMAC1_CHCFG_n_DEM_SHIFT,
+                            DMAC1_CHCFG_n_DEM);
+
+        /* ---- Continuous transfer ---- */
+        if (DMAC_SAMPLE_CONTINUATION == continuation)
+        {
+            /* REN : Execute continuous transfer                         */
+            /* RSW : Change register set when DMA transfer is completed. */
+            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                                1,
+                                DMAC1_CHCFG_n_REN_SHIFT,
+                                DMAC1_CHCFG_n_REN);
+            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                                1,
+                                DMAC1_CHCFG_n_RSW_SHIFT,
+                                DMAC1_CHCFG_n_RSW);
+        }
+        /* ---- Single transfer ---- */
+        else
+        {
+            /* REN : Do not execute continuous transfer                         */
+            /* RSW : Do not change register set when DMA transfer is completed. */
+            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                                0,
+                                DMAC1_CHCFG_n_REN_SHIFT,
+                                DMAC1_CHCFG_n_REN);
+            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                                0,
+                                DMAC1_CHCFG_n_RSW_SHIFT,
+                                DMAC1_CHCFG_n_RSW);
+        }
+
+        /* TM  : Single transfer                          */
+        /* SEL : Channel setting                          */
+        /* HIEN, LOEN : On-chip peripheral module request */
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            0,
+                            DMAC1_CHCFG_n_TM_SHIFT,
+                            DMAC1_CHCFG_n_TM);
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            1,
+                            DMAC1_CHCFG_n_SEL_SHIFT,
+                            DMAC1_CHCFG_n_SEL);
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            1,
+                            DMAC1_CHCFG_n_HIEN_SHIFT,
+                            DMAC1_CHCFG_n_HIEN);
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            0,
+                            DMAC1_CHCFG_n_LOEN_SHIFT,
+                            DMAC1_CHCFG_n_LOEN);
+
+        /* ---- Set factor by specified on-chip peripheral module request ---- */
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
+                            DMAC1_CHCFG_n_AM_SHIFT,
+                            DMAC1_CHCFG_n_AM);
+        RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
+                            DMAC1_CHCFG_n_LVL_SHIFT,
+                            DMAC1_CHCFG_n_LVL);
+
+        if (usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
+        {
+            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                                usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
+                                DMAC1_CHCFG_n_REQD_SHIFT,
+                                DMAC1_CHCFG_n_REQD);
+        }
+        else
+        {
+            RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+                                req_direction,
+                                DMAC1_CHCFG_n_REQD_SHIFT,
+                                DMAC1_CHCFG_n_REQD);
+        }
+
+        RZA_IO_RegWrite_32(&DMAC01.DMARS,
+                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
+                            DMAC01_DMARS_CH1_RID_SHIFT,
+                            DMAC01_DMARS_CH1_RID);
+        RZA_IO_RegWrite_32(&DMAC01.DMARS,
+                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
+                            DMAC01_DMARS_CH1_MID_SHIFT,
+                            DMAC01_DMARS_CH1_MID);
+
+        /* PR : Round robin mode */
+        RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
+                            1,
+                            DMAC07_DCTRL_0_7_PR_SHIFT,
+                            DMAC07_DCTRL_0_7_PR);
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC1_Open
+* Description  : Enables DMAC channel 1 transfer.
+* Arguments    : uint32_t req : DMAC request mode
+* Return Value :  0 : Succeeded in enabling DMA transfer
+*              : -1 : Failed to enable DMA transfer (due to DMA operation)
+*******************************************************************************/
+int32_t usb0_function_DMAC1_Open (uint32_t req)
+{
+    int32_t ret;
+    volatile uint8_t dummy;
+
+    /* Transferable? */
+    if ((0 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
+                                DMAC1_CHSTAT_n_EN_SHIFT,
+                                DMAC1_CHSTAT_n_EN)) &&
+        (0 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
+                                DMAC1_CHSTAT_n_TACT_SHIFT,
+                                DMAC1_CHSTAT_n_TACT)))
+    {
+        /* Clear Channel Status Register */
+        RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
+                            1,
+                            DMAC1_CHCTRL_n_SWRST_SHIFT,
+                            DMAC1_CHCTRL_n_SWRST);
+        dummy = RZA_IO_RegRead_32(&DMAC1.CHCTRL_n,
+                                DMAC1_CHCTRL_n_SWRST_SHIFT,
+                                DMAC1_CHCTRL_n_SWRST);
+        /* Enable DMA transfer */
+        RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
+                            1,
+                            DMAC1_CHCTRL_n_SETEN_SHIFT,
+                            DMAC1_CHCTRL_n_SETEN);
+
+        /* ---- Request by software ---- */
+        if (DMAC_REQ_MODE_SOFT == req)
+        {
+            /* DMA transfer Request by software */
+            RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
+                                1,
+                                DMAC1_CHCTRL_n_STG_SHIFT,
+                                DMAC1_CHCTRL_n_STG);
+        }
+
+        ret = 0;
+    }
+    else
+    {
+        ret = -1;
+    }
+
+    return ret;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC1_Close
+* Description  : Aborts DMAC channel 1 transfer. Returns the remaining transfer
+*              : byte count at the time of DMA transfer abort to the argument
+*              : *remain.
+* Arguments    : uint32_t * remain : Remaining transfer byte count when
+*              :                   : DMA transfer is aborted
+* Return Value : none
+*******************************************************************************/
+void usb0_function_DMAC1_Close (uint32_t * remain)
+{
+
+    /* ==== Abort transfer ==== */
+    RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
+                        1,
+                        DMAC1_CHCTRL_n_CLREN_SHIFT,
+                        DMAC1_CHCTRL_n_CLREN);
+
+    while (1 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
+                                DMAC1_CHSTAT_n_TACT_SHIFT,
+                                DMAC1_CHSTAT_n_TACT))
+    {
+        /* Loop until transfer is aborted */
+    }
+
+    while (1 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
+                                DMAC1_CHSTAT_n_EN_SHIFT,
+                                DMAC1_CHSTAT_n_EN))
+    {
+        /* Loop until 0 is set in EN before checking the remaining transfer byte count */
+    }
+    /* ==== Obtain remaining transfer byte count ==== */
+    *remain = DMAC1.CRTB_n;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC1_Load_Set
+* Description  : Sets the transfer source address, transfer destination
+*              : address, and total transfer byte count respectively
+*              : specified by the argument src_addr, dst_addr, and count to
+*              : DMAC channel 1 as DMA transfer information.
+*              : Sets the register set selected by the CHCFG_n register
+*              : RSEL bit from the Next0 or Next1 register set.
+*              : This function should be called when DMA transfer of DMAC
+*              : channel 1 is aboted.
+* Arguments    : uint32_t src_addr : Transfer source address
+*              : uint32_t dst_addr : Transfer destination address
+*              : uint32_t count    : Total transfer byte count
+* Return Value : none
+*******************************************************************************/
+void usb0_function_DMAC1_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
+{
+    uint8_t reg_set;
+
+    /* Obtain register set in use */
+    reg_set = RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
+                                DMAC1_CHSTAT_n_SR_SHIFT,
+                                DMAC1_CHSTAT_n_SR);
+
+    /* ==== Load ==== */
+    if (0 == reg_set)
+    {
+        /* ---- Next0 Register Set ---- */
+        DMAC1.N0SA_n = src_addr;    /* Start address of transfer source      */
+        DMAC1.N0DA_n = dst_addr;    /* Start address of transfer destination */
+        DMAC1.N0TB_n = count;       /* Total transfer byte count             */
+    }
+    else
+    {
+        /* ---- Next1 Register Set ---- */
+        DMAC1.N1SA_n = src_addr;    /* Start address of transfer source      */
+        DMAC1.N1DA_n = dst_addr;    /* Start address of transfer destination */
+        DMAC1.N1TB_n = count;       /* Total transfer byte count             */
+     }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC2_PeriReqInit
+* Description  : Sets the register mode for DMA mode and the on-chip peripheral
+*              : module request for transfer request for DMAC channel 2.
+*              : Executes DMAC initial setting using the DMA information
+*              : specified by the argument *trans_info and the enabled/disabled
+*              : continuous transfer specified by the argument continuation.
+*              : Registers DMAC channel 2 interrupt handler function and sets
+*              : the interrupt priority level. Then enables transfer completion
+*              : interrupt.
+* Arguments    : dmac_transinfo_t * trans_info : Setting information to DMAC
+*              :                               : register
+*              : uint32_t dmamode      : DMA mode (only for DMAC_MODE_REGISTER)
+*              : uint32_t continuation : Set continuous transfer to be valid
+*              :                       : after DMA transfer has been completed
+*              :         DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
+*              :         DMAC_SAMPLE_SINGLE       : Do not execute continuous
+*              :                                  : transfer
+*              : uint32_t request_factor : Factor for on-chip peripheral module
+*              :                         : request
+*              :         DMAC_REQ_OSTM0TINT : OSTM_0 compare match
+*              :         DMAC_REQ_OSTM1TINT : OSTM_1 compare match
+*              :         DMAC_REQ_TGI0A     : MTU2_0 input capture/compare match
+*              :                 :
+*              : uint32_t req_direction : Setting value of CHCFG_n register
+*              :                        : REQD bit
+*******************************************************************************/
+void usb0_function_DMAC2_PeriReqInit (const dmac_transinfo_t * trans_info,
+                                      uint32_t dmamode, uint32_t continuation,
+                                      uint32_t request_factor, uint32_t req_direction)
+{
+    /* ==== Register mode ==== */
+    if (DMAC_MODE_REGISTER == dmamode)
+    {
+        /* ==== Next0 register set ==== */
+        DMAC2.N0SA_n = trans_info->src_addr;        /* Start address of transfer source      */
+        DMAC2.N0DA_n = trans_info->dst_addr;        /* Start address of transfer destination */
+        DMAC2.N0TB_n = trans_info->count;           /* Total transfer byte count             */
+
+        /* DAD : Transfer destination address counting direction */
+        /* SAD : Transfer source address counting direction      */
+        /* DDS : Transfer destination transfer size              */
+        /* SDS : Transfer source transfer size                   */
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            trans_info->daddr_dir,
+                            DMAC2_CHCFG_n_DAD_SHIFT,
+                            DMAC2_CHCFG_n_DAD);
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            trans_info->saddr_dir,
+                            DMAC2_CHCFG_n_SAD_SHIFT,
+                            DMAC2_CHCFG_n_SAD);
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            trans_info->dst_size,
+                            DMAC2_CHCFG_n_DDS_SHIFT,
+                            DMAC2_CHCFG_n_DDS);
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            trans_info->src_size,
+                            DMAC2_CHCFG_n_SDS_SHIFT,
+                            DMAC2_CHCFG_n_SDS);
+
+        /* DMS  : Register mode                            */
+        /* RSEL : Select Next0 register set                */
+        /* SBE  : No discharge of buffer data when aborted */
+        /* DEM  : No DMA interrupt mask                    */
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            0,
+                            DMAC2_CHCFG_n_DMS_SHIFT,
+                            DMAC2_CHCFG_n_DMS);
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            0,
+                            DMAC2_CHCFG_n_RSEL_SHIFT,
+                            DMAC2_CHCFG_n_RSEL);
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            0,
+                            DMAC2_CHCFG_n_SBE_SHIFT,
+                            DMAC2_CHCFG_n_SBE);
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            0,
+                            DMAC2_CHCFG_n_DEM_SHIFT,
+                            DMAC2_CHCFG_n_DEM);
+
+        /* ---- Continuous transfer ---- */
+        if (DMAC_SAMPLE_CONTINUATION == continuation)
+        {
+            /* REN : Execute continuous transfer                         */
+            /* RSW : Change register set when DMA transfer is completed. */
+            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                                1,
+                                DMAC2_CHCFG_n_REN_SHIFT,
+                                DMAC2_CHCFG_n_REN);
+            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                                1,
+                                DMAC2_CHCFG_n_RSW_SHIFT,
+                                DMAC2_CHCFG_n_RSW);
+        }
+        /* ---- Single transfer ---- */
+        else
+        {
+            /* REN : Do not execute continuous transfer                         */
+            /* RSW : Do not change register set when DMA transfer is completed. */
+            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                                0,
+                                DMAC2_CHCFG_n_REN_SHIFT,
+                                DMAC2_CHCFG_n_REN);
+            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                                0,
+                                DMAC2_CHCFG_n_RSW_SHIFT,
+                                DMAC2_CHCFG_n_RSW);
+        }
+
+        /* TM  : Single transfer                          */
+        /* SEL : Channel setting                          */
+        /* HIEN, LOEN : On-chip peripheral module request */
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            0,
+                            DMAC2_CHCFG_n_TM_SHIFT,
+                            DMAC2_CHCFG_n_TM);
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            2,
+                            DMAC2_CHCFG_n_SEL_SHIFT,
+                            DMAC2_CHCFG_n_SEL);
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            1,
+                            DMAC2_CHCFG_n_HIEN_SHIFT,
+                            DMAC2_CHCFG_n_HIEN);
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            0,
+                            DMAC2_CHCFG_n_LOEN_SHIFT,
+                            DMAC2_CHCFG_n_LOEN);
+
+        /* ---- Set factor by specified on-chip peripheral module request ---- */
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
+                            DMAC2_CHCFG_n_AM_SHIFT,
+                            DMAC2_CHCFG_n_AM);
+        RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
+                            DMAC2_CHCFG_n_LVL_SHIFT,
+                            DMAC2_CHCFG_n_LVL);
+        if (usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
+        {
+            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                                usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
+                                DMAC2_CHCFG_n_REQD_SHIFT,
+                                DMAC2_CHCFG_n_REQD);
+        }
+        else
+        {
+            RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+                                req_direction,
+                                DMAC2_CHCFG_n_REQD_SHIFT,
+                                DMAC2_CHCFG_n_REQD);
+        }
+        RZA_IO_RegWrite_32(&DMAC23.DMARS,
+                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
+                            DMAC23_DMARS_CH2_RID_SHIFT,
+                            DMAC23_DMARS_CH2_RID);
+        RZA_IO_RegWrite_32(&DMAC23.DMARS,
+                            usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
+                            DMAC23_DMARS_CH2_MID_SHIFT,
+                            DMAC23_DMARS_CH2_MID);
+
+        /* PR : Round robin mode */
+        RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
+                            1,
+                            DMAC07_DCTRL_0_7_PR_SHIFT,
+                            DMAC07_DCTRL_0_7_PR);
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC2_Open
+* Description  : Enables DMAC channel 2 transfer.
+* Arguments    : uint32_t req : DMAC request mode
+* Return Value :  0 : Succeeded in enabling DMA transfer
+*              : -1 : Failed to enable DMA transfer (due to DMA operation)
+*******************************************************************************/
+int32_t usb0_function_DMAC2_Open (uint32_t req)
+{
+    int32_t ret;
+    volatile uint8_t dummy;
+
+    /* Transferable? */
+    if ((0 == RZA_IO_RegRead_32(&DMAC.CHSTAT_2,
+                                DMAC2_CHSTAT_n_EN_SHIFT,
+                                DMAC2_CHSTAT_n_EN)) &&
+        (0 == RZA_IO_RegRead_32(&DMAC.CHSTAT_2,
+                                DMAC2_CHSTAT_n_TACT_SHIFT,
+                                DMAC2_CHSTAT_n_TACT)))
+    {
+        /* Clear Channel Status Register */
+        RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
+                            1,
+                            DMAC2_CHCTRL_n_SWRST_SHIFT,
+                            DMAC2_CHCTRL_n_SWRST);
+        dummy = RZA_IO_RegRead_32(&DMAC2.CHCTRL_n,
+                                DMAC2_CHCTRL_n_SWRST_SHIFT,
+                                DMAC2_CHCTRL_n_SWRST);
+        /* Enable DMA transfer */
+        RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
+                            1,
+                            DMAC2_CHCTRL_n_SETEN_SHIFT,
+                            DMAC2_CHCTRL_n_SETEN);
+
+        /* ---- Request by software ---- */
+        if (DMAC_REQ_MODE_SOFT == req)
+        {
+            /* DMA transfer Request by software */
+            RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
+                                1,
+                                DMAC2_CHCTRL_n_STG_SHIFT,
+                                DMAC2_CHCTRL_n_STG);
+        }
+
+        ret = 0;
+    }
+    else
+    {
+        ret = -1;
+    }
+
+    return ret;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC2_Close
+* Description  : Aborts DMAC channel 2 transfer. Returns the remaining transfer
+*              : byte count at the time of DMA transfer abort to the argument
+*              : *remain.
+* Arguments    : uint32_t * remain : Remaining transfer byte count when
+*              :                   : DMA transfer is aborted
+* Return Value : none
+*******************************************************************************/
+void usb0_function_DMAC2_Close (uint32_t * remain)
+{
+
+    /* ==== Abort transfer ==== */
+    RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
+                        1,
+                        DMAC2_CHCTRL_n_CLREN_SHIFT,
+                        DMAC2_CHCTRL_n_CLREN);
+
+    while (1 == RZA_IO_RegRead_32(&DMAC2.CHSTAT_n,
+                                DMAC2_CHSTAT_n_TACT_SHIFT,
+                                DMAC2_CHSTAT_n_TACT))
+    {
+        /* Loop until transfer is aborted */
+    }
+
+    while (1 == RZA_IO_RegRead_32(&DMAC2.CHSTAT_n,
+                                DMAC2_CHSTAT_n_EN_SHIFT,
+                                DMAC2_CHSTAT_n_EN))
+    {
+        /* Loop until 0 is set in EN before checking the remaining transfer byte count */
+    }
+    /* ==== Obtain remaining transfer byte count ==== */
+    *remain = DMAC2.CRTB_n;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC2_Load_Set
+* Description  : Sets the transfer source address, transfer destination
+*              : address, and total transfer byte count respectively
+*              : specified by the argument src_addr, dst_addr, and count to
+*              : DMAC channel 2 as DMA transfer information.
+*              : Sets the register set selected by the CHCFG_n register
+*              : RSEL bit from the Next0 or Next1 register set.
+*              : This function should be called when DMA transfer of DMAC
+*              : channel 2 is aboted.
+* Arguments    : uint32_t src_addr : Transfer source address
+*              : uint32_t dst_addr : Transfer destination address
+*              : uint32_t count    : Total transfer byte count
+* Return Value : none
+*******************************************************************************/
+void usb0_function_DMAC2_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
+{
+    uint8_t reg_set;
+
+    /* Obtain register set in use */
+    reg_set = RZA_IO_RegRead_32(&DMAC2.CHSTAT_n,
+                                DMAC2_CHSTAT_n_SR_SHIFT,
+                                DMAC2_CHSTAT_n_SR);
+
+    /* ==== Load ==== */
+    if (0 == reg_set)
+    {
+        /* ---- Next0 Register Set ---- */
+        DMAC2.N0SA_n = src_addr;     /* Start address of transfer source      */
+        DMAC2.N0DA_n = dst_addr;     /* Start address of transfer destination */
+        DMAC2.N0TB_n = count;        /* Total transfer byte count             */
+    }
+    else
+    {
+        /* ---- Next1 Register Set ---- */
+        DMAC2.N1SA_n = src_addr;     /* Start address of transfer source      */
+        DMAC2.N1DA_n = dst_addr;     /* Start address of transfer destination */
+        DMAC2.N1TB_n = count;        /* Total transfer byte count             */
+     }
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/userdef/usb0_function_userdef.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb0/src/userdef/usb0_function_userdef.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,762 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_userdef.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include <stdio.h>
+#include "r_typedefs.h"
+#include "iodefine.h"
+#include "devdrv_usb_function_api.h"
+#include "usb0_function_dmacdrv.h"  /* common DMAC driver for USB */
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+#define DUMMY_ACCESS OSTM0CNT
+
+/* #define CACHE_WRITEBACK */
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+extern int32_t io_cwb(unsigned long start, unsigned long end);
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+static void usb0_function_enable_dmac0(uint32_t src, uint32_t dst, uint32_t count,
+                                       uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
+static void usb0_function_enable_dmac1(uint32_t src, uint32_t dst, uint32_t count,
+                                       uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
+static void Userdef_USB_usb0_function_delay_10us_2(void);
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_d0fifo_dmaintid
+* Description  : get D0FIFO DMA Interrupt ID
+* Arguments    : none
+* Return Value : D0FIFO DMA Interrupt ID
+*******************************************************************************/
+IRQn_Type Userdef_USB_usb0_function_d0fifo_dmaintid (void)
+{
+#if 0
+    return DMAINT1_IRQn;
+#else
+    return 0xFFFF;
+#endif
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_d1fifo_dmaintid
+* Description  : get D1FIFO DMA Interrupt ID
+* Arguments    : none
+* Return Value : D1FIFO DMA Interrupt ID
+*******************************************************************************/
+IRQn_Type Userdef_USB_usb0_function_d1fifo_dmaintid (void)
+{
+#if 0
+    return DMAINT1_IRQn;
+#else
+    return 0xFFFF;
+#endif
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_attach
+* Description  : Wait for the software of 1ms.
+*              : Alter this function according to the user's system.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb0_function_attach (void)
+{
+    printf("\n");
+    printf("channel 0 attach device\n");
+    printf("\n");
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_detach
+* Description  : Wait for the software of 1ms.
+*              : Alter this function according to the user's system.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb0_function_detach (void)
+{
+    printf("\n");
+    printf("channel 0 detach device\n");
+    printf("\n");
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_delay_1ms
+* Description  : Wait for the software of 1ms.
+*              : Alter this function according to the user's system.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb0_function_delay_1ms (void)
+{
+    volatile int i;
+    volatile unsigned long tmp;
+
+    /*
+     * Wait 1ms (Please change for your MCU).
+     */
+    for (i = 0; i < 1440; ++i)
+    {
+        tmp = DUMMY_ACCESS;
+    }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_delay_xms
+* Description  : Wait for the software in the period of time specified by the
+*              : argument.
+*              : Alter this function according to the user's system.
+* Arguments    : uint32_t msec ; Wait Time (msec)
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb0_function_delay_xms (uint32_t msec)
+{
+    volatile unsigned short i;
+
+    for (i = 0; i < msec; ++i)
+    {
+        Userdef_USB_usb0_function_delay_1ms();
+    }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_delay_10us
+* Description  : Waits for software for the period specified by the argument.
+*              : Alter this function according to the user's system.
+* Arguments    : uint32_t usec ; Wait Time(x 10usec)
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb0_function_delay_10us (uint32_t usec)
+{
+    volatile int i;
+
+    /* Wait 10us (Please change for your MCU) */
+    for (i = 0; i < usec; ++i)
+    {
+        Userdef_USB_usb0_function_delay_10us_2();
+    }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_delay_10us_2
+* Description  : Waits for software for the period specified by the argument.
+*              : Alter this function according to the user's system.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+static void Userdef_USB_usb0_function_delay_10us_2 (void)
+{
+    volatile int i;
+    volatile unsigned long tmp;
+
+    /* Wait 1us (Please change for your MCU) */
+    for (i = 0; i < 14; ++i)
+    {
+        tmp = DUMMY_ACCESS;
+    }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_delay_500ns
+* Description  : Wait for software for 500ns.
+*              : Alter this function according to the user's system.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb0_function_delay_500ns (void)
+{
+    volatile int i;
+    volatile unsigned long tmp;
+
+    /* Wait 500ns (Please change for your MCU) */
+    /* Wait 500ns I clock 266MHz */
+    tmp = DUMMY_ACCESS;
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_start_dma
+* Description  : Enables DMA transfer on the information specified by the argument.
+*              : Set DMAC register by this function to enable DMA transfer.
+*              : After executing this function, USB module is set to start DMA
+*              : transfer. DMA transfer should not wait for DMA transfer complete.
+* Arguments    : USB_FUNCTION_DMA_t *dma   : DMA parameter
+*              :  typedef struct{
+*              :      uint32_t fifo;    FIFO for using
+*              :      uint32_t buffer;  Start address of transfer source/destination
+*              :      uint32_t bytes;   Transfer size(Byte)
+*              :      uint32_t dir;     Transfer direction(0:Buffer->FIFO, 1:FIFO->Buffer)
+*              :      uint32_t size;    DMA transfer size
+*              :   } USB_FUNCTION_DMA_t;
+*              : uint16_t dfacc ; 0 : cycle steal mode
+*              :                  1 : 16byte continuous mode
+*              :                  2 : 32byte continuous mode
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb0_function_start_dma (USB_FUNCTION_DMA_t * dma, uint16_t dfacc)
+{
+    uint32_t trncount;
+    uint32_t src;
+    uint32_t dst;
+    uint32_t size;
+    uint32_t dir;
+#ifdef CACHE_WRITEBACK
+    uint32_t ptr;
+#endif
+
+    trncount = dma->bytes;
+    dir      = dma->dir;
+
+    if (dir == USB_FUNCTION_FIFO2BUF)
+    {
+        /* DxFIFO determination */
+        dst = dma->buffer;
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+        if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+        {
+            src = (uint32_t)(&USB200.D0FIFO.UINT32);
+        }
+        else
+        {
+            src = (uint32_t)(&USB200.D1FIFO.UINT32);
+        }
+        size = dma->size;
+
+        if (size == 0)
+        {
+            src += 3;       /* byte access  */
+        }
+        else if (size == 1)
+        {
+            src += 2;       /* short access */
+        }
+        else
+        {
+            /* Do Nothing */
+        }
+#else
+        size = dma->size;
+
+        if (size == 2)
+        {
+            /* 32bit access */
+            if (dfacc == 2)
+            {
+                /* 32byte access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    src = (uint32_t)(&USB200.D0FIFOB0);
+                }
+                else
+                {
+                    src = (uint32_t)(&USB200.D1FIFOB0);
+                }
+            }
+            else if (dfacc == 1)
+            {
+                /* 16byte access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    src = (uint32_t)(&USB200.D0FIFOB0);
+                }
+                else
+                {
+                    src = (uint32_t)(&USB200.D1FIFOB0);
+                }
+            }
+            else
+            {
+                /* normal access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    src = (uint32_t)(&USB200.D0FIFO.UINT32);
+                }
+                else
+                {
+                    src = (uint32_t)(&USB200.D1FIFO.UINT32);
+                }
+            }
+        }
+        else if (size == 1)
+        {
+            /* 16bit access */
+            dfacc = 0;      /* force normal access */
+
+            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+            {
+                src = (uint32_t)(&USB200.D0FIFO.UINT32);
+            }
+            else
+            {
+                src = (uint32_t)(&USB200.D1FIFO.UINT32);
+            }
+            src += 2;       /* short access */
+        }
+        else
+        {
+            /* 8bit access */
+            dfacc = 0;      /* force normal access */
+
+            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+            {
+                src = (uint32_t)(&USB200.D0FIFO.UINT32);
+            }
+            else
+            {
+                src = (uint32_t)(&USB200.D1FIFO.UINT32);
+            }
+            src += 3;       /* byte access */
+        }
+#endif
+    }
+    else
+    {
+        /* DxFIFO determination */
+        src = dma->buffer;
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+        if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+        {
+            dst = (uint32_t)(&USB200.D0FIFO.UINT32);
+        }
+        else
+        {
+            dst = (uint32_t)(&USB200.D1FIFO.UINT32);
+        }
+        size = dma->size;
+
+        if (size == 0)
+        {
+            dst += 3;       /* byte access  */
+        }
+        else if (size == 1)
+        {
+            dst += 2;       /* short access */
+        }
+        else
+        {
+            /* Do Nothing */
+        }
+#else
+        size = dma->size;
+
+        if (size == 2)
+        {
+            /* 32bit access */
+            if (dfacc == 2)
+            {
+                /* 32byte access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    dst = (uint32_t)(&USB200.D0FIFOB0);
+                }
+                else
+                {
+                    dst = (uint32_t)(&USB200.D1FIFOB0);
+                }
+            }
+            else if (dfacc == 1)
+            {
+                /* 16byte access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    dst = (uint32_t)(&USB200.D0FIFOB0);
+                }
+                else
+                {
+                    dst = (uint32_t)(&USB200.D1FIFOB0);
+                }
+            }
+            else
+            {
+                /* normal access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    dst = (uint32_t)(&USB200.D0FIFO.UINT32);
+                }
+                else
+                {
+                    dst = (uint32_t)(&USB200.D1FIFO.UINT32);
+                }
+            }
+        }
+        else if (size == 1)
+        {
+            /* 16bit access */
+            dfacc = 0;      /* force normal access */
+            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+            {
+                dst = (uint32_t)(&USB200.D0FIFO.UINT32);
+            }
+            else
+            {
+                dst = (uint32_t)(&USB200.D1FIFO.UINT32);
+            }
+            dst += 2;       /* short access */
+        }
+        else
+        {
+            /* 8bit access */
+            dfacc = 0;      /* force normal access */
+
+            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+            {
+                dst = (uint32_t)(&USB200.D0FIFO.UINT32);
+            }
+            else
+            {
+                dst = (uint32_t)(&USB200.D1FIFO.UINT32);
+            }
+            dst += 3;       /* byte access  */
+        }
+#endif
+    }
+
+#ifdef CACHE_WRITEBACK
+    ptr = (uint32_t)dma->buffer;
+
+    if ((ptr & 0x20000000ul) == 0)
+    {
+        io_cwb((uint32_t)ptr, (uint32_t)(ptr) + trncount);
+    }
+#endif
+
+    if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+    {
+        usb0_function_enable_dmac0(src, dst, trncount, size, dir, dma->fifo, dfacc);
+    }
+    else
+    {
+        usb0_function_enable_dmac1(src, dst, trncount, size, dir, dma->fifo, dfacc);
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_enable_dmac0
+* Description  : Enables DMA transfer on the information specified by the argument.
+* Arguments    : uint32_t src   : src address
+*              : uint32_t dst   : dst address
+*              : uint32_t count : transfer byte
+*              : uint32_t size  : transfer size
+*              : uint32_t dir   : direction
+*              : uint32_t fifo  : FIFO(D0FIFO or D1FIFO)
+*              : uint16_t dfacc : 0 : normal access
+*              :                : 1 : 16byte access
+*              :                : 2 : 32byte access
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_enable_dmac0 (uint32_t src, uint32_t dst, uint32_t count,
+                                        uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
+{
+    dmac_transinfo_t trans_info;
+    uint32_t         request_factor = 0;
+    int32_t          ret;
+
+    /* ==== Variable setting for DMAC initialization ==== */
+    trans_info.src_addr = (uint32_t)src;                /* Start address of transfer source      */
+    trans_info.dst_addr = (uint32_t)dst;                /* Start address of transfer destination */
+    trans_info.count    = (uint32_t)count;              /* Total byte count to be transferred    */
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+    if (size == 0)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_8;        /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_8;        /* Transfer destination transfer size */
+    }
+    else if (size == 1)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_16;       /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_16;       /* Transfer destination transfer size */
+    }
+    else if (size == 2)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_32;       /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_32;       /* Transfer destination transfer size */
+    }
+    else
+    {
+        printf("size error!!\n");
+    }
+#else
+    if (dfacc == 2)
+    {
+        /* 32byte access */
+        trans_info.src_size = DMAC_TRANS_SIZE_256;      /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_256;      /* Transfer destination transfer size */
+    }
+    else if (dfacc == 1)
+    {
+        /* 16byte access */
+        trans_info.src_size = DMAC_TRANS_SIZE_128;      /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_128;      /* Transfer destination transfer size */
+    }
+    else
+    {
+        /* normal access */
+        if (size == 0)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_8;    /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_8;    /* Transfer destination transfer size */
+        }
+        else if (size == 1)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_16;   /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_16;   /* Transfer destination transfer size */
+        }
+        else if (size == 2)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_32;   /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_32;   /* Transfer destination transfer size */
+        }
+        else
+        {
+            printf("size error!!\n");
+        }
+    }
+#endif
+
+    if (dir == USB_FUNCTION_FIFO2BUF)
+    {
+        request_factor =DMAC_REQ_USB0_DMA0_RX;          /* USB_0 channel 0 receive FIFO full               */
+        trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer source address      */
+        trans_info.daddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer destination address */
+    }
+    else if (dir == USB_FUNCTION_BUF2FIFO)
+    {
+        request_factor =DMAC_REQ_USB0_DMA0_TX;          /* USB_0 channel 0 receive FIFO empty              */
+        trans_info.saddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer source address      */
+        trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer destination address */
+    }
+    else
+    {
+        /* Do Nothing */
+    }
+
+    /* ==== DMAC initialization ==== */
+    usb0_function_DMAC1_PeriReqInit((const dmac_transinfo_t *)&trans_info,
+                                    DMAC_MODE_REGISTER,
+                                    DMAC_SAMPLE_SINGLE,
+                                    request_factor,
+                                    0);     /* Don't care DMAC_REQ_REQD is setting in
+                                            usb0_function_DMAC1_PeriReqInit() */
+
+    /* ==== DMAC startup ==== */
+    ret = usb0_function_DMAC1_Open(DMAC_REQ_MODE_PERI);
+    if (ret != 0)
+    {
+        printf("DMAC1 Open error!!\n");
+    }
+
+    return;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_enable_dmac1
+* Description  : Enables DMA transfer on the information specified by the argument.
+* Arguments    : uint32_t src   : src address
+*              : uint32_t dst   : dst address
+*              : uint32_t count : transfer byte
+*              : uint32_t size  : transfer size
+*              : uint32_t dir   : direction
+*              : uint32_t fifo  : FIFO(D0FIFO or D1FIFO)
+*              : uint16_t dfacc : 0 : normal access
+*              :                : 1 : 16byte access
+*              :                : 2 : 32byte access
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_enable_dmac1 (uint32_t src, uint32_t dst, uint32_t count,
+                                        uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
+{
+    dmac_transinfo_t trans_info;
+    uint32_t         request_factor = 0;
+    int32_t          ret;
+
+    /* ==== Variable setting for DMAC initialization ==== */
+    trans_info.src_addr = (uint32_t)src;                /* Start address of transfer source      */
+    trans_info.dst_addr = (uint32_t)dst;                /* Start address of transfer destination */
+    trans_info.count    = (uint32_t)count;              /* Total byte count to be transferred    */
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+    if (size == 0)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_8;        /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_8;        /* Transfer destination transfer size */
+    }
+    else if (size == 1)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_16;       /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_16;       /* Transfer destination transfer size */
+    }
+    else if (size == 2)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_32;       /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_32;       /* Transfer destination transfer size */
+    }
+    else
+    {
+        printf("size error!!\n");
+    }
+#else
+    if (dfacc == 2)
+    {
+        /* 32byte access */
+        trans_info.src_size = DMAC_TRANS_SIZE_256;      /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_256;      /* Transfer destination transfer size */
+    }
+    else if (dfacc == 1)
+    {
+        /* 16byte access */
+        trans_info.src_size = DMAC_TRANS_SIZE_128;      /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_128;      /* Transfer destination transfer size */
+    }
+    else
+    {
+        /* normal access */
+        if (size == 0)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_8;    /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_8;    /* Transfer destination transfer size */
+        }
+        else if (size == 1)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_16;   /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_16;   /* Transfer destination transfer size */
+        }
+        else if (size == 2)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_32;   /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_32;   /* Transfer destination transfer size */
+        }
+        else
+        {
+            printf("size error!!\n");
+        }
+    }
+#endif
+
+    if (dir == USB_FUNCTION_FIFO2BUF)
+    {
+        request_factor =DMAC_REQ_USB0_DMA1_RX;          /* USB_0 channel 0 receive FIFO full               */
+        trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer source address      */
+        trans_info.daddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer destination address */
+    }
+    else if (dir == USB_FUNCTION_BUF2FIFO)
+    {
+        request_factor =DMAC_REQ_USB0_DMA1_TX;          /* USB_0 channel 0 receive FIFO empty              */
+        trans_info.saddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer source address      */
+        trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer destination address */
+    }
+    else
+    {
+        /* Do Nothing */
+    }
+
+    /* ==== DMAC initialization ==== */
+    usb0_function_DMAC2_PeriReqInit((const dmac_transinfo_t *)&trans_info,
+                                    DMAC_MODE_REGISTER,
+                                    DMAC_SAMPLE_SINGLE,
+                                    request_factor,
+                                    0);     /* Don't care DMAC_REQ_REQD is setting in
+                                            usb0_function_DMAC1_PeriReqInit() */
+
+    /* ==== DMAC startup ==== */
+    ret = usb0_function_DMAC2_Open(DMAC_REQ_MODE_PERI);
+    if (ret != 0)
+    {
+        printf("DMAC2 Open error!!\n");
+    }
+
+    return;
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_stop_dma0
+* Description  : Disables DMA transfer.
+*              : This function should be executed to DMAC executed at the time
+*              : of specification of D0_FIF0_DMA in dma->fifo.
+* Arguments    : none
+* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
+*              : regarding to the bus width.
+*******************************************************************************/
+uint32_t Userdef_USB_usb0_function_stop_dma0 (void)
+{
+    uint32_t remain;
+
+    /* ==== DMAC release ==== */
+    usb0_function_DMAC1_Close(&remain);
+
+    return remain;
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_stop_dma1
+* Description  : Disables DMA transfer.
+*              : This function should be executed to DMAC executed at the time
+*              : of specification of D1_FIF0_DMA in dma->fifo.
+* Arguments    : none
+* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
+*              : regarding to the bus width.
+*******************************************************************************/
+uint32_t Userdef_USB_usb0_function_stop_dma1 (void)
+{
+    uint32_t remain;
+
+    /* ==== DMAC release ==== */
+    usb0_function_DMAC2_Close(&remain);
+
+    return remain;
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/inc/usb1_function.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/inc/usb1_function.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,171 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description  : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB1_FUNCTION_H
+#define USB1_FUNCTION_H
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "devdrv_usb_function_api.h"
+#include "usb_function.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+extern const uint16_t       g_usb1_function_bit_set[];
+extern uint32_t             g_usb1_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint8_t              *g_usb1_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+extern uint16_t             g_usb1_function_PipeIgnore[];
+extern uint16_t             g_usb1_function_PipeTbl[];
+extern uint16_t             g_usb1_function_pipe_status[];
+extern uint32_t             g_usb1_function_PipeDataSize[];
+
+extern USB_FUNCTION_DMA_t   g_usb1_function_DmaInfo[];
+extern uint16_t             g_usb1_function_DmaPipe[];
+extern uint16_t             g_usb1_function_DmaBval[];
+extern uint16_t             g_usb1_function_DmaStatus[];
+
+extern uint16_t             g_usb1_function_CtrZeroLengthFlag;
+
+extern uint16_t             g_usb1_function_ConfigNum;
+extern uint16_t             g_usb1_function_Alternate[USB_FUNCTION_ALT_NO];
+extern uint16_t             g_usb1_function_RemoteWakeupFlag;
+extern uint16_t             g_usb1_function_TestModeFlag;
+extern uint16_t             g_usb1_function_TestModeSelectors;
+
+extern uint16_t             g_usb1_function_ReqType;
+extern uint16_t             g_usb1_function_ReqTypeType;
+extern uint16_t             g_usb1_function_ReqTypeRecip;
+extern uint16_t             g_usb1_function_ReqRequest;
+extern uint16_t             g_usb1_function_ReqValue;
+extern uint16_t             g_usb1_function_ReqIndex;
+extern uint16_t             g_usb1_function_ReqLength;
+
+extern uint16_t             g_usb1_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
+
+extern uint16_t             g_usb1_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint16_t             g_usb1_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint16_t             g_usb1_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint16_t             g_usb1_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+/* ==== common ==== */
+void     usb1_function_dma_stop_d0(uint16_t pipe, uint32_t remain);
+void     usb1_function_dma_stop_d1(uint16_t pipe, uint32_t remain);
+uint16_t usb1_function_is_hispeed(void);
+uint16_t usb1_function_is_hispeed_enable(void);
+uint16_t usb1_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+uint16_t usb1_function_write_buffer(uint16_t pipe);
+uint16_t usb1_function_write_buffer_c(uint16_t pipe);
+uint16_t usb1_function_write_buffer_d0(uint16_t pipe);
+uint16_t usb1_function_write_buffer_d1(uint16_t pipe);
+void     usb1_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+uint16_t usb1_function_read_buffer(uint16_t pipe);
+uint16_t usb1_function_read_buffer_c(uint16_t pipe);
+uint16_t usb1_function_read_buffer_d0(uint16_t pipe);
+uint16_t usb1_function_read_buffer_d1(uint16_t pipe);
+uint16_t usb1_function_change_fifo_port(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
+void     usb1_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
+void     usb1_function_set_curpipe2(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc);
+uint16_t usb1_function_get_mbw(uint32_t trncount, uint32_t dtptr);
+uint16_t usb1_function_read_dma(uint16_t pipe);
+void     usb1_function_brdy_int(uint16_t status, uint16_t int_enb);
+void     usb1_function_nrdy_int(uint16_t status, uint16_t int_enb);
+void     usb1_function_bemp_int(uint16_t status, uint16_t int_enb);
+void     usb1_function_setting_interrupt(uint8_t level);
+void     usb1_function_reset_module(uint16_t clockmode);
+uint16_t usb1_function_get_buf_size(uint16_t pipe);
+uint16_t usb1_function_get_mxps(uint16_t pipe);
+void     usb1_function_clear_brdy_sts(uint16_t pipe);
+void     usb1_function_clear_bemp_sts(uint16_t pipe);
+void     usb1_function_clear_nrdy_sts(uint16_t pipe);
+void     usb1_function_set_pid_buf(uint16_t pipe);
+void     usb1_function_set_pid_nak(uint16_t pipe);
+void     usb1_function_set_pid_stall(uint16_t pipe);
+void     usb1_function_clear_pid_stall(uint16_t pipe);
+uint16_t usb1_function_get_pid(uint16_t pipe);
+void     usb1_function_set_sqclr(uint16_t pipe);
+void     usb1_function_set_sqset(uint16_t pipe);
+void     usb1_function_set_csclr(uint16_t pipe);
+void     usb1_function_aclrm(uint16_t pipe);
+void     usb1_function_set_aclrm(uint16_t pipe);
+void     usb1_function_clr_aclrm(uint16_t pipe);
+uint16_t usb1_function_get_sqmon(uint16_t pipe);
+uint16_t usb1_function_get_inbuf(uint16_t pipe);
+
+/* ==== function ==== */
+void     usb1_function_init_status(void);
+void     usb1_function_InitModule(uint16_t mode);
+uint16_t usb1_function_CheckVBUStaus(void);
+void     usb1_function_USB_FUNCTION_Attach(void);
+void     usb1_function_USB_FUNCTION_Detach(void);
+void     usb1_function_USB_FUNCTION_BusReset(void);
+void     usb1_function_USB_FUNCTION_Resume(void);
+void     usb1_function_USB_FUNCTION_Suspend(void);
+void     usb1_function_USB_FUNCTION_TestMode(void);
+void     usb1_function_ResetDCP(void);
+void     usb1_function_ResetEP(uint16_t num);
+uint16_t usb1_function_EpToPipe(uint16_t ep);
+void     usb1_function_InitEPTable(uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num);
+uint16_t usb1_function_GetConfigNum(void);
+uint16_t usb1_function_GetAltNum(uint16_t Con_Num, uint16_t Int_Num);
+uint16_t usb1_function_CheckRemoteWakeup(void);
+void     usb1_function_clear_alt(void);
+void     usb1_function_clear_pipe_tbl(void);
+void     usb1_function_clear_ep_table_index(void);
+uint16_t usb1_function_GetInterfaceNum(uint16_t num);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* USB1_FUNCTION_H */
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/inc/usb1_function_api.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/inc/usb1_function_api.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,104 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_api.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description  : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB1_FUNCTION_API_H
+#define USB1_FUNCTION_API_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Variable Externs
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+void     usb1_api_function_init(uint8_t int_level, uint16_t mode, uint16_t clockmode);
+uint16_t usb1_api_function_IsConfigured(void);
+uint16_t usb1_function_GetDeviceState(void);
+uint16_t usb1_api_function_CtrlReadStart(uint32_t size, uint8_t *data);
+void     usb1_api_function_CtrlWriteStart(uint32_t size, uint8_t *data);
+uint16_t usb1_api_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+uint16_t usb1_api_function_check_pipe_status(uint16_t pipe, uint32_t *size);
+void     usb1_api_function_clear_pipe_status(uint16_t pipe);
+void     usb1_api_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+void     usb1_api_function_set_pid_buf(uint16_t pipe);
+void     usb1_api_function_set_pid_nak(uint16_t pipe);
+void     usb1_api_function_set_pid_stall(uint16_t pipe);
+void     usb1_api_function_clear_pid_stall(uint16_t pipe);
+uint16_t usb1_api_function_get_pid(uint16_t pipe);
+int32_t  usb1_api_function_check_stall(uint16_t pipe);
+void     usb1_api_function_set_sqclr(uint16_t pipe);
+void     usb1_api_function_set_sqset(uint16_t pipe);
+void     usb1_api_function_set_csclr(uint16_t pipe);
+void     usb1_api_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
+void     usb1_api_function_clear_brdy_sts(uint16_t pipe);
+void     usb1_api_function_clear_bemp_sts(uint16_t pipe);
+void     usb1_api_function_clear_nrdy_sts(uint16_t pipe);
+
+void     usb1_function_ClearFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_SetFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_SetAddress(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_SetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_SetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_SetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_SynchFrame(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_GetStatus(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_GetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_GetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_GetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Resrv_0(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Resrv_123(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Resrv_4(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void     usb1_function_Resrv_5(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* USB1_FUNCTION_API_H */
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/inc/usb1_function_dmacdrv.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/inc/usb1_function_dmacdrv.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,142 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_dmacdrv.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description  : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB1_FUNCTION_DMACDRV_H
+#define USB1_FUNCTION_DMACDRV_H
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+typedef struct dmac_transinfo
+{
+    uint32_t src_addr;      /* Transfer source address                */
+    uint32_t dst_addr;      /* Transfer destination address           */
+    uint32_t count;         /* Transfer byte count                    */
+    uint32_t src_size;      /* Transfer source data size              */
+    uint32_t dst_size;      /* Transfer destination data size         */
+    uint32_t saddr_dir;     /* Transfer source address direction      */
+    uint32_t daddr_dir;     /* Transfer destination address direction */
+} dmac_transinfo_t;
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+/* ==== Transfer specification of the sample program ==== */
+#define DMAC_SAMPLE_SINGLE          (0)     /* Single transfer                   */
+#define DMAC_SAMPLE_CONTINUATION    (1)     /* Continuous transfer (use REN bit) */
+
+/* ==== DMA modes ==== */
+#define DMAC_MODE_REGISTER          (0)     /* Register mode */
+#define DMAC_MODE_LINK              (1)     /* Link mode     */
+
+/* ==== Transfer requests ==== */
+#define DMAC_REQ_MODE_EXT           (0)     /* External request                   */
+#define DMAC_REQ_MODE_PERI          (1)     /* On-chip peripheral module request  */
+#define DMAC_REQ_MODE_SOFT          (2)     /* Auto-request (request by software) */
+
+/* ==== DMAC transfer sizes ==== */
+#define DMAC_TRANS_SIZE_8           (0)     /* 8 bits    */
+#define DMAC_TRANS_SIZE_16          (1)     /* 16 bits   */
+#define DMAC_TRANS_SIZE_32          (2)     /* 32 bits   */
+#define DMAC_TRANS_SIZE_64          (3)     /* 64 bits   */
+#define DMAC_TRANS_SIZE_128         (4)     /* 128 bits  */
+#define DMAC_TRANS_SIZE_256         (5)     /* 256 bits  */
+#define DMAC_TRANS_SIZE_512         (6)     /* 512 bits  */
+#define DMAC_TRANS_SIZE_1024        (7)     /* 1024 bits */
+
+/* ==== Address increment for transferring ==== */
+#define DMAC_TRANS_ADR_NO_INC       (1)     /* Not increment */
+#define DMAC_TRANS_ADR_INC          (0)     /* Increment     */
+
+/* ==== Method for detecting DMA request ==== */
+#define DMAC_REQ_DET_FALL           (0)     /* Falling edge detection */
+#define DMAC_REQ_DET_RISE           (1)     /* Rising edge detection  */
+#define DMAC_REQ_DET_LOW            (2)     /* Low level detection    */
+#define DMAC_REQ_DET_HIGH           (3)     /* High level detection   */
+
+/* ==== Request Direction ==== */
+#define DMAC_REQ_DIR_SRC            (0)     /* DMAREQ is the source/ DMAACK is active when reading      */
+#define DMAC_REQ_DIR_DST            (1)     /* DMAREQ is the destination/ DMAACK is active when writing */
+
+/* ==== Descriptors ==== */
+#define DMAC_DESC_HEADER            (0)     /* Header              */
+#define DMAC_DESC_SRC_ADDR          (1)     /* Source Address      */
+#define DMAC_DESC_DST_ADDR          (2)     /* Destination Address */
+#define DMAC_DESC_COUNT             (3)     /* Transaction Byte    */
+#define DMAC_DESC_CHCFG             (4)     /* Channel Confg       */
+#define DMAC_DESC_CHITVL            (5)     /* Channel Interval    */
+#define DMAC_DESC_CHEXT             (6)     /* Channel Extension   */
+#define DMAC_DESC_LINK_ADDR         (7)     /* Link Address        */
+
+/* ==== On-chip peripheral module requests ===== */
+typedef enum dmac_request_factor
+{
+    DMAC_REQ_USB0_DMA0_TX,      /* USB_0 channel 0 transmit FIFO empty            */
+    DMAC_REQ_USB0_DMA0_RX,      /* USB_0 channel 0 receive FIFO full              */
+    DMAC_REQ_USB0_DMA1_TX,      /* USB_0 channel 1 transmit FIFO empty            */
+    DMAC_REQ_USB0_DMA1_RX,      /* USB_0 channel 1 receive FIFO full              */
+    DMAC_REQ_USB1_DMA0_TX,      /* USB_1 channel 0 transmit FIFO empty            */
+    DMAC_REQ_USB1_DMA0_RX,      /* USB_1 channel 0 receive FIFO full              */
+    DMAC_REQ_USB1_DMA1_TX,      /* USB_1 channel 1 transmit FIFO empty            */
+    DMAC_REQ_USB1_DMA1_RX,      /* USB_1 channel 1 receive FIFO full              */
+} dmac_request_factor_t;
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+void usb1_function_DMAC3_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
+                                        uint32_t request_factor, uint32_t req_direction);
+int32_t usb1_function_DMAC3_Open(uint32_t req);
+void usb1_function_DMAC3_Close(uint32_t *remain);
+void usb1_function_DMAC3_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
+
+void usb1_function_DMAC4_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
+                                        uint32_t request_factor, uint32_t req_direction);
+int32_t usb1_function_DMAC4_Open(uint32_t req);
+void usb1_function_DMAC4_Close(uint32_t *remain);
+void usb1_function_DMAC4_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* USB1_FUNCTION_DMACDRV_H */
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_dataio.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_dataio.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,2932 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_dataio.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb1_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+static uint16_t g_usb1_function_mbw[(USB_FUNCTION_MAX_PIPE_NO + 1)];
+
+static void     usb1_function_start_receive_trns_c(uint16_t pipe, uint32_t size, uint8_t *data);
+static void     usb1_function_start_receive_trns_d0(uint16_t pipe, uint32_t size, uint8_t *data);
+static void     usb1_function_start_receive_trns_d1(uint16_t pipe, uint32_t size, uint8_t *data);
+static void     usb1_function_start_receive_dma_d0(uint16_t pipe, uint32_t size, uint8_t *data);
+static void     usb1_function_start_receive_dma_d1(uint16_t pipe, uint32_t size, uint8_t *data);
+static uint16_t usb1_function_read_dma_d0(uint16_t pipe);
+static uint16_t usb1_function_read_dma_d1(uint16_t pipe);
+static uint16_t usb1_function_write_dma_d0(uint16_t pipe);
+static uint16_t usb1_function_write_dma_d1(uint16_t pipe);
+
+static void     usb1_function_read_c_fifo(uint16_t pipe, uint16_t count);
+static void     usb1_function_write_c_fifo(uint16_t Pipe, uint16_t count);
+static void     usb1_function_read_d0_fifo(uint16_t pipe, uint16_t count);
+static void     usb1_function_write_d0_fifo(uint16_t pipe, uint16_t count);
+static void     usb1_function_read_d1_fifo(uint16_t pipe, uint16_t count);
+static void     usb1_function_write_d1_fifo(uint16_t pipe, uint16_t count);
+
+static void     usb1_function_clear_transaction_counter(uint16_t pipe);
+static void     usb1_function_set_transaction_counter(uint16_t pipe, uint32_t count);
+
+static uint32_t usb1_function_com_get_dmasize(uint32_t trncount, uint32_t dtptr);
+
+static uint16_t usb1_function_set_dfacc_d0(uint16_t mbw, uint32_t count);
+static uint16_t usb1_function_set_dfacc_d1(uint16_t mbw, uint32_t count);
+
+
+/*******************************************************************************
+* Function Name: usb1_function_start_send_transfer
+* Description  : Starts the USB data communication using pipe specified by the argument.
+* Arguments    : uint16_t  pipe    ; Pipe Number
+*              : uint32_t size     ; Data Size
+*              : uint8_t  *data    ; Data Address
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t status;
+    uint16_t usefifo;
+    uint16_t mbw;
+
+    g_usb1_function_data_count[pipe]   = size;
+    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    usb1_function_clear_bemp_sts(pipe);
+    usb1_function_clear_brdy_sts(pipe);
+    usb1_function_clear_nrdy_sts(pipe);
+
+    mbw = usb1_function_get_mbw(size, (uint32_t)data);
+
+    usefifo = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+    switch (usefifo)
+    {
+        case USB_FUNCTION_D0FIFO_USE:
+        case USB_FUNCTION_D0FIFO_DMA:
+            usefifo = USB_FUNCTION_D0USE;
+        break;
+
+        case USB_FUNCTION_D1FIFO_USE:
+        case USB_FUNCTION_D1FIFO_DMA:
+            usefifo = USB_FUNCTION_D1USE;
+        break;
+
+        default:
+            usefifo = USB_FUNCTION_CUSE;
+        break;
+    };
+
+    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, usefifo, DEVDRV_USBF_NO, mbw);
+
+    usb1_function_clear_transaction_counter(pipe);
+
+    usb1_function_aclrm(pipe);
+
+    status = usb1_function_write_buffer(pipe);
+
+    if (status != DEVDRV_USBF_FIFOERROR)
+    {
+        usb1_function_set_pid_buf(pipe);
+    }
+
+    return status;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_buffer
+* Description  : Writes data in the buffer allocated in the pipe specified by
+*              : the argument. The FIFO for using is set in the pipe definition table.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_write_buffer (uint16_t pipe)
+{
+    uint16_t status;
+    uint16_t usefifo;
+
+    g_usb1_function_PipeIgnore[pipe] = 0;
+    usefifo = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+    switch (usefifo)
+    {
+        case USB_FUNCTION_D0FIFO_USE:
+            status = usb1_function_write_buffer_d0(pipe);
+        break;
+
+        case USB_FUNCTION_D1FIFO_USE:
+            status = usb1_function_write_buffer_d1(pipe);
+        break;
+
+        case USB_FUNCTION_D0FIFO_DMA:
+            status = usb1_function_write_dma_d0(pipe);
+        break;
+
+        case USB_FUNCTION_D1FIFO_DMA:
+            status = usb1_function_write_dma_d1(pipe);
+        break;
+
+        default:
+            status = usb1_function_write_buffer_c(pipe);
+        break;
+    };
+
+    switch (status)
+    {
+        case DEVDRV_USBF_WRITING:                       /* Continue of data write */
+            usb1_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
+            usb1_function_enable_brdy_int(pipe);        /* Enable Ready Interrupt */
+        break;
+
+        case DEVDRV_USBF_WRITEEND:                      /* End of data write */
+        case DEVDRV_USBF_WRITESHRT:                     /* End of data write */
+            usb1_function_disable_brdy_int(pipe);       /* Disable Ready Interrupt */
+            usb1_function_clear_nrdy_sts(pipe);
+            usb1_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
+            /* for last transfer */
+            usb1_function_enable_bemp_int(pipe);        /* Enable Empty Interrupt */
+        break;
+
+        case DEVDRV_USBF_WRITEDMA:                      /* DMA write */
+            usb1_function_clear_nrdy_sts(pipe);
+            usb1_function_enable_nrdy_int(pipe);        /* Error (NORES or STALL) */
+        break;
+
+        case DEVDRV_USBF_FIFOERROR:                     /* FIFO access status */
+        default:
+            usb1_function_disable_brdy_int(pipe);       /* Disable Ready Interrupt */
+            usb1_function_disable_bemp_int(pipe);       /* Disable Empty Interrupt */
+            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+        break;
+    }
+
+    return status;                      /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_buffer_c
+* Description  : Writes data in the buffer allocated in the pipe specified in
+*              : the argument. Writes data by CPU transfer using CFIFO.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_write_buffer_c (uint16_t pipe)
+{
+    uint32_t count;
+    uint16_t size;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+
+    if (g_usb1_function_CtrZeroLengthFlag == 1)
+    {
+        g_usb1_function_CtrZeroLengthFlag = 0;                  /* Zero Length Packet Flag CLR */
+        return DEVDRV_USBF_WRITEEND;
+    }
+
+    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+    if (pipe == USB_FUNCTION_PIPE0)
+    {
+        buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
+    }
+    else
+    {
+        buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
+    }
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    size = usb1_function_get_buf_size(pipe);                    /* Data buffer size */
+    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb1_function_data_count[pipe] <= (uint32_t)size)
+    {
+        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
+        count  = g_usb1_function_data_count[pipe];
+
+        if (count == 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
+        }
+    }
+    else
+    {
+        status = DEVDRV_USBF_WRITING;                           /* write continues */
+        count  = (uint32_t)size;
+    }
+
+    usb1_function_write_c_fifo(pipe, (uint16_t)count);
+
+    if (g_usb1_function_data_count[pipe] < (uint32_t)size)
+    {
+        g_usb1_function_data_count[pipe] = 0;
+
+        if (RZA_IO_RegRead_16(&USB201.CFIFOCTR, USB_CFIFOCTR_BVAL_SHIFT, USB_CFIFOCTR_BVAL) == 0)
+        {
+            USB201.CFIFOCTR = USB_FUNCTION_BITBVAL;             /* Short Packet */
+            g_usb1_function_CtrZeroLengthFlag = 1;              /* Zero Length Packet Flag */
+        }
+    }
+    else
+    {
+        g_usb1_function_data_count[pipe] -= count;
+    }
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_buffer_d0
+* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
+*              : Writes data by CPU transfer using D0FIFO.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_write_buffer_d0 (uint16_t pipe)
+{
+    uint32_t count;
+    uint16_t size;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+
+    mbw    = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    size = usb1_function_get_buf_size(pipe);                    /* Data buffer size */
+    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb1_function_data_count[pipe] <= (uint32_t)size)
+    {
+        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
+        count  = g_usb1_function_data_count[pipe];
+
+        if (count == 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
+        }
+    }
+    else
+    {
+        status = DEVDRV_USBF_WRITING;                           /* write continues */
+        count  = (uint32_t)size;
+    }
+
+    usb1_function_write_d0_fifo(pipe, (uint16_t)count);
+
+    if (g_usb1_function_data_count[pipe] < (uint32_t)size)
+    {
+        g_usb1_function_data_count[pipe] = 0;
+        if (RZA_IO_RegRead_16(&USB201.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+        {
+            USB201.D0FIFOCTR = USB_FUNCTION_BITBVAL;            /* Short Packet */
+        }
+    }
+    else
+    {
+        g_usb1_function_data_count[pipe] -= count;
+    }
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_buffer_d1
+* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
+*              : Writes data by CPU transfer using D1FIFO.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_write_buffer_d1 (uint16_t pipe)
+{
+    uint32_t count;
+    uint16_t size;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+
+    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    size = usb1_function_get_buf_size(pipe);                    /* Data buffer size */
+    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb1_function_data_count[pipe] <= (uint32_t)size)
+    {
+        status = DEVDRV_USBF_WRITEEND;                          /* write continues */
+        count  = g_usb1_function_data_count[pipe];
+
+        if (count == 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Null Packet is end of write */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = DEVDRV_USBF_WRITESHRT;                     /* Short Packet is end of write */
+        }
+    }
+    else
+    {
+        status = DEVDRV_USBF_WRITING;                           /* write continues */
+        count  = (uint32_t)size;
+    }
+
+    usb1_function_write_d1_fifo(pipe, (uint16_t)count);
+
+    if (g_usb1_function_data_count[pipe] < (uint32_t)size)
+    {
+        g_usb1_function_data_count[pipe] = 0;
+
+        if (RZA_IO_RegRead_16(&USB201.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+        {
+            USB201.D1FIFOCTR = USB_FUNCTION_BITBVAL;            /* Short Packet */
+        }
+    }
+    else
+    {
+        g_usb1_function_data_count[pipe] -= count;
+    }
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_dma_d0
+* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
+*              : Writes data by DMA transfer using D0FIFO.
+*              : The DMA-ch for using is specified by Userdef_USB_usb1_function_start_dma().
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           : Write end
+*              : DEVDRV_USBF_WRITESHRT          : short data
+*              : DEVDRV_USBF_WRITING            : Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           : Write DMA
+*              : DEVDRV_USBF_FIFOERROR          : FIFO status
+*******************************************************************************/
+static uint16_t usb1_function_write_dma_d0 (uint16_t pipe)
+{
+    uint32_t count;
+    uint16_t size;
+    uint16_t buffer;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t dfacc = 0;
+
+    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                            /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    size  = usb1_function_get_buf_size(pipe);                       /* Data buffer size */
+    count = g_usb1_function_data_count[pipe];
+
+    if (count != 0)
+    {
+        g_usb1_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe;
+
+        if ((count % size) != 0)
+        {
+            g_usb1_function_DmaBval[USB_FUNCTION_D0FIFO] = 1;
+        }
+        else
+        {
+            g_usb1_function_DmaBval[USB_FUNCTION_D0FIFO] = 0;
+        }
+
+        dfacc = usb1_function_set_dfacc_d0(mbw, count);
+
+        if (mbw == USB_FUNCTION_BITMBW_32)
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2;  /* 32bit transfer */
+        }
+        else if (mbw == USB_FUNCTION_BITMBW_16)
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1;  /* 16bit transfer */
+        }
+        else
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0;  /* 8bit transfer */
+        }
+
+        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo   = USB_FUNCTION_D0FIFO_DMA;
+        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].dir    = USB_FUNCTION_BUF2FIFO;
+        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb1_function_data_pointer[pipe];
+        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes  = count;
+
+        Userdef_USB_usb1_function_start_dma(&g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
+
+        usb1_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+        RZA_IO_RegWrite_16(&USB201.D0FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+
+        g_usb1_function_data_count[pipe]    = 0;
+        g_usb1_function_data_pointer[pipe] += count;
+        status = DEVDRV_USBF_WRITEDMA;                              /* DMA write  */
+    }
+    else
+    {
+        if (RZA_IO_RegRead_16(&USB201.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+        {
+            RZA_IO_RegWrite_16(&USB201.D0FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
+        }
+        status = DEVDRV_USBF_WRITESHRT;                             /* Short Packet is end of write */
+    }
+
+    return status;                                                  /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_dma_d1
+* Description  : Writes data in the buffer allocated in the pipe specified in the argument.
+*              : Writes data by DMA transfer using D1FIFO.
+*              : The DMA-ch for using is specified by Userdef_USB_usb1_function_start_dma().
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND           : Write end
+*              : DEVDRV_USBF_WRITESHRT          : short data
+*              : DEVDRV_USBF_WRITING            : Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           : Write DMA
+*              : DEVDRV_USBF_FIFOERROR          : FIFO status
+*******************************************************************************/
+static uint16_t usb1_function_write_dma_d1 (uint16_t pipe)
+{
+    uint32_t count;
+    uint16_t size;
+    uint16_t buffer;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t dfacc=0;
+
+    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                            /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    size  = usb1_function_get_buf_size(pipe);                       /* Data buffer size */
+    count = g_usb1_function_data_count[pipe];
+
+    if (count != 0)
+    {
+        g_usb1_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe;
+        if ((count % size) != 0)
+        {
+            g_usb1_function_DmaBval[USB_FUNCTION_D1FIFO] = 1;
+        }
+        else
+        {
+            g_usb1_function_DmaBval[USB_FUNCTION_D1FIFO] = 0;
+        }
+
+        dfacc = usb1_function_set_dfacc_d1(mbw, count);
+
+        if (mbw == USB_FUNCTION_BITMBW_32)
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2;  /* 32bit transfer */
+        }
+        else if (mbw == USB_FUNCTION_BITMBW_16)
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1;  /* 16bit transfer */
+        }
+        else
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0;  /* 8bit transfer */
+        }
+
+        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo   = USB_FUNCTION_D1FIFO_DMA;
+        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].dir    = USB_FUNCTION_BUF2FIFO;
+        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb1_function_data_pointer[pipe];
+        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes  = count;
+
+        Userdef_USB_usb1_function_start_dma(&g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
+
+        usb1_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+        RZA_IO_RegWrite_16(&USB201.D1FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+
+        g_usb1_function_data_count[pipe]    = 0;
+        g_usb1_function_data_pointer[pipe] += count;
+
+        status = DEVDRV_USBF_WRITEDMA;                              /* DMA write  */
+    }
+    else
+    {
+        if (RZA_IO_RegRead_16(&USB201.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+        {
+            RZA_IO_RegWrite_16(&USB201.D1FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
+        }
+        status = DEVDRV_USBF_WRITESHRT;                             /* Short Packet is end of write */
+    }
+
+    return status;                                                  /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_start_receive_transfer
+* Description  : Starts USB data reception using the pipe specified in the argument.
+*              : The FIFO for using is set in the pipe definition table.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+void usb1_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t usefifo;
+
+    usb1_function_clear_bemp_sts(pipe);
+    usb1_function_clear_brdy_sts(pipe);
+    usb1_function_clear_nrdy_sts(pipe);
+
+    usefifo = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+    switch (usefifo)
+    {
+        case USB_FUNCTION_D0FIFO_USE:
+            usb1_function_start_receive_trns_d0(pipe, size, data);
+        break;
+
+        case USB_FUNCTION_D1FIFO_USE:
+            usb1_function_start_receive_trns_d1(pipe, size, data);
+        break;
+
+        case USB_FUNCTION_D0FIFO_DMA:
+            usb1_function_start_receive_dma_d0(pipe, size, data);
+        break;
+
+        case USB_FUNCTION_D1FIFO_DMA:
+            usb1_function_start_receive_dma_d1(pipe, size, data);
+        break;
+
+        default:
+            usb1_function_start_receive_trns_c(pipe, size, data);
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_start_receive_trns_c
+* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by CPU transfer using CFIFO.
+*              : When storing data in the buffer allocated in the pipe specified in the
+*              : argument, BRDY interrupt is generated to read data
+*              : in the interrupt.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_start_receive_trns_c (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb1_function_set_pid_nak(pipe);
+    g_usb1_function_data_count[pipe]   = size;
+    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb1_function_PipeIgnore[pipe]   = 0;
+
+    g_usb1_function_PipeDataSize[pipe] = size;
+    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    mbw = usb1_function_get_mbw(size, (uint32_t)data);
+    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_READ, mbw);
+    USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;
+
+    usb1_function_set_transaction_counter(pipe, size);
+
+    usb1_function_aclrm(pipe);
+
+    usb1_function_enable_nrdy_int(pipe);
+    usb1_function_enable_brdy_int(pipe);
+
+    usb1_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_start_receive_trns_d0
+* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by CPU transfer using D0FIFO.
+*              : This function does not read data from the buffer.
+*              : When storing data in the buffer allocated in the pipe specified
+*              : in the argument, BRDY interrupt is generated to read data in the
+*              : interrupt.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_start_receive_trns_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb1_function_set_pid_nak(pipe);
+    g_usb1_function_data_count[pipe]   = size;
+    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb1_function_PipeIgnore[pipe]   = 0;
+
+    g_usb1_function_PipeDataSize[pipe] = size;
+    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    mbw = usb1_function_get_mbw(size, (uint32_t)data);
+    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+
+    usb1_function_set_transaction_counter(pipe, size);
+
+    usb1_function_aclrm(pipe);
+
+    usb1_function_enable_nrdy_int(pipe);
+    usb1_function_enable_brdy_int(pipe);
+
+    usb1_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_start_receive_trns_d1
+* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by CPU transfer using D1FIFO.
+*              : This function does not read data from the buffer.
+*              : When storing data in the buffer allocated in the pipe specified
+*              : in the argument, BRDY interrupt is generated to read data.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_start_receive_trns_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb1_function_set_pid_nak(pipe);
+    g_usb1_function_data_count[pipe]   = size;
+    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb1_function_PipeIgnore[pipe]   = 0;
+
+    g_usb1_function_PipeDataSize[pipe] = size;
+    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    mbw = usb1_function_get_mbw(size, (uint32_t)data);
+    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+    usb1_function_set_transaction_counter(pipe, size);
+
+    usb1_function_aclrm(pipe);
+
+    usb1_function_enable_nrdy_int(pipe);
+    usb1_function_enable_brdy_int(pipe);
+
+    usb1_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_start_receive_dma_d0
+* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by DMA transfer using D0FIFO.
+*              : This function does not read data from the buffer.
+*              : When storing data in the buffer allocated in the pipe specified
+*              : in the argument, delivered read request to DMAC to read data from
+*              : the buffer by DMAC.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_start_receive_dma_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb1_function_set_pid_nak(pipe);
+    g_usb1_function_data_count[pipe]   = size;
+    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb1_function_PipeIgnore[pipe]   = 0;
+
+    g_usb1_function_PipeDataSize[pipe] = 0;
+    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    mbw = usb1_function_get_mbw(size, (uint32_t)data);
+    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+
+    usb1_function_set_transaction_counter(pipe, size);
+
+    usb1_function_aclrm(pipe);
+
+    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        usb1_function_read_dma(pipe);
+
+        usb1_function_enable_nrdy_int(pipe);
+        usb1_function_enable_brdy_int(pipe);
+    }
+    else
+    {
+        usb1_function_enable_nrdy_int(pipe);
+        usb1_function_enable_brdy_int(pipe);
+    }
+
+    usb1_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_start_receive_dma_d1
+* Description  : Read data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by DMA transfer using D0FIFO.
+*              : This function does not read data from the buffer.
+*              : When storing data in the buffer allocated in the pipe specified
+*              : in the argument, delivered read request to DMAC to read data from
+*              : the buffer by DMAC.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_start_receive_dma_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb1_function_set_pid_nak(pipe);
+    g_usb1_function_data_count[pipe]   = size;
+    g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
+    g_usb1_function_PipeIgnore[pipe]   = 0;
+
+    g_usb1_function_PipeDataSize[pipe] = 0;
+    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_WAIT;
+
+    mbw = usb1_function_get_mbw(size, (uint32_t)data);
+    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+    usb1_function_set_transaction_counter(pipe, size);
+
+    usb1_function_aclrm(pipe);
+
+    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        usb1_function_read_dma(pipe);
+
+        usb1_function_enable_nrdy_int(pipe);
+        usb1_function_enable_brdy_int(pipe);
+    }
+    else
+    {
+        usb1_function_enable_nrdy_int(pipe);
+        usb1_function_enable_brdy_int(pipe);
+    }
+
+    usb1_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_buffer
+* Description  : Reads data from the buffer allocated in the pipe specified
+*              : in the argument.
+*              : Uses FIF0 set in the pipe definition table.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_read_buffer (uint16_t pipe)
+{
+    uint16_t status;
+
+    g_usb1_function_PipeIgnore[pipe] = 0;
+
+    if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
+    {
+        status = usb1_function_read_buffer_d0(pipe);
+    }
+    else if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
+    {
+        status = usb1_function_read_buffer_d1(pipe);
+    }
+    else
+    {
+        status = usb1_function_read_buffer_c(pipe);
+    }
+
+    switch (status)
+    {
+        case USB_FUNCTION_READING:                                      /* Continue of data read */
+        break;
+
+        case USB_FUNCTION_READEND:                                      /* End of data read */
+        case USB_FUNCTION_READSHRT:                                     /* End of data read */
+            usb1_function_disable_brdy_int(pipe);
+            g_usb1_function_PipeDataSize[pipe]   -= g_usb1_function_data_count[pipe];
+            g_usb1_function_pipe_status[pipe]     = DEVDRV_USBF_PIPE_DONE;
+        break;
+
+        case USB_FUNCTION_READOVER:                                     /* buffer over */
+            if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
+            {
+                USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+            }
+            else if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
+            {
+                USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+            }
+            else
+            {
+                USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;                 /* Clear BCLR */
+            }
+            usb1_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
+            g_usb1_function_PipeDataSize[pipe] -= g_usb1_function_data_count[pipe];
+            g_usb1_function_pipe_status[pipe]   = DEVDRV_USBF_FIFOERROR;
+        break;
+
+        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access status */
+        default:
+            usb1_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
+            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+        break;
+    }
+
+    return status;                                                      /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_buffer_c
+* Description  : Reads data from the buffer allocated in the pipe specified in the argument.
+*              : Reads data by CPU transfer using CFIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_read_buffer_c (uint16_t pipe)
+{
+    uint32_t count;
+    uint32_t dtln;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+
+    mbw    = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb1_function_data_count[pipe] < dtln)                /* Buffer Over ? */
+    {
+        status = USB_FUNCTION_READOVER;
+        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = g_usb1_function_data_count[pipe];
+    }
+    else if (g_usb1_function_data_count[pipe] == dtln)          /* just Receive Size */
+    {
+        status = USB_FUNCTION_READEND;
+        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = dtln;
+
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+        }
+    }
+    else                                                        /* continue Receive data */
+    {
+        status = USB_FUNCTION_READING;
+        count  = dtln;
+
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+    }
+
+    if (count == 0)                                             /* 0 length packet */
+    {
+        USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;                 /* Clear BCLR */
+    }
+    else
+    {
+        usb1_function_read_c_fifo(pipe, (uint16_t)count);
+    }
+
+    g_usb1_function_data_count[pipe] -= count;
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_buffer_d0
+* Description  : Reads data from the buffer allocated in the pipe specified in
+*              : the argument.
+*              : Reads data by CPU transfer using D0FIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_read_buffer_d0 (uint16_t pipe)
+{
+    uint32_t count;
+    uint32_t dtln;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t pipebuf_size;
+
+    mbw    = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb1_function_data_count[pipe] < dtln)                /* Buffer Over ? */
+    {
+        status = USB_FUNCTION_READOVER;
+        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = g_usb1_function_data_count[pipe];
+    }
+    else if (g_usb1_function_data_count[pipe] == dtln)          /* just Receive Size */
+    {
+        status = USB_FUNCTION_READEND;
+        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = dtln;
+
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+        }
+    }
+    else                                                        /* continue Receive data */
+    {
+        status = USB_FUNCTION_READING;
+        count  = dtln;
+
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+        else
+        {
+            pipebuf_size = usb1_function_get_buf_size(pipe);    /* Data buffer size */
+
+            if (count != pipebuf_size)
+            {
+                status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
+                usb1_function_set_pid_nak(pipe);                /* Set NAK */
+            }
+        }
+    }
+
+    if (count == 0)                                             /* 0 length packet */
+    {
+        USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+    }
+    else
+    {
+        usb1_function_read_d0_fifo(pipe, (uint16_t)count);
+    }
+
+    g_usb1_function_data_count[pipe] -= count;
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_buffer_d1
+* Description  : Reads data from the buffer allocated in the pipe specified
+*              : in the argument.
+*              : Reads data by CPU transfer using D1FIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_read_buffer_d1 (uint16_t pipe)
+{
+    uint32_t count;
+    uint32_t dtln;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t pipebuf_size;
+
+    mbw    = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+    buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+    if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+    {
+        return DEVDRV_USBF_FIFOERROR;
+    }
+
+    dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+    mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
+
+    if (g_usb1_function_data_count[pipe] < dtln)                /* Buffer Over ? */
+    {
+        status = USB_FUNCTION_READOVER;
+        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = g_usb1_function_data_count[pipe];
+    }
+    else if (g_usb1_function_data_count[pipe] == dtln)          /* just Receive Size */
+    {
+        status = USB_FUNCTION_READEND;
+        usb1_function_set_pid_nak(pipe);                        /* Set NAK */
+        count = dtln;
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+        }
+    }
+    else                                                        /* continue Receive data */
+    {
+        status = USB_FUNCTION_READING;
+        count  = dtln;
+        if (count == 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+
+        if ((count % mxps) != 0)
+        {
+            status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            usb1_function_set_pid_nak(pipe);                    /* Set NAK */
+        }
+        else
+        {
+            pipebuf_size = usb1_function_get_buf_size(pipe);    /* Data buffer size */
+
+            if (count != pipebuf_size)
+            {
+                status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
+                usb1_function_set_pid_nak(pipe);                /* Set NAK */
+            }
+        }
+    }
+
+    if (count == 0)                                             /* 0 length packet */
+    {
+        USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+    }
+    else
+    {
+        usb1_function_read_d1_fifo(pipe, (uint16_t)count);
+    }
+
+    g_usb1_function_data_count[pipe] -= count;
+
+    return status;                                              /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_dma
+* Description  : Reads data from the buffer allocated in the pipe specified
+*              : in the argument.
+*              : Reads data by DMA transfer using D0FIFO or D1FIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_read_dma (uint16_t pipe)
+{
+    uint16_t status;
+
+    g_usb1_function_PipeIgnore[pipe] = 0;
+    if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
+    {
+        status = usb1_function_read_dma_d0(pipe);
+    }
+    else
+    {
+        status = usb1_function_read_dma_d1(pipe);
+    }
+
+    switch (status)
+    {
+        case USB_FUNCTION_READING:                                      /* Continue of data read */
+        break;
+
+        case USB_FUNCTION_READZERO:                                     /* End of data read */
+            usb1_function_disable_brdy_int(pipe);
+            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+        break;
+
+        case USB_FUNCTION_READEND:                                      /* End of data read */
+        case USB_FUNCTION_READSHRT:                                     /* End of data read */
+            usb1_function_disable_brdy_int(pipe);
+
+            if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+            {
+                g_usb1_function_PipeDataSize[pipe] -= g_usb1_function_data_count[pipe];
+            }
+        break;
+
+        case USB_FUNCTION_READOVER:                                     /* buffer over */
+            usb1_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
+
+            if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+            {
+                g_usb1_function_PipeDataSize[pipe] -= g_usb1_function_data_count[pipe];
+            }
+            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+        break;
+
+        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access status */
+        default:
+            usb1_function_disable_brdy_int(pipe);                       /* Disable Ready Interrupt */
+            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+        break;
+    }
+
+    return status;                                                      /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_dma_d0
+* Description  : Writes data in the buffer allocated in the pipe specified
+*              : in the argument.
+*              : Reads data by DMA transfer using D0FIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READZERO         ; zero data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+static uint16_t usb1_function_read_dma_d0 (uint16_t pipe)
+{
+    uint32_t count;
+    uint32_t dtln;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t dfacc = 0;
+    uint16_t pipebuf_size;
+
+    g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
+
+    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+
+    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        count  = g_usb1_function_data_count[pipe];
+        status = USB_FUNCTION_READING;
+    }
+    else
+    {
+        buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
+
+        if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+        {
+            return DEVDRV_USBF_FIFOERROR;
+        }
+
+        dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+        mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
+
+        if (g_usb1_function_data_count[pipe] < dtln)                /* Buffer Over ? */
+        {
+            status = USB_FUNCTION_READOVER;
+            count  = g_usb1_function_data_count[pipe];
+        }
+        else if (g_usb1_function_data_count[pipe] == dtln)          /* just Receive Size */
+        {
+            status = USB_FUNCTION_READEND;
+            count  = dtln;
+            if (count == 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            }
+
+            if ((count % mxps) != 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            }
+        }
+        else                                                        /* continue Receive data */
+        {
+            status = USB_FUNCTION_READING;
+            count  = dtln;
+
+            if (count == 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            }
+
+            if ((count % mxps) != 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            }
+            else
+            {
+                pipebuf_size = usb1_function_get_buf_size(pipe);    /* Data buffer size */
+                if (count != pipebuf_size)
+                {
+                    status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
+                }
+            }
+        }
+    }
+
+    if (count == 0)                                                 /* 0 length packet */
+    {
+        if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+        {
+            USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+            status = USB_FUNCTION_READZERO;                         /* Null Packet receive */
+        }
+        else
+        {
+            usb1_function_set_curpipe(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
+                                                                    /* transaction counter No set */
+                                                                    /* FRDY = 1, DTLN = 0 -> BRDY */
+        }
+    }
+    else
+    {
+        dfacc = usb1_function_set_dfacc_d0(mbw, count);
+
+        if (mbw == USB_FUNCTION_BITMBW_32)
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2;  /* 32bit transfer */
+        }
+        else if (mbw == USB_FUNCTION_BITMBW_16)
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1;  /* 16bit transfer */
+        }
+        else
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0;  /* 8bit transfer */
+        }
+
+        g_usb1_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe;        /* not use in read operation */
+        g_usb1_function_DmaBval[USB_FUNCTION_D0FIFO] = 0;           /* not use in read operation */
+
+        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo   = USB_FUNCTION_D0FIFO_DMA;
+        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].dir    = USB_FUNCTION_FIFO2BUF;
+        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb1_function_data_pointer[pipe];
+        g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes  = count;
+
+        if (status == USB_FUNCTION_READING)
+        {
+            g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSY;
+        }
+        else
+        {
+            g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSYEND;
+        }
+
+        Userdef_USB_usb1_function_start_dma(&g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
+
+        usb1_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+        RZA_IO_RegWrite_16(&USB201.D0FIFOSEL,
+                            1,
+                            USB_DnFIFOSEL_DREQE_SHIFT,
+                            USB_DnFIFOSEL_DREQE);
+    }
+
+    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+    {
+        g_usb1_function_data_count[pipe]   -= count;
+        g_usb1_function_data_pointer[pipe] += count;
+        g_usb1_function_PipeDataSize[pipe] += count;
+    }
+
+    return status;                                                  /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_dma_d1
+* Description  : Reads data from the buffer allocated in the pipe specified in
+*              : the argument.
+*              : Reads data by DMA transfer using D1FIFO.
+* Arguments    : uint16_t pipe     ; Pipe Number
+* Return Value : USB_FUNCTION_READEND          ; Read end
+*              : USB_FUNCTION_READSHRT         ; short data
+*              : USB_FUNCTION_READZERO         ; zero data
+*              : USB_FUNCTION_READING          ; Continue of data read
+*              : USB_FUNCTION_READOVER         ; buffer over
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO status
+*******************************************************************************/
+static uint16_t usb1_function_read_dma_d1 (uint16_t pipe)
+{
+    uint32_t count;
+    uint32_t dtln;
+    uint16_t buffer;
+    uint16_t mxps;
+    uint16_t status;
+    uint16_t mbw;
+    uint16_t dfacc = 0;
+    uint16_t pipebuf_size;
+
+    g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
+
+    mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+
+    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        count  = g_usb1_function_data_count[pipe];
+        status = USB_FUNCTION_READING;
+    }
+    else
+    {
+        buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
+        if (buffer == DEVDRV_USBF_FIFOERROR)                        /* FIFO access status */
+        {
+            return DEVDRV_USBF_FIFOERROR;
+        }
+
+        dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+        mxps = usb1_function_get_mxps(pipe);                        /* Max Packet Size */
+
+        if (g_usb1_function_data_count[pipe] < dtln)                /* Buffer Over ? */
+        {
+            status = USB_FUNCTION_READOVER;
+            count  = g_usb1_function_data_count[pipe];
+        }
+        else if (g_usb1_function_data_count[pipe] == dtln)          /* just Receive Size */
+        {
+            status = USB_FUNCTION_READEND;
+            count  = dtln;
+            if (count == 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            }
+
+            if ((count % mxps) != 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            }
+        }
+        else                                                        /* continue Receive data */
+        {
+            status = USB_FUNCTION_READING;
+            count  = dtln;
+            if (count == 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Null Packet receive */
+            }
+
+            if ((count % mxps) != 0)
+            {
+                status = USB_FUNCTION_READSHRT;                     /* Short Packet receive */
+            }
+            else
+            {
+                pipebuf_size = usb1_function_get_buf_size(pipe);    /* Data buffer size */
+                if (count != pipebuf_size)
+                {
+                    status = USB_FUNCTION_READSHRT;                 /* Short Packet receive */
+                }
+            }
+        }
+    }
+
+    if (count == 0)                                                 /* 0 length packet */
+    {
+        if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+        {
+            USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;                /* Clear BCLR */
+            status = USB_FUNCTION_READZERO;                         /* Null Packet receive */
+        }
+        else
+        {
+            usb1_function_set_curpipe(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
+                                                                    /* transaction counter No set */
+                                                                    /* FRDY = 1, DTLN = 0 -> BRDY */
+        }
+    }
+    else
+    {
+        dfacc = usb1_function_set_dfacc_d1(mbw, count);
+
+        if (mbw == USB_FUNCTION_BITMBW_32)
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2;  /* 32bit transfer */
+        }
+        else if (mbw == USB_FUNCTION_BITMBW_16)
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1;  /* 16bit transfer */
+        }
+        else
+        {
+            g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0;  /* 8bit transfer */
+        }
+
+        g_usb1_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe;        /* not use in read operation */
+        g_usb1_function_DmaBval[USB_FUNCTION_D1FIFO] = 0;           /* not use in read operation */
+
+        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo   = USB_FUNCTION_D1FIFO_DMA;
+        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].dir    = USB_FUNCTION_FIFO2BUF;
+        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb1_function_data_pointer[pipe];
+        g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes  = count;
+
+        if (status == USB_FUNCTION_READING)
+        {
+            g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSY;
+        }
+        else
+        {
+            g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSYEND;
+        }
+
+        Userdef_USB_usb1_function_start_dma(&g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
+
+        usb1_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+        RZA_IO_RegWrite_16(&USB201.D1FIFOSEL,
+                            1,
+                            USB_DnFIFOSEL_DREQE_SHIFT,
+                            USB_DnFIFOSEL_DREQE);
+    }
+
+    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+    {
+        g_usb1_function_data_count[pipe]   -= count;
+        g_usb1_function_data_pointer[pipe] += count;
+        g_usb1_function_PipeDataSize[pipe] += count;
+    }
+
+    return status;                                                  /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_change_fifo_port
+* Description  : Allocates FIF0 specified by the argument in the pipe assigned
+*              : by the argument. After allocating FIF0, waits in the software
+*              : till the corresponding pipe becomes ready.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t fifosel   ; Select FIFO
+*              : uint16_t isel      ; FIFO Access Direction
+*              : uint16_t mbw       ; FIFO Port Access Bit Width
+* Return Value : DEVDRV_USBF_FIFOERROR          ; Error
+*              : Others            ; CFIFOCTR/D0FIFOCTR/D1FIFOCTR Register Value
+*******************************************************************************/
+uint16_t usb1_function_change_fifo_port (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
+{
+    uint16_t buffer;
+    uint32_t loop;
+    volatile uint32_t loop2;
+
+    usb1_function_set_curpipe(pipe, fifosel, isel, mbw);
+
+    for (loop = 0; loop < 4; loop++)
+    {
+        switch (fifosel)
+        {
+            case USB_FUNCTION_CUSE:
+                buffer = USB201.CFIFOCTR;
+            break;
+
+            case USB_FUNCTION_D0USE:
+            case USB_FUNCTION_D0DMA:
+                buffer = USB201.D0FIFOCTR;
+            break;
+
+            case USB_FUNCTION_D1USE:
+            case USB_FUNCTION_D1DMA:
+                buffer = USB201.D1FIFOCTR;
+            break;
+
+            default:
+                buffer = 0;
+            break;
+        }
+
+        if ((buffer & USB_FUNCTION_BITFRDY) == USB_FUNCTION_BITFRDY)
+        {
+            return buffer;
+        }
+
+        loop2 = 25;
+        while (loop2-- > 0)
+        {
+            /* wait */
+        }
+    }
+
+    return DEVDRV_USBF_FIFOERROR;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_curpipe
+* Description  : Allocates FIF0 specified by the argument in the pipe assigned
+*              : by the argument.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t fifosel   ; Select FIFO
+*              : uint16_t isel      ; FIFO Access Direction
+*              : uint16_t mbw       ; FIFO Port Access Bit Width
+* Return Value : none
+*******************************************************************************/
+void usb1_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
+{
+    uint16_t buffer;
+    uint32_t loop;
+    volatile uint32_t loop2;
+
+    g_usb1_function_mbw[pipe] = mbw;
+
+    switch (fifosel)
+    {
+        case USB_FUNCTION_CUSE:
+            buffer  = USB201.CFIFOSEL;
+            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
+            buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
+            USB201.CFIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(isel | pipe | mbw);
+            USB201.CFIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        case USB_FUNCTION_D0DMA:
+        case USB_FUNCTION_D0USE:
+            buffer  = USB201.D0FIFOSEL;
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+            USB201.D0FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+                        (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(pipe | mbw);
+            USB201.D0FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+                        (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        case USB_FUNCTION_D1DMA:
+        case USB_FUNCTION_D1USE:
+            buffer  = USB201.D1FIFOSEL;
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+            USB201.D1FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+                        (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(pipe | mbw);
+            USB201.D1FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+                        (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        default:
+        break;
+    }
+
+    /* Cautions !!!
+     * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
+     * For details, please look at the data sheet.   */
+    loop2 = 100;
+
+    while (loop2-- > 0)
+    {
+        /* wait */
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_curpipe2
+* Description  : Allocates FIF0 specified by the argument in the pipe assigned
+*              : by the argument.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t fifosel   ; Select FIFO
+*              : uint16_t isel      ; FIFO Access Direction
+*              : uint16_t mbw       ; FIFO Port Access Bit Width
+*              : uint16_t dfacc     ; DFACC Access mode
+* Return Value : none
+*******************************************************************************/
+void usb1_function_set_curpipe2 (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc)
+{
+    uint16_t buffer;
+    uint32_t loop;
+#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
+    uint32_t dummy;
+#endif
+    volatile uint32_t loop2;
+
+    g_usb1_function_mbw[pipe] = mbw;
+
+    switch (fifosel)
+    {
+        case USB_FUNCTION_CUSE:
+            buffer  = USB201.CFIFOSEL;
+            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
+            buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
+            USB201.CFIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+            buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(isel | pipe | mbw);
+            USB201.CFIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+                        (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        case USB_FUNCTION_D0DMA:
+        case USB_FUNCTION_D0USE:
+            buffer  = USB201.D0FIFOSEL;
+#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+
+            if (dfacc != 0)
+            {
+                buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
+            }
+#else
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+#endif
+            USB201.D0FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+
+#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
+            if (dfacc != 0)
+            {
+                dummy = USB201.D0FIFO.UINT32;
+            }
+#endif
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(pipe | mbw);
+            USB201.D0FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        case USB_FUNCTION_D1DMA:
+        case USB_FUNCTION_D1USE:
+            buffer  = USB201.D1FIFOSEL;
+#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+
+            if (dfacc != 0)
+            {
+                buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
+            }
+#else
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+#endif
+            USB201.D1FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+#ifdef  __USB_FUNCTION_DF_ACC_ENABLE__
+            if (dfacc != 0)
+            {
+                dummy = USB201.D1FIFO.UINT32;
+                loop = dummy;                   // avoid warning.
+            }
+#endif
+            buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+            buffer |= (uint16_t)(pipe | mbw);
+            USB201.D1FIFOSEL = buffer;
+
+            for (loop = 0; loop < 4; loop++)
+            {
+                if ((USB201.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+                {
+                    break;
+                }
+
+                loop2 = 100;
+
+                while (loop2-- > 0)
+                {
+                    /* wait */
+                }
+            }
+        break;
+
+        default:
+        break;
+    }
+
+    /* Cautions !!!
+     * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
+     * For details, please look at the data sheet.   */
+    loop2 = 100;
+
+    while (loop2-- > 0)
+    {
+        /* wait */
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_c_fifo
+* Description  : Writes data in CFIFO.
+*              : Writes data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating CFIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb1_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_write_c_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            USB201.CFIFO.UINT8[HH] = *g_usb1_function_data_pointer[pipe];
+            g_usb1_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)(count / 2); even; --even)
+        {
+            USB201.CFIFO.UINT16[H] = *((uint16_t *)g_usb1_function_data_pointer[pipe]);
+            g_usb1_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)(count / 4); even; --even)
+        {
+            USB201.CFIFO.UINT32 = *((uint32_t *)g_usb1_function_data_pointer[pipe]);
+            g_usb1_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_c_fifo
+* Description  : Reads data from CFIFO.
+*              : Reads data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating CFIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb1_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_read_c_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            *g_usb1_function_data_pointer[pipe] = USB201.CFIFO.UINT8[HH];
+            g_usb1_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)((count + 1) / 2); even; --even)
+        {
+            *((uint16_t *)g_usb1_function_data_pointer[pipe]) = USB201.CFIFO.UINT16[H];
+            g_usb1_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)((count + 3) / 4); even; --even)
+        {
+            *((uint32_t *)g_usb1_function_data_pointer[pipe]) = USB201.CFIFO.UINT32;
+            g_usb1_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_d0_fifo
+* Description  : Writes data in D0FIFO.
+*              : Writes data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating CFIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb1_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_write_d0_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            USB201.D0FIFO.UINT8[HH] = *g_usb1_function_data_pointer[pipe];
+            g_usb1_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)(count / 2); even; --even)
+        {
+            USB201.D0FIFO.UINT16[H] = *((uint16_t *)g_usb1_function_data_pointer[pipe]);
+            g_usb1_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)(count / 4); even; --even)
+        {
+            USB201.D0FIFO.UINT32 = *((uint32_t *)g_usb1_function_data_pointer[pipe]);
+            g_usb1_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_d0_fifo
+* Description  : Reads data from D0FIFO.
+*              : Reads data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating DOFIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb1_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_read_d0_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            *g_usb1_function_data_pointer[pipe] = USB201.D0FIFO.UINT8[HH];
+            g_usb1_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)((count + 1) / 2); even; --even)
+        {
+            *((uint16_t *)g_usb1_function_data_pointer[pipe]) = USB201.D0FIFO.UINT16[H];
+            g_usb1_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)((count + 3) / 4); even; --even)
+        {
+            *((uint32_t *)g_usb1_function_data_pointer[pipe]) = USB201.D0FIFO.UINT32;
+            g_usb1_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_d1_fifo
+* Description  : Writes data in D1FIFO.
+*              : Writes data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating D1FIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb1_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_write_d1_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            USB201.D1FIFO.UINT8[HH] = *g_usb1_function_data_pointer[pipe];
+            g_usb1_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)(count / 2); even; --even)
+        {
+            USB201.D1FIFO.UINT16[H] = *((uint16_t *)g_usb1_function_data_pointer[pipe]);
+            g_usb1_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)(count / 4); even; --even)
+        {
+            USB201.D1FIFO.UINT32 = *((uint32_t *)g_usb1_function_data_pointer[pipe]);
+            g_usb1_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_d1_fifo
+* Description  : Reads data from D1FIFO.
+*              : Reads data by BYTE/WORD/LONG according to access size
+*              : to the pipe specified by the arguments.
+*              : Before executing this function, allocating D1FIF0 in the specified pipe
+*              : should be completed.
+*              : Before executing this function, access size to the specified pipe
+*              : should be fixed and set in g_usb1_function_mbw[].
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t count     ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_read_d1_fifo (uint16_t pipe, uint16_t count)
+{
+    uint16_t even;
+
+    if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+    {
+        for (even = count; even; --even)
+        {
+            *g_usb1_function_data_pointer[pipe] = USB201.D1FIFO.UINT8[HH];
+            g_usb1_function_data_pointer[pipe] += 1;
+        }
+    }
+    else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+    {
+        for (even = (uint16_t)((count + 1) / 2); even; --even)
+        {
+            *((uint16_t *)g_usb1_function_data_pointer[pipe]) = USB201.D1FIFO.UINT16[H];
+            g_usb1_function_data_pointer[pipe] += 2;
+        }
+    }
+    else
+    {
+        for (even = (uint16_t)((count + 3) / 4); even; --even)
+        {
+            *((uint32_t *)g_usb1_function_data_pointer[pipe]) = USB201.D1FIFO.UINT32;
+            g_usb1_function_data_pointer[pipe] += 4;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_com_get_dmasize
+* Description  : Calculates access width of DMA transfer by the argument to
+*              : return as the Return Value.
+* Arguments    : uint32_t trncount   : transfer byte
+*              : uint32_t dtptr      : transfer data pointer
+* Return Value : DMA transfer size    : 0   8bit
+*              :                      : 1  16bit
+*              :                      : 2  32bit
+*******************************************************************************/
+static uint32_t usb1_function_com_get_dmasize (uint32_t trncount, uint32_t dtptr)
+{
+    uint32_t size;
+
+    if (((trncount & 0x0001) != 0) || ((dtptr & 0x00000001) != 0))
+    {
+        /*  When transfer byte count is odd         */
+        /* or transfer data area is 8-bit alignment */
+        size = 0;           /* 8bit */
+    }
+    else if (((trncount & 0x0003) != 0) || ((dtptr & 0x00000003) != 0))
+    {
+        /* When the transfer byte count is multiples of 2 */
+        /* or the transfer data area is 16-bit alignment */
+        size = 1;           /* 16bit */
+    }
+    else
+    {
+        /* When the transfer byte count is multiples of 4 */
+        /* or the transfer data area is 32-bit alignment */
+        size = 2;           /* 32bit */
+    }
+
+    return size;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_get_mbw
+* Description  : Calculates access width of DMA to return the value set in MBW.
+* Arguments    : uint32_t trncount   : transfer byte
+*              : uint32_t dtptr      : transfer data pointer
+* Return Value : FIFO transfer size   : USB_FUNCTION_BITMBW_8    8bit
+*              :                      : USB_FUNCTION_BITMBW_16  16bit
+*              :                      : USB_FUNCTION_BITMBW_32  32bit
+*******************************************************************************/
+uint16_t usb1_function_get_mbw (uint32_t trncount, uint32_t dtptr)
+{
+    uint32_t size;
+    uint16_t mbw;
+
+    size = usb1_function_com_get_dmasize(trncount, dtptr);
+
+    if (size == 0)
+    {
+        /* 8bit */
+        mbw = USB_FUNCTION_BITMBW_8;
+    }
+    else if (size == 1)
+    {
+        /* 16bit */
+        mbw = USB_FUNCTION_BITMBW_16;
+    }
+    else
+    {
+        /* 32bit */
+        mbw = USB_FUNCTION_BITMBW_32;
+    }
+
+    return mbw;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_transaction_counter
+* Description  : Sets transaction counter by the argument(PIPEnTRN).
+*              : Clears transaction before setting to enable transaction counter setting.
+* Arguments    : uint16_t pipe     ; Pipe number
+*              : uint32_t bsize    : Data transfer size
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_set_transaction_counter (uint16_t pipe, uint32_t bsize)
+{
+    uint16_t mxps;
+    uint16_t cnt;
+
+    if (bsize  == 0)
+    {
+        return;
+    }
+
+    mxps = usb1_function_get_mxps(pipe);            /* Max Packet Size */
+
+    if ((bsize % mxps) == 0)
+    {
+        cnt = (uint16_t)(bsize / mxps);
+    }
+    else
+    {
+        cnt = (uint16_t)((bsize / mxps) + 1);
+    }
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB201.PIPE1TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPE1TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPE1TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB201.PIPE2TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPE2TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPE2TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB201.PIPE3TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPE3TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPE3TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB201.PIPE4TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPE4TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPE4TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB201.PIPE5TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPE5TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPE5TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB201.PIPE9TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPE9TRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPE9TRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB201.PIPEATRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPEATRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPEATRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB201.PIPEBTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPEBTRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPEBTRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB201.PIPECTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPECTRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPECTRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB201.PIPEDTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPEDTRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPEDTRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB201.PIPEETRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPEETRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPEETRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB201.PIPEFTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+            USB201.PIPEFTRN             = cnt;
+            RZA_IO_RegWrite_16(&USB201.PIPEFTRE,
+                                1,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_clear_transaction_counter
+* Description  : Clears the transaction counter by the argument.
+*              : After executing this function, the transaction counter is invalid.
+* Arguments    : uint16_t pipe     ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_clear_transaction_counter (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB201.PIPE1TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPE1TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB201.PIPE2TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPE2TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB201.PIPE3TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPE3TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB201.PIPE4TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPE4TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB201.PIPE5TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPE5TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB201.PIPE9TRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPE9TRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB201.PIPEATRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPEATRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB201.PIPEBTRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPEBTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB201.PIPECTRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPECTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB201.PIPEDTRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPEDTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB201.PIPEETRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPEETRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB201.PIPEFTRE,
+                                0,
+                                USB_PIPEnTRE_TRENB_SHIFT,
+                                USB_PIPEnTRE_TRENB);
+            RZA_IO_RegWrite_16(&USB201.PIPEFTRE,
+                                1,
+                                USB_PIPEnTRE_TRCLR_SHIFT,
+                                USB_PIPEnTRE_TRCLR);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_stop_transfer
+* Description  : Stops the USB transfer in the pipe specified by the argument.
+*              : After stopping the USB transfer, clears the buffer allocated in
+*              : the pipe.
+*              : After executing this function, allocation in FIF0 becomes USB_FUNCTION_PIPE0;
+*              : invalid. After executing this function, BRDY/NRDY/BEMP interrupt
+*              : in the corresponding pipe becomes invalid. Sequence bit is also
+*              : cleared.
+* Arguments    : uint16_t  pipe     ; Pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_stop_transfer (uint16_t pipe)
+{
+    uint16_t usefifo;
+    uint32_t remain;
+    uint16_t fifo;
+
+    usb1_function_set_pid_nak(pipe);
+
+    usefifo = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+    switch (usefifo)
+    {
+        case USB_FUNCTION_D0FIFO_USE:
+            usb1_function_clear_transaction_counter(pipe);
+            USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
+            fifo = USB_FUNCTION_D0USE;
+        break;
+
+        case USB_FUNCTION_D1FIFO_USE:
+            usb1_function_clear_transaction_counter(pipe);
+            USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
+            fifo = USB_FUNCTION_D1USE;
+        break;
+
+        case USB_FUNCTION_D0FIFO_DMA:
+            remain = Userdef_USB_usb1_function_stop_dma0();
+            usb1_function_dma_stop_d0(pipe, remain);
+            usb1_function_clear_transaction_counter(pipe);
+            USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
+            fifo = USB_FUNCTION_D0DMA;
+        break;
+
+        case USB_FUNCTION_D1FIFO_DMA:
+            remain = Userdef_USB_usb1_function_stop_dma1();
+            usb1_function_dma_stop_d1(pipe, remain);
+            usb1_function_clear_transaction_counter(pipe);
+            USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;        /* Buffer Clear */
+            fifo = USB_FUNCTION_D1DMA;
+        break;
+
+        default:
+            usb1_function_clear_transaction_counter(pipe);
+            USB201.CFIFOCTR =  USB_FUNCTION_BITBCLR;        /* Buffer Clear */
+            fifo = USB_FUNCTION_CUSE;
+        break;
+    }
+
+    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, fifo, DEVDRV_USBF_NO, USB_FUNCTION_BITMBW_16);
+
+    /* Interrupt of pipe set is disabled */
+    usb1_function_disable_brdy_int(pipe);
+    usb1_function_disable_nrdy_int(pipe);
+    usb1_function_disable_bemp_int(pipe);
+
+    usb1_function_aclrm(pipe);
+    usb1_function_set_csclr(pipe);
+
+    if ( g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT )
+    {
+        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_dfacc_d0
+* Description  : Sets the DFACC setting value in D0FIFO using the transfer size.
+* Arguments    : uint16_t mbw     ; MBW
+*              : uint16_t count   ; data count
+* Return Value : DFACC Access mode
+*******************************************************************************/
+static uint16_t usb1_function_set_dfacc_d0 (uint16_t mbw, uint32_t count)
+{
+    uint16_t dfacc = 0;
+
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+    RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                        0,
+                        USB_DnFBCFG_DFACC_SHIFT,
+                        USB_DnFBCFG_DFACC);
+    RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                        0,
+                        USB_DnFBCFG_TENDE_SHIFT,
+                        USB_DnFBCFG_TENDE);
+    dfacc = 0;
+#else
+    if (mbw == USB_FUNCTION_BITMBW_32)
+    {
+        if ((count % 32) == 0)
+        {
+            /* 32byte transfer */
+            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                                2,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 2;
+        }
+        else if ((count % 16) == 0)
+        {
+            /* 16byte transfer */
+            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                                1,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 1;
+        }
+        else
+        {
+            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                                0,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 0;
+        }
+    }
+    else if (mbw == USB_FUNCTION_BITMBW_16)
+    {
+        RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                            0,
+                            USB_DnFBCFG_DFACC_SHIFT,
+                            USB_DnFBCFG_DFACC);
+        RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                            0,
+                            USB_DnFBCFG_TENDE_SHIFT,
+                            USB_DnFBCFG_TENDE);
+        dfacc = 0;
+    }
+    else
+    {
+        RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                            0,
+                            USB_DnFBCFG_DFACC_SHIFT,
+                            USB_DnFBCFG_DFACC);
+        RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+                            0,
+                            USB_DnFBCFG_TENDE_SHIFT,
+                            USB_DnFBCFG_TENDE);
+        dfacc = 0;
+    }
+#endif
+    return dfacc;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_dfacc_d1
+* Description  : Set the DFACC setting value in D1FIFO using the transfer size.
+* Arguments    : uint16_t mbw     ; MBW
+*              : uint16_t count   ; data count
+* Return Value : DFACC Access mode
+*******************************************************************************/
+static uint16_t usb1_function_set_dfacc_d1 (uint16_t mbw, uint32_t count)
+{
+    uint16_t dfacc = 0;
+
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+    RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                        0,
+                        USB_DnFBCFG_DFACC_SHIFT,
+                        USB_DnFBCFG_DFACC);
+    RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                        0,
+                        USB_DnFBCFG_TENDE_SHIFT,
+                        USB_DnFBCFG_TENDE);
+    dfacc = 0;
+#else
+    if (mbw == USB_FUNCTION_BITMBW_32)
+    {
+        if ((count % 32) == 0)
+        {
+            /* 32byte transfer */
+            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                                2,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 2;
+        }
+        else if ((count % 16) == 0)
+        {
+            /* 16byte transfer */
+            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                                1,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 1;
+        }
+        else
+        {
+            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                                0,
+                                USB_DnFBCFG_DFACC_SHIFT,
+                                USB_DnFBCFG_DFACC);
+            RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                                0,
+                                USB_DnFBCFG_TENDE_SHIFT,
+                                USB_DnFBCFG_TENDE);
+            dfacc = 0;
+        }
+    }
+    else if (mbw == USB_FUNCTION_BITMBW_16)
+    {
+        RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                            0,
+                            USB_DnFBCFG_DFACC_SHIFT,
+                            USB_DnFBCFG_DFACC);
+        RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                            0,
+                            USB_DnFBCFG_TENDE_SHIFT,
+                            USB_DnFBCFG_TENDE);
+        dfacc = 0;
+    }
+    else
+    {
+        RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                            0,
+                            USB_DnFBCFG_DFACC_SHIFT,
+                            USB_DnFBCFG_DFACC);
+        RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+                            0,
+                            USB_DnFBCFG_TENDE_SHIFT,
+                            USB_DnFBCFG_TENDE);
+        dfacc = 0;
+    }
+#endif
+
+    return dfacc;
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_dma.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_dma.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,346 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_dma.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb1_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+static void usb1_function_dmaint(uint16_t fifo);
+static void usb1_function_dmaint_buf2fifo(uint16_t pipe);
+static void usb1_function_dmaint_fifo2buf(uint16_t pipe);
+
+
+/*******************************************************************************
+* Function Name: usb1_function_dma_stop_d0
+* Description  : D0FIFO DMA stop
+* Arguments    : uint16_t pipe      : pipe number
+*              : uint32_t remain    : transfer byte
+* Return Value : none
+*******************************************************************************/
+void usb1_function_dma_stop_d0 (uint16_t pipe, uint32_t remain)
+{
+    uint16_t dtln;
+    uint16_t dfacc;
+    uint16_t buffer;
+    uint16_t sds_b = 1;
+
+    dfacc = RZA_IO_RegRead_16(&USB201.D0FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
+
+    if (dfacc == 2)
+    {
+        sds_b = 32;
+    }
+    else if (dfacc == 1)
+    {
+        sds_b = 16;
+    }
+    else
+    {
+        if (g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 2)
+        {
+            sds_b = 4;
+        }
+        else if (g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 1)
+        {
+            sds_b = 2;
+        }
+        else
+        {
+            sds_b = 1;
+        }
+    }
+
+    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
+        {
+            buffer = USB201.D0FIFOCTR;
+            dtln   = (buffer & USB_FUNCTION_BITDTLN);
+
+            if ((dtln % sds_b) != 0)
+            {
+                remain += (sds_b - (dtln % sds_b));
+            }
+            g_usb1_function_PipeDataSize[pipe] = (g_usb1_function_data_count[pipe] - remain);
+            g_usb1_function_data_count[pipe]   = remain;
+        }
+    }
+
+    RZA_IO_RegWrite_16(&USB201.D0FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_dma_stop_d1
+* Description  : D1FIFO DMA stop
+* Arguments    : uint16_t pipe      : pipe number
+*              : uint32_t remain    : transfer byte
+* Return Value : none
+*******************************************************************************/
+void usb1_function_dma_stop_d1 (uint16_t pipe, uint32_t remain)
+{
+    uint16_t dtln;
+    uint16_t dfacc;
+    uint16_t buffer;
+    uint16_t sds_b = 1;
+
+    dfacc = RZA_IO_RegRead_16(&USB201.D1FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
+
+    if (dfacc == 2)
+    {
+        sds_b = 32;
+    }
+    else if (dfacc == 1)
+    {
+        sds_b = 16;
+    }
+    else
+    {
+        if (g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 2)
+        {
+            sds_b = 4;
+        }
+        else if (g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 1)
+        {
+            sds_b = 2;
+        }
+        else
+        {
+            sds_b = 1;
+        }
+    }
+
+    if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+    {
+        if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
+        {
+            buffer = USB201.D1FIFOCTR;
+            dtln   = (buffer & USB_FUNCTION_BITDTLN);
+
+            if ((dtln % sds_b) != 0)
+            {
+                remain += (sds_b - (dtln % sds_b));
+            }
+            g_usb1_function_PipeDataSize[pipe] = (g_usb1_function_data_count[pipe] - remain);
+            g_usb1_function_data_count[pipe]   = remain;
+        }
+    }
+
+    RZA_IO_RegWrite_16(&USB201.D1FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_dma_interrupt_d0fifo
+* Description  : This function is DMA interrupt handler entry.
+*              : Execute usb1_function_dmaint() after disabling DMA interrupt in this function.
+*              : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D0FIFO_DMA is
+*              : specified by dma->fifo.
+*              : Register this function as DMA complete interrupt.
+* Arguments    : uint32_t int_sense ; Interrupts detection mode
+*              :                    ;  INTC_LEVEL_SENSITIVE : Level sense
+*              :                    ;  INTC_EDGE_TRIGGER : Edge trigger
+* Return Value : none
+*******************************************************************************/
+void usb1_function_dma_interrupt_d0fifo (uint32_t int_sense)
+{
+    usb1_function_dmaint(USB_FUNCTION_D0FIFO);
+    g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_dma_interrupt_d1fifo
+* Description  : This function is DMA interrupt handler entry.
+*              : Execute usb1_function_dmaint() after disabling DMA interrupt in this function.
+*              : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D1FIFO_DMA is
+*              : specified by dma->fifo.
+*              : Register this function as DMA complete interrupt.
+* Arguments    : uint32_t int_sense ; Interrupts detection mode
+*              :                    ;  INTC_LEVEL_SENSITIVE : Level sense
+*              :                    ;  INTC_EDGE_TRIGGER : Edge trigger
+* Return Value : none
+*******************************************************************************/
+void usb1_function_dma_interrupt_d1fifo (uint32_t int_sense)
+{
+    usb1_function_dmaint(USB_FUNCTION_D1FIFO);
+    g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_dmaint
+* Description  : This function is DMA transfer end interrupt
+* Arguments    : uint16_t fifo  ; fifo number
+*              :                ;  USB_FUNCTION_D0FIFO
+*              :                ;  USB_FUNCTION_D1FIFO
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_dmaint (uint16_t fifo)
+{
+    uint16_t pipe;
+
+    pipe = g_usb1_function_DmaPipe[fifo];
+
+    if (g_usb1_function_DmaInfo[fifo].dir == USB_FUNCTION_BUF2FIFO)
+    {
+        usb1_function_dmaint_buf2fifo(pipe);
+    }
+    else
+    {
+        usb1_function_dmaint_fifo2buf(pipe);
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_dmaint_fifo2buf
+* Description  : Executes read completion from FIFO by DMAC.
+* Arguments    : uint16_t pipe      : pipe number
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_dmaint_fifo2buf (uint16_t pipe)
+{
+    uint32_t remain;
+    uint16_t useport;
+
+    if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
+    {
+        useport = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+        if (useport == USB_FUNCTION_D0FIFO_DMA)
+        {
+            remain = Userdef_USB_usb1_function_stop_dma0();
+            usb1_function_dma_stop_d0(pipe, remain);
+
+            if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+            {
+                if (g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] == USB_FUNCTION_DMA_BUSYEND)
+                {
+                    USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;
+                    g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                }
+                else
+                {
+                    usb1_function_enable_brdy_int(pipe);
+                }
+            }
+        }
+        else
+        {
+            remain = Userdef_USB_usb1_function_stop_dma1();
+            usb1_function_dma_stop_d1(pipe, remain);
+
+            if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+            {
+                if (g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] == USB_FUNCTION_DMA_BUSYEND)
+                {
+                    USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;
+                    g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                }
+                else
+                {
+                    usb1_function_enable_brdy_int(pipe);
+                }
+            }
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_dmaint_buf2fifo
+* Description  : Executes write completion in FIFO by DMAC.
+* Arguments    : uint16_t pipe      : pipe number
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_dmaint_buf2fifo (uint16_t pipe)
+{
+    uint32_t remain;
+    uint16_t useport;
+
+    useport = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+    if (useport == USB_FUNCTION_D0FIFO_DMA)
+    {
+        remain = Userdef_USB_usb1_function_stop_dma0();
+        usb1_function_dma_stop_d0(pipe, remain);
+
+        if (g_usb1_function_DmaBval[USB_FUNCTION_D0FIFO] != 0)
+        {
+            RZA_IO_RegWrite_16(&USB201.D0FIFOCTR,
+                                1,
+                                USB_DnFIFOCTR_BVAL_SHIFT,
+                                USB_DnFIFOCTR_BVAL);
+        }
+    }
+    else
+    {
+        remain = Userdef_USB_usb1_function_stop_dma1();
+        usb1_function_dma_stop_d1(pipe, remain);
+
+        if (g_usb1_function_DmaBval[USB_FUNCTION_D1FIFO] != 0)
+        {
+            RZA_IO_RegWrite_16(&USB201.D1FIFOCTR,
+                                1,
+                                USB_DnFIFOCTR_BVAL_SHIFT,
+                                USB_DnFIFOCTR_BVAL);
+        }
+    }
+
+    usb1_function_enable_bemp_int(pipe);
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_intrn.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_intrn.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,249 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_intrn.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb1_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb1_function_brdy_int
+* Description  : Executes BRDY interrupt(USB_FUNCTION_PIPE1-9).
+*              : According to the pipe that interrupt is generated in,
+*              : reads/writes buffer allocated in the pipe.
+*              : This function is executed in the BRDY interrupt handler.
+*              : This function clears BRDY interrupt status and BEMP interrupt
+*              : status.
+* Arguments    : uint16_t Status       ; BRDYSTS Register Value
+*              : uint16_t Int_enbl     ; BRDYENB Register Value
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb1_function_brdy_int (uint16_t status, uint16_t int_enb)
+{
+    uint32_t int_sense = 0;
+    uint16_t pipe;
+    uint16_t pipebit;
+
+    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+    {
+        pipebit = g_usb1_function_bit_set[pipe];
+
+        if ((status & pipebit) && (int_enb & pipebit))
+        {
+            USB201.BRDYSTS = (uint16_t)~pipebit;
+            USB201.BEMPSTS = (uint16_t)~pipebit;
+            if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
+            {
+                if (g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] != USB_FUNCTION_DMA_READY)
+                {
+                    usb1_function_dma_interrupt_d0fifo(int_sense);
+                }
+
+                if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+                {
+                    usb1_function_read_dma(pipe);
+                    usb1_function_disable_brdy_int(pipe);
+                }
+                else
+                {
+                    USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;
+                    g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                }
+            }
+            else if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA)
+            {
+                if (g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] != USB_FUNCTION_DMA_READY)
+                {
+                    usb1_function_dma_interrupt_d1fifo(int_sense);
+                }
+
+                if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+                {
+                    usb1_function_read_dma(pipe);
+                    usb1_function_disable_brdy_int(pipe);
+                }
+                else
+                {
+                    USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;
+                    g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                }
+            }
+            else
+            {
+                if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0)
+                {
+                    usb1_function_read_buffer(pipe);
+                }
+                else
+                {
+                    usb1_function_write_buffer(pipe);
+                }
+            }
+        }
+    }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_nrdy_int
+* Description  : Executes NRDY interrupt(USB_FUNCTION_PIPE1-9).
+*              : Checks NRDY interrupt cause by PID. When the cause if STALL,
+*              : regards the pipe state as STALL and ends the processing.
+*              : Then the cause is not STALL, increments the error count to
+*              : communicate again. When the error count is 3, determines
+*              : the pipe state as DEVDRV_USBF_PIPE_NORES and ends the processing.
+*              : This function is executed in the NRDY interrupt handler.
+*              : This function clears NRDY interrupt status.
+* Arguments    : uint16_t status       ; NRDYSTS Register Value
+*              : uint16_t int_enb      ; NRDYENB Register Value
+* Return Value : none
+*******************************************************************************/
+void usb1_function_nrdy_int (uint16_t status, uint16_t int_enb)
+{
+    uint16_t pid;
+    uint16_t pipe;
+    uint16_t bitcheck;
+
+    bitcheck = (uint16_t)(status & int_enb);
+
+    USB201.NRDYSTS = (uint16_t)~status;
+
+    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+    {
+        if ((bitcheck&g_usb1_function_bit_set[pipe]) == g_usb1_function_bit_set[pipe])
+        {
+            if (RZA_IO_RegRead_16(&USB201.SYSCFG0, USB_SYSCFG_DCFM_SHIFT, USB_SYSCFG_DCFM) == 1)
+            {
+                if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT)
+                {
+                    pid = usb1_function_get_pid(pipe);
+                    if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
+                    {
+                        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
+                    }
+                    else
+                    {
+                        g_usb1_function_PipeIgnore[pipe]++;
+                        if (g_usb1_function_PipeIgnore[pipe] == 3)
+                        {
+                            g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
+                        }
+                        else
+                        {
+                            usb1_function_set_pid_buf(pipe);
+                        }
+                    }
+                }
+            }
+            else
+            {
+                /* USB Function */
+            }
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_bemp_int
+* Description  : Executes BEMP interrupt(USB_FUNCTION_PIPE1-9).
+* Arguments    : uint16_t status       ; BEMPSTS Register Value
+*              : uint16_t int_enb      ; BEMPENB Register Value
+* Return Value : none
+*******************************************************************************/
+void usb1_function_bemp_int (uint16_t status, uint16_t int_enb)
+{
+    uint16_t pid;
+    uint16_t pipe;
+    uint16_t bitcheck;
+    uint16_t inbuf;
+
+    bitcheck = (uint16_t)(status & int_enb);
+
+    USB201.BEMPSTS = (uint16_t)~status;
+
+    for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+    {
+        if ((bitcheck&g_usb1_function_bit_set[pipe]) == g_usb1_function_bit_set[pipe])
+        {
+            pid = usb1_function_get_pid(pipe);
+
+            if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
+            {
+                g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
+            }
+            else
+            {
+                inbuf = usb1_function_get_inbuf(pipe);
+
+                if (inbuf == 0)
+                {
+                    usb1_function_disable_bemp_int(pipe);
+                    usb1_function_set_pid_nak(pipe);
+                    g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                }
+            }
+        }
+    }
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_lib.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/common/usb1_function_lib.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,2044 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_lib.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb1_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb1_function_enable_brdy_int
+* Description  : Enables BRDY interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
+*              : BRDY. Enables BRDY interrupt in the pipe specified by the argument
+*              : in the disabled status. After enabling BRDY, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe           ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_enable_brdy_int (uint16_t pipe)
+{
+    /* enable brdy interrupt */
+    USB201.BRDYENB |= (uint16_t)g_usb1_function_bit_set[pipe];
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_disable_brdy_int
+* Description  : Disables BRDY interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
+*              : BRDY. Enables BRDY interrupt in the pipe specified by the argument
+*              : in the disabled status. After disabling BRDY, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_disable_brdy_int (uint16_t pipe)
+{
+    /* disable brdy interrupt */
+    USB201.BRDYENB &= (uint16_t)~(g_usb1_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_clear_brdy_sts
+* Description  : Clear BRDY interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_clear_brdy_sts (uint16_t pipe)
+{
+    /* clear brdy status */
+    USB201.BRDYSTS = (uint16_t)~(g_usb1_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_enable_bemp_int
+* Description  : Enables BEMP interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
+*              : BEMP. Enables BEMP interrupt in the pipe specified by the argument
+*              : in the disabled status. After enabling BEMP, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe           ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_enable_bemp_int (uint16_t pipe)
+{
+    /* enable bemp interrupt */
+    USB201.BEMPENB |= (uint16_t)g_usb1_function_bit_set[pipe];
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_disable_bemp_int
+* Description  : Disables BEMP interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
+*              : BEMP. Enables BEMP interrupt in the pipe specified by the argument
+*              : in the disabled status. After enabling BEMP, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe           ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_disable_bemp_int (uint16_t pipe)
+{
+    /* disable bemp interrupt */
+    USB201.BEMPENB &= (uint16_t)~(g_usb1_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_clear_bemp_sts
+* Description  : Clear BEMP interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_clear_bemp_sts (uint16_t pipe)
+{
+    /* clear bemp status */
+    USB201.BEMPSTS = (uint16_t)~(g_usb1_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_enable_nrdy_int
+* Description  : Enables NRDY interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
+*              : NRDY. Enables NRDY interrupt in the pipe specified by the argument
+*              : in the disabled status. After enabling NRDY, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe             ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_enable_nrdy_int (uint16_t pipe)
+{
+    /* enable nrdy interrupt */
+    USB201.NRDYENB |= (uint16_t)g_usb1_function_bit_set[pipe];
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_disable_nrdy_int
+* Description  : Disables NRDY interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
+*              : NRDY. Disables NRDY interrupt in the pipe specified by the argument
+*              : in the disabled status. After disabling NRDY, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_disable_nrdy_int (uint16_t pipe)
+{
+    /* disable nrdy interrupt */
+    USB201.NRDYENB &= (uint16_t)~(g_usb1_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_clear_nrdy_sts
+* Description  : Clear NRDY interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_clear_nrdy_sts (uint16_t pipe)
+{
+    /* clear nrdy status */
+    USB201.NRDYSTS = (uint16_t)~(g_usb1_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_is_hispeed
+* Description  : Returns the result of USB reset hand shake (RHST) as
+*              : return value.
+* Arguments    : none
+* Return Value : USB_FUNCTION_HIGH_SPEED    ; Hi-Speed
+*              : USB_FUNCTION_FULL_SPEED    ; Full-Speed
+*              : LOW_SPEED                  ; Low-Speed
+*              : USB_FUNCTION_NON_SPEED     ; error
+*******************************************************************************/
+uint16_t usb1_function_is_hispeed (void)
+{
+    uint16_t rhst;
+    uint16_t speed;
+
+    rhst = RZA_IO_RegRead_16(&USB201.DVSTCTR0, USB_DVSTCTR0_RHST_SHIFT, USB_DVSTCTR0_RHST);
+
+    if (rhst == USB_FUNCTION_HSMODE)
+    {
+        speed = USB_FUNCTION_HIGH_SPEED;
+    }
+    else if (rhst == USB_FUNCTION_FSMODE)
+    {
+        speed = USB_FUNCTION_FULL_SPEED;
+    }
+    else if (rhst == USB_FUNCTION_LSMODE)
+    {
+        speed = USB_FUNCTION_LOW_SPEED;
+    }
+    else
+    {
+        speed = USB_FUNCTION_NON_SPEED;
+    }
+
+    return speed;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_is_hispeed_enable
+* Description  : Returns the USB High-Speed connection enabled status as
+*              : return value.
+* Arguments    : none
+* Return Value : DEVDRV_USBF_YES  : Hi-Speed Enable
+*              : DEVDRV_USBF_NO   : Hi-Speed Disable
+*******************************************************************************/
+uint16_t usb1_function_is_hispeed_enable (void)
+{
+    uint16_t ret;
+
+    ret = DEVDRV_USBF_NO;
+
+    if (RZA_IO_RegRead_16(&USB201.SYSCFG0, USB_SYSCFG_HSE_SHIFT, USB_SYSCFG_HSE) == 1)
+    {
+        ret = DEVDRV_USBF_YES;
+    }
+
+    return ret;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_pid_buf
+* Description  : Enables communicaqtion in the pipe specified by the argument
+*              : (BUF).
+* Arguments    : uint16_t pipe             ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_set_pid_buf (uint16_t pipe)
+{
+    uint16_t pid;
+
+    pid = usb1_function_get_pid(pipe);
+
+    if (pid == DEVDRV_USBF_PID_STALL2)
+    {
+        usb1_function_set_pid_nak(pipe);
+    }
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB201.DCPCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_DCPCTR_PID_SHIFT,
+                                USB_DCPCTR_PID);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_9_PID_SHIFT,
+                                USB_PIPEnCTR_9_PID);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_pid_nak
+* Description  : Disables communication (NAK) in the pipe specified by the argument.
+*              : When the pipe status was enabling communication (BUF) before
+*              : executing before executing this function, waits in the software
+*              : until the pipe becomes ready after setting disabled.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_set_pid_nak (uint16_t pipe)
+{
+    uint16_t pid;
+    uint16_t pbusy;
+    uint32_t loop;
+
+    pid = usb1_function_get_pid(pipe);
+
+    if (pid == DEVDRV_USBF_PID_STALL2)
+    {
+        usb1_function_set_pid_stall(pipe);
+    }
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB201.DCPCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_DCPCTR_PID_SHIFT,
+                                USB_DCPCTR_PID);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_9_PID_SHIFT,
+                                USB_PIPEnCTR_9_PID);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        default:
+        break;
+    }
+
+    if (pid == DEVDRV_USBF_PID_BUF)
+    {
+        for (loop = 0; loop < 200; loop++)
+        {
+            switch (pipe)
+            {
+                case USB_FUNCTION_PIPE0:
+                    pbusy = RZA_IO_RegRead_16(&USB201.DCPCTR,
+                                                USB_DCPCTR_PBUSY_SHIFT,
+                                                USB_DCPCTR_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE1:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE2:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE3:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE4:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE5:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE6:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE6CTR,
+                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_6_8_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE7:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE7CTR,
+                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_6_8_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE8:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE8CTR,
+                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_6_8_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE9:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
+                                                USB_PIPEnCTR_9_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_9_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEA:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPEACTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEB:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPEBCTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEC:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPECCTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPED:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPEDCTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEE:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPEECTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEF:
+                    pbusy = RZA_IO_RegRead_16(&USB201.PIPEFCTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                default:
+                    pbusy   = 1;
+                break;
+            }
+
+            if (pbusy == 0)
+            {
+                break;
+            }
+            Userdef_USB_usb1_function_delay_500ns();
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_pid_stall
+* Description  : Disables communication (STALL) in the pipe specified by the
+*              : argument.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_set_pid_stall (uint16_t pipe)
+{
+    uint16_t pid;
+
+    pid = usb1_function_get_pid(pipe);
+    if (pid == DEVDRV_USBF_PID_BUF)
+    {
+        switch (pipe)
+        {
+            case USB_FUNCTION_PIPE0:
+                RZA_IO_RegWrite_16(&USB201.DCPCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_DCPCTR_PID_SHIFT,
+                                    USB_DCPCTR_PID);
+            break;
+
+            case USB_FUNCTION_PIPE1:
+                RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE2:
+                RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE3:
+                RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE4:
+                RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE5:
+                RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE6:
+                RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE7:
+                RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE8:
+                RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE9:
+                RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_9_PID_SHIFT,
+                                    USB_PIPEnCTR_9_PID);
+            break;
+
+            case USB_FUNCTION_PIPEA:
+                RZA_IO_RegWrite_16(&USB201.PIPEACTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEB:
+                RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEC:
+                RZA_IO_RegWrite_16(&USB201.PIPECCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPED:
+                RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEE:
+                RZA_IO_RegWrite_16(&USB201.PIPEECTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEF:
+                RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            default:
+            break;
+        }
+    }
+    else
+    {
+        switch (pipe)
+        {
+            case USB_FUNCTION_PIPE0:
+                RZA_IO_RegWrite_16(&USB201.DCPCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_DCPCTR_PID_SHIFT,
+                                    USB_DCPCTR_PID);
+            break;
+
+            case USB_FUNCTION_PIPE1:
+                RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE2:
+                RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE3:
+                RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE4:
+                RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE5:
+                RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE6:
+                RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE7:
+                RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE8:
+                RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE9:
+                RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_9_PID_SHIFT,
+                                    USB_PIPEnCTR_9_PID);
+            break;
+
+            case USB_FUNCTION_PIPEA:
+                RZA_IO_RegWrite_16(&USB201.PIPEACTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEB:
+                RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEC:
+                RZA_IO_RegWrite_16(&USB201.PIPECCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPED:
+                RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEE:
+                RZA_IO_RegWrite_16(&USB201.PIPEECTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEF:
+                RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            default:
+            break;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_clear_pid_stall
+* Description  : Disables communication (NAK) in the pipe specified by the argument.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_clear_pid_stall (uint16_t pipe)
+{
+    usb1_function_set_pid_nak(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_get_pid
+* Description  : Returns the pipe state specified by the argument.
+* Arguments    : uint16_t pipe          ; Pipe Number
+* Return Value : PID
+*******************************************************************************/
+uint16_t usb1_function_get_pid (uint16_t pipe)
+{
+    uint16_t pid;
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            pid = RZA_IO_RegRead_16(&USB201.DCPCTR,
+                                    USB_DCPCTR_PID_SHIFT,
+                                    USB_DCPCTR_PID);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            pid = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            pid = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            pid = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            pid = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            pid = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            pid = RZA_IO_RegRead_16(&USB201.PIPE6CTR,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            pid = RZA_IO_RegRead_16(&USB201.PIPE7CTR,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            pid = RZA_IO_RegRead_16(&USB201.PIPE8CTR,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            pid = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
+                                    USB_PIPEnCTR_9_PID_SHIFT,
+                                    USB_PIPEnCTR_9_PID);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            pid = RZA_IO_RegRead_16(&USB201.PIPEACTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            pid = RZA_IO_RegRead_16(&USB201.PIPEBCTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            pid = RZA_IO_RegRead_16(&USB201.PIPECCTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            pid = RZA_IO_RegRead_16(&USB201.PIPEDCTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            pid = RZA_IO_RegRead_16(&USB201.PIPEECTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            pid = RZA_IO_RegRead_16(&USB201.PIPEFCTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        default:
+            pid = 0;
+        break;
+    }
+
+    return pid;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_csclr
+* Description  : CSPLIT status clear setting of sprit transaction in specified
+*              : pipe is performed.
+*              : When SQSET bit or SQCLR bit, and SQSET bit or SQCLR bit
+*              : in DCPCTR register are continuously changed (when the sequence
+*              : toggle bit of data PID is continuously changed over two or more pipes),
+*              : the access cycle with 120 ns and more than 5 cycle bus clock is necessary.
+*              : Do not set both SQCLR bit and SQSET bit to 1 at the same time.
+*              : In addition, both bits should be operated after PID is set to NAK.
+*              : However, when it is set to the isochronous transfer as the transfer type
+*              : (TYPE=11), writing in SQSET bit is disabled.
+* Arguments    : uint16_t pipe     ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_set_csclr (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB201.DCPCTR,
+                                1,
+                                USB_DCPCTR_CSCLR_SHIFT,
+                                USB_DCPCTR_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
+                                1,
+                                USB_PIPEnCTR_9_CSCLR_SHIFT,
+                                USB_PIPEnCTR_9_CSCLR);
+        break;
+
+        default:
+            /* PIPEA-F have not CSCLR */
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_sqclr
+* Description  : Sets the sequence bit of the pipe specified by the argument to
+*              : DATA0.
+* Arguments    : uint16_t pipe              ; Pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_set_sqclr (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB201.DCPCTR,
+                                1,
+                                USB_DCPCTR_SQCLR_SHIFT,
+                                USB_DCPCTR_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
+                                1,
+                                USB_PIPEnCTR_9_SQCLR_SHIFT,
+                                USB_PIPEnCTR_9_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_sqset
+* Description  : Sets the sequence bit of the pipe specified by the argument to
+*              : DATA1.
+* Arguments    : uint16_t pipe   ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_set_sqset (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB201.DCPCTR,
+                                1,
+                                USB_DCPCTR_SQSET_SHIFT,
+                                USB_DCPCTR_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
+                                USB_PIPEnCTR_6_8_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
+                                USB_PIPEnCTR_6_8_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
+                                USB_PIPEnCTR_6_8_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
+                                1,
+                                USB_PIPEnCTR_9_SQSET_SHIFT,
+                                USB_PIPEnCTR_9_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_get_sqmon
+* Description  : Toggle bit of specified pipe is obtained
+* Arguments    : uint16_t pipe   ; Pipe number
+* Return Value : sqmon
+*******************************************************************************/
+uint16_t usb1_function_get_sqmon (uint16_t pipe)
+{
+    uint16_t sqmon;
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            sqmon = RZA_IO_RegRead_16(&USB201.DCPCTR,
+                                        USB_DCPCTR_SQMON_SHIFT,
+                                        USB_DCPCTR_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPE6CTR,
+                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
+                                        USB_PIPEnCTR_6_8_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPE7CTR,
+                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
+                                        USB_PIPEnCTR_6_8_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPE8CTR,
+                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
+                                        USB_PIPEnCTR_6_8_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
+                                        USB_PIPEnCTR_9_SQMON_SHIFT,
+                                        USB_PIPEnCTR_9_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPEACTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPEBCTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPECCTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPEDCTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPEECTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            sqmon = RZA_IO_RegRead_16(&USB201.PIPEFCTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        default:
+            sqmon = 0;
+        break;
+    }
+
+    return sqmon;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_aclrm
+* Description  : The buffer of specified pipe is initialized
+* Arguments    : uint16_t pipe    : Pipe
+* Return Value : none
+*******************************************************************************/
+void usb1_function_aclrm (uint16_t pipe)
+{
+    usb1_function_set_aclrm(pipe);
+    usb1_function_clr_aclrm(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_aclrm
+* Description  : The auto buffer clear mode of specified pipe is enabled
+* Arguments    : uint16_t pipe    : Pipe
+* Return Value : none
+*******************************************************************************/
+void usb1_function_set_aclrm (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
+                                1,
+                                USB_PIPEnCTR_9_ACLRM_SHIFT,
+                                USB_PIPEnCTR_9_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_clr_aclrm
+* Description  : The auto buffer clear mode of specified pipe is enabled
+* Arguments    : uint16_t pipe    : Pipe
+* Return Value : none
+*******************************************************************************/
+void usb1_function_clr_aclrm (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
+                                0,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
+                                0,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
+                                0,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
+                                0,
+                                USB_PIPEnCTR_9_ACLRM_SHIFT,
+                                USB_PIPEnCTR_9_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB201.PIPEACTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB201.PIPECCTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB201.PIPEECTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_get_inbuf
+* Description  : Returns INBUFM of the pipe specified by the argument.
+* Arguments    : uint16_t pipe             ; Pipe Number
+* Return Value : inbuf
+*******************************************************************************/
+uint16_t usb1_function_get_inbuf (uint16_t pipe)
+{
+    uint16_t inbuf;
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            inbuf = 0;
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            inbuf = 0;
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            inbuf = 0;
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            inbuf = 0;
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
+                                    USB_PIPEnCTR_9_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_9_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPEACTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPEBCTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPECCTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPEDCTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPEECTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            inbuf = RZA_IO_RegRead_16(&USB201.PIPEFCTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        default:
+            inbuf = 0;
+        break;
+    }
+
+    return inbuf;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_setting_interrupt
+* Description  : Sets the USB module interrupt level.
+* Arguments    : uint8_t level
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb1_function_setting_interrupt (uint8_t level)
+{
+    uint16_t d0fifo_dmaintid;
+    uint16_t d1fifo_dmaintid;
+
+    R_INTC_RegistIntFunc(INTC_ID_USBI1, usb1_function_interrupt);
+    R_INTC_SetPriority(INTC_ID_USBI1, level);
+    R_INTC_Enable(INTC_ID_USBI1);
+
+    d0fifo_dmaintid = Userdef_USB_usb1_function_d0fifo_dmaintid();
+
+    if (d0fifo_dmaintid != 0xFFFF)
+    {
+        R_INTC_RegistIntFunc(d0fifo_dmaintid, usb1_function_dma_interrupt_d0fifo);
+        R_INTC_SetPriority(d0fifo_dmaintid, level);
+        R_INTC_Enable(d0fifo_dmaintid);
+    }
+
+    d1fifo_dmaintid = Userdef_USB_usb1_function_d1fifo_dmaintid();
+
+    if (d1fifo_dmaintid != 0xFFFF)
+    {
+        R_INTC_RegistIntFunc(d1fifo_dmaintid, usb1_function_dma_interrupt_d1fifo);
+        R_INTC_SetPriority(d1fifo_dmaintid, level);
+        R_INTC_Enable(d1fifo_dmaintid);
+    }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_reset_module
+* Description  : Initializes the USB module.
+*              : Enables providing clock to the USB module.
+*              : Sets USB bus wait register.
+* Arguments    : uint16_t clockmode ; 48MHz ; USBFCLOCK_X1_48MHZ
+*              :                    ; 12MHz ; USBFCLOCK_EXTAL_12MHZ
+* Return Value : none
+*******************************************************************************/
+void usb1_function_reset_module (uint16_t clockmode)
+{
+    /* UPLLE bit is only USB0 */
+    if (RZA_IO_RegRead_16(&USB200.SYSCFG0,
+                                USB_SYSCFG_UPLLE_SHIFT,
+                                USB_SYSCFG_UPLLE) == 1)
+    {
+        if ((USB200.SYSCFG0 & USB_FUNCTION_BITUCKSEL) != clockmode)
+        {
+            RZA_IO_RegWrite_16(&USB201.SUSPMODE,
+                                0,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                                0,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+            USB201.SYSCFG0 = 0;
+            USB200.SYSCFG0 = 0;
+            USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
+            Userdef_USB_usb1_function_delay_xms(1);
+            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                                1,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+            RZA_IO_RegWrite_16(&USB201.SUSPMODE,
+                                1,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+        }
+        else
+        {
+            RZA_IO_RegWrite_16(&USB201.SUSPMODE,
+                                0,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+            Userdef_USB_usb1_function_delay_xms(1);
+            RZA_IO_RegWrite_16(&USB201.SUSPMODE,
+                                1,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+        }
+    }
+    else
+    {
+        RZA_IO_RegWrite_16(&USB201.SUSPMODE,
+                            0,
+                            USB_SUSPMODE_SUSPM_SHIFT,
+                            USB_SUSPMODE_SUSPM);
+        RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                            0,
+                            USB_SUSPMODE_SUSPM_SHIFT,
+                            USB_SUSPMODE_SUSPM);
+        USB201.SYSCFG0 = 0;
+        USB200.SYSCFG0 = 0;
+        USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
+        Userdef_USB_usb1_function_delay_xms(1);
+        RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                            1,
+                            USB_SUSPMODE_SUSPM_SHIFT,
+                            USB_SUSPMODE_SUSPM);
+        RZA_IO_RegWrite_16(&USB201.SUSPMODE,
+                            1,
+                            USB_SUSPMODE_SUSPM_SHIFT,
+                            USB_SUSPMODE_SUSPM);
+    }
+
+    USB201.BUSWAIT = (uint16_t)(USB_FUNCTION_BUSWAIT_05 & USB_FUNCTION_BITBWAIT);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_get_buf_size
+* Description  : Obtains pipe buffer size specified by the argument and
+*              : maximum packet size of the USB device in use.
+*              : When USB_FUNCTION_PIPE0 is specified by the argument, obtains the maximum
+*              : packet size of the USB device using the corresponding pipe.
+*              : For the case that USB_FUNCTION_PIPE0 is not assigned by the argument, when the
+*              : corresponding pipe is in continuous transfer mode,
+*              : obtains the buffer size allocated in the corresponcing pipe,
+*              : when incontinuous transfer, obtains maximum packet size.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : Maximum packet size or buffer size
+*******************************************************************************/
+uint16_t usb1_function_get_buf_size (uint16_t pipe)
+{
+    uint16_t size;
+    uint16_t bufsize;
+
+    if (pipe == USB_FUNCTION_PIPE0)
+    {
+        size = RZA_IO_RegRead_16(&USB201.DCPMAXP,
+                                USB_DCPMAXP_MXPS_SHIFT,
+                                USB_DCPMAXP_MXPS);
+    }
+    else
+    {
+        if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_CNTMD_SHIFT, USB_PIPECFG_CNTMD) == 1)
+        {
+            bufsize = RZA_IO_RegRead_16(&g_usb1_function_pipebuf[pipe], USB_PIPEBUF_BUFSIZE_SHIFT, USB_PIPEBUF_BUFSIZE);
+            size = (uint16_t)((bufsize + 1) * USB_FUNCTION_PIPExBUF);
+        }
+        else
+        {
+            size = RZA_IO_RegRead_16(&g_usb1_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
+        }
+    }
+    return size;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_get_mxps
+* Description  : Obtains maximum packet size of the USB device using the pipe
+*              : specified by the argument.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : Max Packet Size
+*******************************************************************************/
+uint16_t usb1_function_get_mxps (uint16_t pipe)
+{
+    uint16_t size;
+
+    if (pipe == USB_FUNCTION_PIPE0)
+    {
+        size = RZA_IO_RegRead_16(&USB201.DCPMAXP,
+                                USB_DCPMAXP_MXPS_SHIFT,
+                                USB_DCPMAXP_MXPS);
+    }
+    else
+    {
+        size = RZA_IO_RegRead_16(&g_usb1_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
+    }
+    return size;
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_api.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_api.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,441 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_api.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb1_function.h"
+#include "dev_drv.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb1_api_function_init
+* Description  : Initializes the USB module in the USB function mode.
+* Arguments    : uint8_t  int_level ; interruput level
+*              : uint16_t mode      : Speed modes
+*              :                    :  USB_FUCNTION_HIGH_SPEED: High-speed device
+*              :                    :  USB_FUCNTION_FULL_SPEED: Full-speed device
+*              : uint16_t clockmode ; 48MHz ; USBFCLOCK_X1_48MHZ
+*              :                    ; 12MHz ; USBFCLOCK_EXTAL_12MHZ
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb1_api_function_init (uint8_t int_level, uint16_t mode, uint16_t clockmode)
+{
+    volatile uint8_t dummy_buf;
+
+    CPG.STBCR7  &= 0xfc;                        /*The clock of USB0/1 modules is permitted  */
+    dummy_buf   = CPG.STBCR7;                   /* (Dummy read)                             */
+
+    usb1_function_setting_interrupt(int_level);
+
+    usb1_function_reset_module(clockmode);      /* reset USB module with setting tranciever */
+                                                /* and HSE=1                                */
+
+    usb1_function_init_status();                /* clear variables                          */
+
+    usb1_function_InitModule(mode);             /* select USB Function and Interrupt Enable */
+                                                /* Detect USB Device to attach or detach    */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_api_function_IsConfigured
+* Description  : Checks if the USB device is configured to return the result as
+*              : the return value.
+* Arguments    : none
+* Return Value : DEVDRV_USBF_YES  : Configured & Configured Suspend
+*              : DEVDRV_USBF_NO   : not Configured
+*******************************************************************************/
+uint16_t usb1_api_function_IsConfigured (void)
+{
+    uint16_t dvst;
+
+    dvst = usb1_function_GetDeviceState();
+
+    if ((dvst == USB_FUNCTION_DVST_CONFIGURED) ||
+        (dvst == USB_FUNCTION_DVST_CONFIGURED_SUSPEND))
+    {
+        return DEVDRV_USBF_YES;
+    }
+
+    return DEVDRV_USBF_NO;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_GetDeviceState
+* Description  : Returns the state of USB device.
+* Arguments    : none
+* Return Value : Device States
+*******************************************************************************/
+uint16_t usb1_function_GetDeviceState (void)
+{
+    uint16_t dvsq;
+    uint16_t dvst;
+
+    dvsq = USB201.INTSTS0;
+    switch (dvsq & USB_FUNCTION_BITDVSQ)
+    {
+        case USB_FUNCTION_DS_POWR:                      /* Power state *//* power-on */
+            dvst = USB_FUNCTION_DVST_POWERED;
+        break;
+
+        case USB_FUNCTION_DS_DFLT:                      /* Default state *//* bus-reset */
+            dvst = USB_FUNCTION_DVST_DEFAULT;
+        break;
+
+        case USB_FUNCTION_DS_ADDS:                      /* Address state */
+            dvst = USB_FUNCTION_DVST_ADDRESS;
+        break;
+
+        case USB_FUNCTION_DS_CNFG:                      /* Configured state */
+            dvst = USB_FUNCTION_DVST_CONFIGURED;
+        break;
+
+        case USB_FUNCTION_DS_SPD_CNFG:                  /* Configured Suspend state */
+            dvst = USB_FUNCTION_DVST_CONFIGURED_SUSPEND;
+        break;
+
+        case USB_FUNCTION_DS_SPD_POWR:                  /* Power      Suspend state */
+        case USB_FUNCTION_DS_SPD_DFLT:                  /* Default    Suspend state */
+        case USB_FUNCTION_DS_SPD_ADDR:                  /* Address    Suspend state */
+            dvst = USB_FUNCTION_DVST_SUSPEND;
+        break;
+
+        default:                                        /* error */
+            dvst = USB_FUNCTION_DVST_SUSPEND;
+        break;
+    }
+
+    return dvst;
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_start_receive_transfer
+* Description  : Starts USB data reception using the pipe specified in the argument.
+*              : The FIFO for using is set in the pipe definition table.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint32_t size      ; Data Size
+*              : uint8_t *data      ; Data data Address
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    usb1_function_start_receive_transfer(pipe, size, data);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_start_send_transfer
+* Description  : Starts the USB data communication using pipe specified by the argument.
+* Arguments    : uint16_t pipe     ; Pipe Number
+*              : uint32_t size     ; Data Size
+*              : uint8_t *data     ; Data data Address
+* Return Value : DEVDRV_USBF_WRITEEND           ; Write end
+*              : DEVDRV_USBF_WRITESHRT          ; short data
+*              : DEVDRV_USBF_WRITING            ; Continue of data write
+*              : DEVDRV_USBF_WRITEDMA           ; Write DMA
+*              : DEVDRV_USBF_FIFOERROR          ; FIFO status
+*******************************************************************************/
+uint16_t usb1_api_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+    uint16_t status;
+
+    status = usb1_function_start_send_transfer(pipe, size, data);
+
+    return status;
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_check_pipe_status
+* Description  : Starts USB data reception using the pipe specified in the argument.
+*              : The FIFO for using is set in the pipe definition table.
+* Arguments    : uint16_t  pipe     ; Pipe Number
+*              : uint32_t *size     ; Data Size
+* Return Value : Pipe Status
+*******************************************************************************/
+uint16_t usb1_api_function_check_pipe_status (uint16_t pipe, uint32_t * size)
+{
+    if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_DONE)
+    {
+        *size = g_usb1_function_PipeDataSize[pipe];
+        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+        return DEVDRV_USBF_PIPE_DONE;
+    }
+    else if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_NORES)
+    {
+        *size = 0;
+        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+        return DEVDRV_USBF_PIPE_NORES;
+    }
+    else if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_STALL)
+    {
+        *size = 0;
+        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+        return DEVDRV_USBF_PIPE_STALL;
+    }
+    else if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_FIFOERROR)
+    {
+        *size = 0;
+        g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+        return DEVDRV_USBF_FIFOERROR;
+    }
+    else
+    {
+        /* Do Nothing */
+    }
+
+    return g_usb1_function_pipe_status[pipe];
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_clear_pipe_status
+* Description  : Starts USB data reception using the pipe specified in the argument.
+*              : The FIFO for using is set in the pipe definition table.
+* Arguments    : uint16_t  pipe     ; Pipe Number
+* Return Value : Pipe Status
+*******************************************************************************/
+void usb1_api_function_clear_pipe_status (uint16_t pipe)
+{
+    g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
+    g_usb1_function_PipeDataSize[pipe] = 0;
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_set_pid_buf
+* Description  : Enables communicaqtion in the pipe specified by the argument
+*              : (BUF).
+* Arguments    : uint16_t pipe             ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_set_pid_buf (uint16_t pipe)
+{
+    usb1_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_set_pid_nak
+* Description  : Disables communication (NAK) in the pipe specified by the argument.
+*              : When the pipe status was enabling communication (BUF) before
+*              : executing before executing this function, waits in the software
+*              : until the pipe becomes ready after setting disabled.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_set_pid_nak (uint16_t pipe)
+{
+    usb1_function_set_pid_nak(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_set_pid_stall
+* Description  : Disables communication (STALL) in the pipe specified by the
+*              : argument.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_set_pid_stall (uint16_t pipe)
+{
+    usb1_function_set_pid_stall(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_clear_pid_stall
+* Description  : Disables communication (NAK) in the pipe specified by the argument.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_clear_pid_stall (uint16_t pipe)
+{
+    usb1_function_clear_pid_stall(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_get_pid
+* Description  : Returns the pipe state specified by the argument.
+* Arguments    : uint16_t pipe          ; Pipe Number
+* Return Value : PID
+*******************************************************************************/
+uint16_t usb1_api_function_get_pid (uint16_t pipe)
+{
+    uint16_t pid;
+
+    pid = usb1_function_get_pid(pipe);
+
+    return pid;
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_check_stall
+* Description  :
+* Arguments    : uint16_t pipe          ; Pipe Number
+* Return Value : PID
+*******************************************************************************/
+int32_t usb1_api_function_check_stall (uint16_t pipe)
+{
+    uint16_t pid;
+
+    pid = usb1_function_get_pid(pipe);
+
+    if ((pid & DEVDRV_USBF_PID_STALL) == DEVDRV_USBF_PID_STALL)
+    {
+        return DEVDRV_USBF_STALL;
+    }
+
+    return DEVDRV_SUCCESS;
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_set_sqclr
+* Description  : Sets the sequence bit of the pipe specified by the argument to
+*              : DATA0.
+* Arguments    : uint16_t pipe              ; Pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_set_sqclr (uint16_t pipe)
+{
+    usb1_function_set_sqclr(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_set_sqset
+* Description  : Sets the sequence bit of the pipe specified by the argument to
+*              : DATA1.
+* Arguments    : uint16_t pipe   ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_set_sqset (uint16_t pipe)
+{
+    usb1_function_set_sqset(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_set_csclr
+* Description  : CSPLIT status clear setting of sprit transaction in specified
+*              : pipe is performed.
+*              : When SQSET bit or SQCLR bit, and SQSET bit or SQCLR bit
+*              : in DCPCTR register are continuously changed (when the sequence
+*              : toggle bit of data PID is continuously changed over two or more pipes),
+*              : the access cycle with 120 ns and more than 5 cycle bus clock is necessary.
+*              : Do not set both SQCLR bit and SQSET bit to 1 at the same time.
+*              : In addition, both bits should be operated after PID is set to NAK.
+*              : However, when it is set to the isochronous transfer as the transfer type
+*              : (TYPE=11), writing in SQSET bit is disabled.
+* Arguments    : uint16_t pipe     ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_set_csclr (uint16_t pipe)
+{
+    usb1_function_set_csclr(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_set_curpipe
+* Description  : Allocates FIF0 specifed by the argument in the pipe assigned
+*              : by the argument.
+* Arguments    : uint16_t pipe      ; Pipe Number
+*              : uint16_t fifosel   ; Select FIFO
+*              : uint16_t isel      ; FIFO Access Direction
+*              : uint16_t mbw       ; FIFO Port Access Bit Width
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
+{
+    usb1_function_set_curpipe(pipe, fifosel, isel, mbw);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_clear_brdy_sts
+* Description  : Clear BRDY interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_clear_brdy_sts (uint16_t pipe)
+{
+    usb1_function_clear_brdy_sts(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_clear_bemp_sts
+* Description  : Clear BEMP interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_clear_bemp_sts (uint16_t pipe)
+{
+    usb1_function_clear_bemp_sts(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_clear_nrdy_sts
+* Description  : Clear NRDY interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_clear_nrdy_sts (uint16_t pipe)
+{
+    usb1_function_clear_nrdy_sts(pipe);
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_controlrw.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_controlrw.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,142 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_controlrw.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb1_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb1_api_function_CtrlReadStart
+* Description  : Executes the USB control read transfer.
+*              : USB host controller <- USB device
+* Arguments    : uint16_t size     ; Data Size
+*              : uint8_t  *data    ; Data Address
+* Return Value : DEVDRV_USBF_WRITEEND          ; End of data write
+*              : DEVDRV_USBF_WRITESHRT         ; End of short data write
+*              : DEVDRV_USBF_WRITING           ; Continue of data write
+*              : DEVDRV_USBF_FIFOERROR         ; FIFO access error
+*******************************************************************************/
+uint16_t usb1_api_function_CtrlReadStart (uint32_t size, uint8_t * data)
+{
+    uint16_t status;
+    uint16_t mbw;
+
+    usb1_function_set_pid_nak(USB_FUNCTION_PIPE0);
+
+    g_usb1_function_data_count[USB_FUNCTION_PIPE0]   = size;
+    g_usb1_function_data_pointer[USB_FUNCTION_PIPE0] = data;
+
+    mbw = usb1_function_get_mbw(g_usb1_function_data_count[USB_FUNCTION_PIPE0],
+                                    (uint32_t)g_usb1_function_data_pointer[USB_FUNCTION_PIPE0]);
+    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
+    USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;
+
+    status = usb1_function_write_buffer_c(USB_FUNCTION_PIPE0);
+
+    /* Peripheral Control sequence */
+    switch (status)
+    {
+        case DEVDRV_USBF_WRITESHRT:                                     /* End of data write */
+        case DEVDRV_USBF_WRITEEND:                                      /* End of data write (not null) */
+        case DEVDRV_USBF_WRITING:                                       /* Continue of data write */
+            usb1_function_enable_bemp_int(USB_FUNCTION_PIPE0);          /* Enable Empty Interrupt */
+            usb1_function_set_pid_buf(USB_FUNCTION_PIPE0);              /* Set BUF */
+        break;
+
+        case DEVDRV_USBF_FIFOERROR:                                     /* FIFO access error */
+        break;
+
+        default:
+        break;
+    }
+
+    return status;                                                      /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_CtrlWriteStart
+* Description  : Executes the USB control write transfer.
+*              : USB host controller -> USB device
+* Arguments    : uint16_t  size         ; Data Size
+*              : uint8_t  *data         ; Data Address
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_CtrlWriteStart (uint32_t size, uint8_t * data)
+{
+    uint16_t mbw;
+
+    usb1_function_set_pid_nak(USB_FUNCTION_PIPE0);
+
+    g_usb1_function_data_count[USB_FUNCTION_PIPE0]   = size;
+    g_usb1_function_data_pointer[USB_FUNCTION_PIPE0] = data;
+
+    mbw = usb1_function_get_mbw(g_usb1_function_data_count[USB_FUNCTION_PIPE0],
+                                    (uint32_t)g_usb1_function_data_pointer[USB_FUNCTION_PIPE0]);
+    usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
+    USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;
+
+    usb1_function_enable_brdy_int(USB_FUNCTION_PIPE0);
+    usb1_function_set_pid_buf(USB_FUNCTION_PIPE0);
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_global.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_global.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,144 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_global.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb1_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+const uint16_t g_usb1_function_bit_set[16] =
+{
+    0x0001, 0x0002, 0x0004, 0x0008,
+    0x0010, 0x0020, 0x0040, 0x0080,
+    0x0100, 0x0200, 0x0400, 0x0800,
+    0x1000, 0x2000, 0x4000, 0x8000
+};
+
+uint32_t g_usb1_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint8_t  * g_usb1_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+uint16_t g_usb1_function_PipeIgnore[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb1_function_PipeTbl[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb1_function_pipe_status[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint32_t g_usb1_function_PipeDataSize[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+USB_FUNCTION_DMA_t g_usb1_function_DmaInfo[2];
+uint16_t g_usb1_function_DmaPipe[2];
+uint16_t g_usb1_function_DmaBval[2];
+uint16_t g_usb1_function_DmaStatus[2];
+
+uint16_t g_usb1_function_CtrZeroLengthFlag;
+
+//uint16_t g_usb1_function_ConfigNum;
+//uint16_t g_usb1_function_Alternate[USB_FUNCTION_ALT_NO];
+//uint16_t g_usb1_function_RemoteWakeupFlag;
+uint16_t g_usb1_function_TestModeFlag;
+uint16_t g_usb1_function_TestModeSelectors;
+
+//uint16_t g_usb1_function_ReqType;
+//uint16_t g_usb1_function_ReqTypeType;
+//uint16_t g_usb1_function_ReqTypeRecip;
+//uint16_t g_usb1_function_ReqRequest;
+//uint16_t g_usb1_function_ReqValue;
+//uint16_t g_usb1_function_ReqIndex;
+//uint16_t g_usb1_function_ReqLength;
+
+//uint16_t g_usb1_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
+
+uint16_t g_usb1_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb1_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb1_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb1_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+
+/*******************************************************************************
+* Function Name: usb1_function_init_status
+* Description  : Initialization USB Sample Driver Variable.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb1_function_init_status (void)
+{
+    uint16_t pipe;
+
+    //g_usb1_function_ConfigNum         = 0;
+    //g_usb1_function_RemoteWakeupFlag  = DEVDRV_USBF_OFF;
+    g_usb1_function_TestModeFlag      = DEVDRV_USBF_OFF;
+    g_usb1_function_CtrZeroLengthFlag = 0;
+
+#if 0
+    usb1_function_clear_alt();
+#endif
+
+    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
+    {
+        g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
+        g_usb1_function_PipeDataSize[pipe] = 0;
+        g_usb1_function_data_count[pipe]   = 0;
+
+        /* pipe configuration in usb1_function_ResetEP() */
+        g_usb1_function_pipecfg[pipe]  = 0;
+        g_usb1_function_pipebuf[pipe]  = 0;
+        g_usb1_function_pipemaxp[pipe] = 0;
+        g_usb1_function_pipeperi[pipe] = 0;
+    }
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_sig.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_sig.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,330 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_sig.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb1_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+static void usb1_function_EnableINTModule(void);
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb1_function_InitModule
+* Description  : Initializes the USB module in the USB function mode.
+* Arguments    : uint16_t mode  ; USB_FUNCTION_HIGH_SPEED ; Hi-Speed Mode
+*              :                ; other                   ; Full-speed Mode
+* Return Value : none
+*******************************************************************************/
+void usb1_function_InitModule (uint16_t mode)
+{
+    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+                        0,
+                        USB_SYSCFG_DCFM_SHIFT,
+                        USB_SYSCFG_DCFM);           /* USB function */
+
+    /* USB module operation enabled     */
+    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+                        1,
+                        USB_SYSCFG_USBE_SHIFT,
+                        USB_SYSCFG_USBE);
+
+    if (mode == USB_FUNCTION_HIGH_SPEED)
+    {
+        RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+                            1,
+                            USB_SYSCFG_HSE_SHIFT,
+                            USB_SYSCFG_HSE);        /* Hi-Speed Mode */
+    }
+    else
+    {
+        RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+                            0,
+                            USB_SYSCFG_HSE_SHIFT,
+                            USB_SYSCFG_HSE);
+    }
+
+    /* for power-on                     */
+    if (usb1_function_CheckVBUStaus() == DEVDRV_USBF_ON)
+    {
+        usb1_function_EnableINTModule();            /* Interrupt Enable */
+        usb1_function_USB_FUNCTION_Attach();        /* pull-up D+ and open D- */
+    }
+    else
+    {
+        usb1_function_USB_FUNCTION_Detach();        /* USB Detach */
+                                                    /* with Interrupt Enable */
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_CheckVBUStaus
+* Description  : Checks the USB-VBUS state to returns the connection state to
+*              : the USB host.
+* Arguments    : none
+* Return Value : DEVDRV_USBF_ON     :   VBUS ON
+*              : DEVDRV_USBF_OFF   :   VBUS OFF
+*******************************************************************************/
+uint16_t usb1_function_CheckVBUStaus (void)
+{
+    uint16_t buf1;
+    uint16_t buf2;
+    uint16_t buf3;
+
+    /* monitor VBUS pins */
+    do
+    {
+        buf1 = RZA_IO_RegRead_16(&USB201.INTSTS0,
+                                USB_INTSTS0_VBSTS_SHIFT,
+                                USB_INTSTS0_VBSTS);
+        Userdef_USB_usb1_function_delay_10us(1);
+        buf2 = RZA_IO_RegRead_16(&USB201.INTSTS0,
+                                USB_INTSTS0_VBSTS_SHIFT,
+                                USB_INTSTS0_VBSTS);
+        Userdef_USB_usb1_function_delay_10us(1);
+        buf3 = RZA_IO_RegRead_16(&USB201.INTSTS0,
+                                USB_INTSTS0_VBSTS_SHIFT,
+                                USB_INTSTS0_VBSTS);
+    } while ((buf1 != buf2) || (buf2 != buf3));
+
+    if (buf1 == DEVDRV_USBF_OFF)
+    {
+        return DEVDRV_USBF_OFF;        /* detach */
+    }
+
+    return DEVDRV_USBF_ON;             /* attach */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_USB_FUNCTION_Attach
+* Description  : Connects to the USB host controller.
+*              : This function pulls up D+.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb1_function_USB_FUNCTION_Attach (void)
+{
+    Userdef_USB_usb1_function_attach();
+
+    Userdef_USB_usb1_function_delay_xms(10);
+
+    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+                        1,
+                        USB_SYSCFG_DPRPU_SHIFT,
+                        USB_SYSCFG_DPRPU);      /* Pull-up D+ and open D- */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_USB_FUNCTION_Detach
+* Description  : Disconnects from the USB host controller.
+*              : This function opens D+/D-.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb1_function_USB_FUNCTION_Detach (void)
+{
+    uint16_t pipe;
+
+    Userdef_USB_usb1_function_detach();
+
+    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
+    {
+        if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_IDLE)
+        {
+            usb1_function_stop_transfer(pipe);
+        }
+    }
+
+    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+                        0,
+                        USB_SYSCFG_DPRPU_SHIFT,
+                        USB_SYSCFG_DPRPU);      /* open D+ and D- */
+
+    /* Detach Recovery */
+    Userdef_USB_usb1_function_delay_500ns();                /* need 1us=500ns * 2 wait */
+    Userdef_USB_usb1_function_delay_500ns();
+
+    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+                        1,
+                        USB_SYSCFG_DCFM_SHIFT,
+                        USB_SYSCFG_DCFM);
+    Userdef_USB_usb1_function_delay_500ns();                /* need 100ns wait but 500ns S/W wait */
+
+    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+                        0,
+                        USB_SYSCFG_DCFM_SHIFT,
+                        USB_SYSCFG_DCFM);
+
+    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+                        0,
+                        USB_SYSCFG_USBE_SHIFT,
+                        USB_SYSCFG_USBE);       /* soft reset module */
+    Userdef_USB_usb1_function_delay_500ns();
+
+    RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+                        1,
+                        USB_SYSCFG_USBE_SHIFT,
+                        USB_SYSCFG_USBE);
+
+    usb1_function_EnableINTModule();            /* Interrupt Enable */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_USB_FUNCTION_BusReset
+* Description  : This function is executed when the USB device is transitioned
+*              : to POWERD_STATE. Sets the device descriptor according to the
+*              : connection speed determined by the USB reset hand shake.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+#if 0	/*The USBHAL in mbed does not need this function*/
+void usb1_function_USB_FUNCTION_BusReset (void)
+{
+    usb1_function_init_status();                                    /* memory clear */
+
+    if (usb1_function_is_hispeed() == USB_FUNCTION_HIGH_SPEED)
+    {
+        usb1_function_ResetDescriptor(USB_FUNCTION_HIGH_SPEED);     /* Device Descriptor reset */
+    }
+    else
+    {
+        usb1_function_ResetDescriptor(USB_FUNCTION_FULL_SPEED);     /* Device Descriptor reset */
+    }
+
+    usb1_function_ResetDCP();                                       /* Default Control PIPE reset */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_USB_FUNCTION_Resume
+* Description  : This function is executed when the USB device detects a resume
+*              : signal.
+*              : The USB sample driver does not operate for this function.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+#if 0	/*The USBHAL in mbed does not need this function*/
+void usb1_function_USB_FUNCTION_Resume (void)
+{
+    /* NOP */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_USB_FUNCTION_Suspend
+* Description  : This function is executed when the USB device detects a suspend
+*              : signal.
+*              : The USB sample driver does not operate for this function.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+#if 0	/*The USBHAL in mbed does not need this function*/
+void usb1_function_USB_FUNCTION_Suspend (void)
+{
+    /* NOP */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_USB_FUNCTION_TestMode
+* Description  : This function is executed when the USB device is transitioned U
+*              : to TEST_MODE by the USB standard request.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb1_function_USB_FUNCTION_TestMode (void)
+{
+    switch (g_usb1_function_TestModeSelectors & USB_FUNCTION_FUNCTION_TEST_SELECT)
+    {
+        case USB_FUNCTION_FUNCTION_TEST_J:
+        case USB_FUNCTION_FUNCTION_TEST_K:
+        case USB_FUNCTION_FUNCTION_TEST_SE0_NAK:
+        case USB_FUNCTION_FUNCTION_TEST_PACKET:
+            RZA_IO_RegWrite_16(&USB201.TESTMODE,
+                                (g_usb1_function_TestModeSelectors >> 8),
+                                USB_TESTMODE_UTST_SHIFT,
+                                USB_TESTMODE_UTST);
+        break;
+
+        case USB_FUNCTION_FUNCTION_TEST_FORCE_ENABLE:
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_EnableINTModule
+* Description  : Enables USB interrupt.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_EnableINTModule (void)
+{
+    uint16_t buf;
+
+    buf  = USB201.INTENB0;
+    buf |= (USB_FUNCTION_BITVBSE | USB_FUNCTION_BITDVSE | USB_FUNCTION_BITCTRE |
+            USB_FUNCTION_BITBEMPE | USB_FUNCTION_BITNRDYE | USB_FUNCTION_BITBRDYE);
+    USB201.INTENB0 = buf;
+
+    usb1_function_enable_bemp_int(USB_FUNCTION_PIPE0);
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_sub.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/function/usb1_function_sub.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,453 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_sub.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb1_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+#if 0
+extern const uint16_t *g_usb1_function_EndPntPtr[];
+extern uint8_t         g_usb1_function_DeviceDescriptor[];
+extern uint8_t        *g_usb1_function_ConfigurationPtr[];
+#endif
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb1_function_ResetDCP
+* Description  : Initializes the default control pipe(DCP).
+* Outline      : Reset default control pipe
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb1_function_ResetDCP (void)
+{
+    USB201.DCPCFG  = 0;
+#if 0
+    USB201.DCPMAXP = g_usb1_function_DeviceDescriptor[7];
+#else
+    USB201.DCPMAXP = 64;
+#endif
+
+    USB201.CFIFOSEL  = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+    USB201.D0FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+    USB201.D1FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_ResetEP
+* Description  : Initializes the end point.
+* Arguments    : uint16_t num          ; Configuration Number
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb1_function_ResetEP (uint16_t num)
+{
+    uint16_t   pipe;
+    uint16_t   ep;
+    uint16_t   index;
+    uint16_t   buf;
+    uint16_t * tbl;
+
+    tbl = (uint16_t *)(g_usb1_function_EndPntPtr[num - 1]);
+
+    for (ep = 1; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
+    {
+        if (g_usb1_function_EPTableIndex[ep] != USB_FUNCTION_EP_ERROR)
+        {
+            index = (uint16_t)(USB_FUNCTION_EPTABLE_LENGTH * g_usb1_function_EPTableIndex[ep]);
+            pipe  = (uint16_t)(tbl[index + 0] & USB_FUNCTION_BITCURPIPE);
+
+            g_usb1_function_PipeTbl[pipe] = (uint16_t)(((tbl[index + 1] & USB_FUNCTION_DIRFIELD) << 3) |
+                                                         ep                                            |
+                                                        (tbl[index + 0] & USB_FUNCTION_FIFO_USE));
+
+            if ((tbl[index + 1] & USB_FUNCTION_DIRFIELD) == USB_FUNCTION_DIR_P_OUT)
+            {
+                tbl[index + 1] |= USB_FUNCTION_SHTNAKON;
+#ifdef  __USB_DMA_BFRE_ENABLE__
+                /* this routine cannnot be perfomred if read operation is executed in buffer size */
+                if (((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA) ||
+                    ((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA))
+                {
+                    tbl[index + 1] |= USB_FUNCTION_BFREON;
+                }
+#endif
+            }
+
+            /* Interrupt Disable */
+            buf  = USB201.BRDYENB;
+            buf &= (uint16_t)~g_usb1_function_bit_set[pipe];
+            USB201.BRDYENB = buf;
+            buf  = USB201.NRDYENB;
+            buf &= (uint16_t)~g_usb1_function_bit_set[pipe];
+            USB201.NRDYENB = buf;
+            buf  = USB201.BEMPENB;
+            buf &= (uint16_t)~g_usb1_function_bit_set[pipe];
+            USB201.BEMPENB = buf;
+
+            usb1_function_set_pid_nak(pipe);
+
+            /* CurrentPIPE Clear */
+            if (RZA_IO_RegRead_16(&USB201.CFIFOSEL,
+                                    USB_CFIFOSEL_CURPIPE_SHIFT,
+                                    USB_CFIFOSEL_CURPIPE) == pipe)
+            {
+                RZA_IO_RegWrite_16(&USB201.CFIFOSEL,
+                                    0,
+                                    USB_CFIFOSEL_CURPIPE_SHIFT,
+                                    USB_CFIFOSEL_CURPIPE);
+            }
+
+            if (RZA_IO_RegRead_16(&USB201.D0FIFOSEL,
+                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
+                                    USB_DnFIFOSEL_CURPIPE) == pipe)
+            {
+                RZA_IO_RegWrite_16(&USB201.D0FIFOSEL,
+                                    0,
+                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
+                                    USB_DnFIFOSEL_CURPIPE);
+            }
+
+            if (RZA_IO_RegRead_16(&USB201.D1FIFOSEL,
+                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
+                                    USB_DnFIFOSEL_CURPIPE) == pipe)
+            {
+                RZA_IO_RegWrite_16(&USB201.D1FIFOSEL,
+                                    0,
+                                    USB_DnFIFOSEL_CURPIPE_SHIFT,
+                                    USB_DnFIFOSEL_CURPIPE);
+            }
+
+            /* PIPE Configuration */
+            USB201.PIPESEL  = pipe;
+            USB201.PIPECFG  = tbl[index + 1];
+            USB201.PIPEBUF  = tbl[index + 2];
+            USB201.PIPEMAXP = tbl[index + 3];
+            USB201.PIPEPERI = tbl[index + 4];
+
+            g_usb1_function_pipecfg[pipe]  = tbl[index + 1];
+            g_usb1_function_pipebuf[pipe]  = tbl[index + 2];
+            g_usb1_function_pipemaxp[pipe] = tbl[index + 3];
+            g_usb1_function_pipeperi[pipe] = tbl[index + 4];
+
+            /* Buffer Clear */
+            usb1_function_set_sqclr(pipe);
+            usb1_function_aclrm(pipe);
+
+            /* init Global */
+            g_usb1_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
+            g_usb1_function_PipeDataSize[pipe] = 0;
+        }
+    }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_EpToPipe
+* Description  : Returns the pipe which end point specified by the argument is
+*              : allocated to.
+* Arguments    : uint16_t ep       ; Direction + Endpoint Number
+* Return Value : USB_FUNCTION_EP_ERROR         : Error
+*              : Others           : Pipe Number
+*******************************************************************************/
+uint16_t usb1_function_EpToPipe (uint16_t ep)
+{
+    uint16_t pipe;
+
+    for (pipe = 1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+    {
+        if ((g_usb1_function_PipeTbl[pipe] & 0x00ff) == ep)
+        {
+            return pipe;
+        }
+    }
+
+    return USB_FUNCTION_EP_ERROR;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_InitEPTable
+* Description  : Sets the end point by the Alternate setting value of the
+*              : configuration number and the interface number specified by the
+*              : argument.
+* Arguments    : uint16_t Con_Num       ; Configuration Number
+*              : uint16_t Int_Num       ; Interface Number
+*              : uint16_t Alt_Num       ; Alternate Setting
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb1_function_InitEPTable (uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num)
+{
+    uint8_t  * ptr;
+    uint16_t   point_interface;
+    uint16_t   point_endpoint;
+    uint16_t   length;
+    uint16_t   start;
+    uint16_t   numbers;
+    uint16_t   endpoint;
+
+    ptr = (uint8_t *)g_usb1_function_ConfigurationPtr[Con_Num - 1];
+    point_interface = *ptr;
+    length = (uint16_t)((uint16_t)*(ptr + 3) << 8 | (uint16_t)*(ptr + 2));
+    ptr  += *ptr;
+    start   = 0;
+    numbers = 0;
+    point_endpoint = 0;
+
+    for (; point_interface < length;)
+    {
+        switch (*(ptr + 1))                                     /* Descriptor Type ? */
+        {
+            case USB_FUNCTION_DT_INTERFACE:                     /* Interface */
+                if ((*(ptr + 2) == Int_Num) && (*(ptr + 3) == Alt_Num))
+                {
+                    numbers = *(ptr + 4);
+                }
+                else
+                {
+                    start  += *(ptr + 4);
+                }
+                point_interface += *ptr;
+                ptr += *ptr;
+            break;
+
+            case USB_FUNCTION_DT_ENDPOINT:                      /* Endpoint */
+                if (point_endpoint < numbers)
+                {
+                    endpoint = (uint16_t)(*(ptr + 2) & 0x0f);
+                    g_usb1_function_EPTableIndex[endpoint] = (uint16_t)(start + point_endpoint);
+                    ++point_endpoint;
+                }
+                point_interface += *ptr;
+                ptr += *ptr;
+            break;
+
+            case USB_FUNCTION_DT_DEVICE:                        /* Device */
+            case USB_FUNCTION_DT_CONFIGURATION:                 /* Configuration */
+            case USB_FUNCTION_DT_STRING:                        /* String */
+            default:                                            /* Class, Vendor, else */
+                point_interface += *ptr;
+                ptr += *ptr;
+            break;
+        }
+    }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_GetConfigNum
+* Description  : Returns the number of configuration referring to the number of
+*              : configuration described in the device descriptor.
+* Arguments    : none
+* Return Value : Number of possible configurations (bNumConfigurations).
+*******************************************************************************/
+#if 0
+uint16_t usb1_function_GetConfigNum (void)
+{
+    return (uint16_t)g_usb1_function_DeviceDescriptor[17];
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_GetInterfaceNum
+* Description  : Returns the number of interface referring to the number of
+*              : interface described in the configuration descriptor.
+* Arguments    : uint16_t num       ; Configuration Number
+* Return Value : Number of this interface (bNumInterfaces).
+*******************************************************************************/
+#if 0
+uint16_t usb1_function_GetInterfaceNum (uint16_t num)
+{
+    return (uint16_t)(*(g_usb1_function_ConfigurationPtr[num - 1] + 4));
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_GetAltNum
+* Description  : Returns the Alternate setting value of the configuration number
+*              : and the interface number specified by the argument.
+* Arguments    : uint16_t Con_Num       ; Configuration Number
+*              : uint16_t Int_Num       ; Interface Number
+* Return Value : Value used to select this alternate setting(bAlternateSetting).
+*******************************************************************************/
+#if 0
+uint16_t usb1_function_GetAltNum (uint16_t Con_Num, uint16_t Int_Num)
+{
+    uint8_t  * ptr;
+    uint16_t   point;
+    uint16_t   alt_num = 0;
+    uint16_t   length;
+
+    ptr = (uint8_t *)(g_usb1_function_ConfigurationPtr[Con_Num - 1]);
+    point = ptr[0];
+    ptr  += ptr[0];                                 /* InterfaceDescriptor[0] */
+    length  = (uint16_t)(*(g_usb1_function_ConfigurationPtr[Con_Num - 1] + 2));
+    length |= (uint16_t)((uint16_t)(*(g_usb1_function_ConfigurationPtr[Con_Num - 1] + 3)) << 8);
+
+    for (; point < length;)                                 /* Search Descriptor Table size */
+    {
+        switch (ptr[1])                                     /* Descriptor Type ? */
+        {
+            case USB_FUNCTION_DT_INTERFACE:                 /* Interface */
+                if (Int_Num == ptr[2])
+                {
+                    alt_num = (uint16_t)ptr[3];             /* Alternate Number count */
+                }
+                point += ptr[0];
+                ptr += ptr[0];
+            break;
+
+            case USB_FUNCTION_DT_DEVICE:                    /* Device */
+            case USB_FUNCTION_DT_CONFIGURATION:             /* Configuration */
+            case USB_FUNCTION_DT_STRING:                    /* String */
+            case USB_FUNCTION_DT_ENDPOINT:                  /* Endpoint */
+            default:                                        /* Class, Vendor, else */
+                point += ptr[0];
+                ptr   += ptr[0];
+            break;
+        }
+    }
+    return alt_num;
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_CheckRemoteWakeup
+* Description  : Returns the result of the remote wake up function is supported
+*              : or not referring to the configuration descriptor.
+* Arguments    : none
+* Return Value : DEVDRV_USBF_ON     :   Support Remote Wakeup
+*              : DEVDRV_USBF_OFF    :   not Support Remote Wakeup
+*******************************************************************************/
+#if 0
+uint16_t usb1_function_CheckRemoteWakeup (void)
+{
+    uint8_t atr;
+
+    if (g_usb1_function_ConfigNum == 0)
+    {
+        return DEVDRV_USBF_OFF;
+    }
+
+    atr = *(g_usb1_function_ConfigurationPtr[g_usb1_function_ConfigNum - 1] + 7);
+
+    if (atr & USB_FUNCTION_CF_RWUP)
+    {
+        return DEVDRV_USBF_ON;
+    }
+
+    return DEVDRV_USBF_OFF;
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_clear_alt
+* Description  : Initializes the Alternate setting area.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb1_function_clear_alt (void)
+{
+    int i;
+
+    for (i = 0; i < USB_FUNCTION_ALT_NO; ++i)
+    {
+        g_usb1_function_Alternate[i] = 0;                           /* Alternate */
+    }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_clear_pipe_tbl
+* Description  : Initializes pipe definition table.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void usb1_function_clear_pipe_tbl (void)
+{
+    int pipe;
+
+    for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
+    {
+        g_usb1_function_PipeTbl[pipe] = 0;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_clear_ep_table_index
+* Description  : Initializes the end point table index.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb1_function_clear_ep_table_index (void)
+{
+    int ep;
+
+    for (ep = 0; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
+    {
+        g_usb1_function_EPTableIndex[ep] = USB_FUNCTION_EP_ERROR;
+    }
+}
+#endif
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/userdef/usb1_function_dmacdrv.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/userdef/usb1_function_dmacdrv.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,698 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_dmacdrv.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include <stdio.h>
+#include "r_typedefs.h"
+#include "iodefine.h"
+#include "rza_io_regrw.h"
+#include "usb1_function_dmacdrv.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+#define DMAC_INDEFINE   (255)       /* Macro definition when REQD bit is not used */
+
+/* ==== Request setting information for on-chip peripheral module ==== */
+typedef enum dmac_peri_req_reg_type
+{
+    DMAC_REQ_MID,
+    DMAC_REQ_RID,
+    DMAC_REQ_AM,
+    DMAC_REQ_LVL,
+    DMAC_REQ_REQD
+} dmac_peri_req_reg_type_t;
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+/* ==== Prototype declaration ==== */
+
+/* ==== Global variable ==== */
+/* On-chip peripheral module request setting table */
+static const uint8_t usb1_function_dmac_peri_req_init_table[8][5] =
+{
+    /* MID,RID,AM,LVL,REQD */
+    {32, 3, 2, 1, 1},    /* USB_0 channel 0 transmit FIFO empty */
+    {32, 3, 2, 1, 0},    /* USB_0 channel 0 receive FIFO full   */
+    {33, 3, 2, 1, 1},    /* USB_0 channel 1 transmit FIFO empty */
+    {33, 3, 2, 1, 0},    /* USB_0 channel 1 receive FIFO full   */
+    {34, 3, 2, 1, 1},    /* USB_1 channel 0 transmit FIFO empty */
+    {34, 3, 2, 1, 0},    /* USB_1 channel 0 receive FIFO full   */
+    {35, 3, 2, 1, 1},    /* USB_1 channel 1 transmit FIFO empty */
+    {35, 3, 2, 1, 0},    /* USB_1 channel 1 receive FIFO full   */
+};
+
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC3_PeriReqInit
+* Description  : Sets the register mode for DMA mode and the on-chip peripheral
+*              : module request for transfer request for DMAC channel 1.
+*              : Executes DMAC initial setting using the DMA information
+*              : specified by the argument *trans_info and the enabled/disabled
+*              : continuous transfer specified by the argument continuation.
+*              : Registers DMAC channel 1 interrupt handler function and sets
+*              : the interrupt priority level. Then enables transfer completion
+*              : interrupt.
+* Arguments    : dmac_transinfo_t *trans_info   : Setting information to DMAC register
+*              : uint32_t          dmamode      : DMA mode (only for DMAC_MODE_REGISTER)
+*              : uint32_t          continuation : Set continuous transfer to be valid
+*              :                                  after DMA transfer has been completed
+*              :             DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
+*              :             DMAC_SAMPLE_SINGLE       : Do not execute continuous transfer
+*              : uint32_t request_factor        : Factor for on-chip peripheral module request
+*              :             DMAC_REQ_OSTM0TINT       : OSTM_0 compare match
+*              :             DMAC_REQ_OSTM1TINT       : OSTM_1 compare match
+*              :             DMAC_REQ_TGI0A           : MTU2_0 input capture/compare match
+*              :                  :
+*              : uint32_t          req_direction: Setting value of CHCFG_n register REQD bit
+* Return Value : none
+*******************************************************************************/
+void usb1_function_DMAC3_PeriReqInit (const dmac_transinfo_t * trans_info,
+                                      uint32_t dmamode, uint32_t continuation,
+                                      uint32_t request_factor, uint32_t req_direction)
+{
+    /* ==== Register mode ==== */
+    if (DMAC_MODE_REGISTER == dmamode)
+    {
+        /* ==== Next0 register set ==== */
+        DMAC3.N0SA_n = trans_info->src_addr;         /* Start address of transfer source      */
+        DMAC3.N0DA_n = trans_info->dst_addr;         /* Start address of transfer destination */
+        DMAC3.N0TB_n = trans_info->count;            /* Total transfer byte count             */
+
+        /* DAD : Transfer destination address counting direction */
+        /* SAD : Transfer source address counting direction      */
+        /* DDS : Transfer destination transfer size              */
+        /* SDS : Transfer source transfer size                   */
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            trans_info->daddr_dir,
+                            DMAC3_CHCFG_n_DAD_SHIFT,
+                            DMAC3_CHCFG_n_DAD);
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            trans_info->saddr_dir,
+                            DMAC3_CHCFG_n_SAD_SHIFT,
+                            DMAC3_CHCFG_n_SAD);
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            trans_info->dst_size,
+                            DMAC3_CHCFG_n_DDS_SHIFT,
+                            DMAC3_CHCFG_n_DDS);
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            trans_info->src_size,
+                            DMAC3_CHCFG_n_SDS_SHIFT,
+                            DMAC3_CHCFG_n_SDS);
+
+        /* DMS  : Register mode                            */
+        /* RSEL : Select Next0 register set                */
+        /* SBE  : No discharge of buffer data when aborted */
+        /* DEM  : No DMA interrupt mask                    */
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            0,
+                            DMAC3_CHCFG_n_DMS_SHIFT,
+                            DMAC3_CHCFG_n_DMS);
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            0,
+                            DMAC3_CHCFG_n_RSEL_SHIFT,
+                            DMAC3_CHCFG_n_RSEL);
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            0,
+                            DMAC3_CHCFG_n_SBE_SHIFT,
+                            DMAC3_CHCFG_n_SBE);
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            0,
+                            DMAC3_CHCFG_n_DEM_SHIFT,
+                            DMAC3_CHCFG_n_DEM);
+
+        /* ---- Continuous transfer ---- */
+        if (DMAC_SAMPLE_CONTINUATION == continuation)
+        {
+            /* REN : Execute continuous transfer                         */
+            /* RSW : Change register set when DMA transfer is completed. */
+            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                                1,
+                                DMAC3_CHCFG_n_REN_SHIFT,
+                                DMAC3_CHCFG_n_REN);
+            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                                1,
+                                DMAC3_CHCFG_n_RSW_SHIFT,
+                                DMAC3_CHCFG_n_RSW);
+        }
+        /* ---- Single transfer ---- */
+        else
+        {
+            /* REN : Do not execute continuous transfer                         */
+            /* RSW : Do not change register set when DMA transfer is completed. */
+            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                                0,
+                                DMAC3_CHCFG_n_REN_SHIFT,
+                                DMAC3_CHCFG_n_REN);
+            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                                0,
+                                DMAC3_CHCFG_n_RSW_SHIFT,
+                                DMAC3_CHCFG_n_RSW);
+        }
+
+        /* TM  : Single transfer                          */
+        /* SEL : Channel setting                          */
+        /* HIEN, LOEN : On-chip peripheral module request */
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            0,
+                            DMAC3_CHCFG_n_TM_SHIFT,
+                            DMAC3_CHCFG_n_TM);
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            3,
+                            DMAC3_CHCFG_n_SEL_SHIFT,
+                            DMAC3_CHCFG_n_SEL);
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            1,
+                            DMAC3_CHCFG_n_HIEN_SHIFT,
+                            DMAC3_CHCFG_n_HIEN);
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            0,
+                            DMAC3_CHCFG_n_LOEN_SHIFT,
+                            DMAC3_CHCFG_n_LOEN);
+
+        /* ---- Set factor by specified on-chip peripheral module request ---- */
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
+                            DMAC3_CHCFG_n_AM_SHIFT,
+                            DMAC3_CHCFG_n_AM);
+        RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
+                            DMAC3_CHCFG_n_LVL_SHIFT,
+                            DMAC3_CHCFG_n_LVL);
+
+        if (usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
+        {
+            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                                usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
+                                DMAC3_CHCFG_n_REQD_SHIFT,
+                                DMAC3_CHCFG_n_REQD);
+        }
+        else
+        {
+            RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+                                req_direction,
+                                DMAC3_CHCFG_n_REQD_SHIFT,
+                                DMAC3_CHCFG_n_REQD);
+        }
+
+        RZA_IO_RegWrite_32(&DMAC23.DMARS,
+                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
+                            DMAC23_DMARS_CH3_RID_SHIFT,
+                            DMAC23_DMARS_CH3_RID);
+        RZA_IO_RegWrite_32(&DMAC23.DMARS,
+                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
+                            DMAC23_DMARS_CH3_MID_SHIFT,
+                            DMAC23_DMARS_CH3_MID);
+
+        /* PR : Round robin mode */
+        RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
+                            1,
+                            DMAC07_DCTRL_0_7_PR_SHIFT,
+                            DMAC07_DCTRL_0_7_PR);
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC3_Open
+* Description  : Enables DMAC channel 3 transfer.
+* Arguments    : uint32_t req : DMAC request mode
+* Return Value :  0 : Succeeded in enabling DMA transfer
+*              : -1 : Failed to enable DMA transfer (due to DMA operation)
+*******************************************************************************/
+int32_t usb1_function_DMAC3_Open (uint32_t req)
+{
+    int32_t ret;
+    volatile uint8_t dummy;
+
+    /* Transferable? */
+    if ((0 == RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
+                                DMAC3_CHSTAT_n_EN_SHIFT,
+                                DMAC3_CHSTAT_n_EN)) &&
+        (0 == RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
+                                DMAC3_CHSTAT_n_TACT_SHIFT,
+                                DMAC3_CHSTAT_n_TACT)))
+    {
+        /* Clear Channel Status Register */
+        RZA_IO_RegWrite_32(&DMAC3.CHCTRL_n,
+                            1,
+                            DMAC3_CHCTRL_n_SWRST_SHIFT,
+                            DMAC3_CHCTRL_n_SWRST);
+        dummy = RZA_IO_RegRead_32(&DMAC3.CHCTRL_n,
+                                DMAC3_CHCTRL_n_SWRST_SHIFT,
+                                DMAC3_CHCTRL_n_SWRST);
+        /* Enable DMA transfer */
+        RZA_IO_RegWrite_32(&DMAC3.CHCTRL_n,
+                            1,
+                            DMAC3_CHCTRL_n_SETEN_SHIFT,
+                            DMAC3_CHCTRL_n_SETEN);
+
+        /* ---- Request by software ---- */
+        if (DMAC_REQ_MODE_SOFT == req)
+        {
+            /* DMA transfer Request by software */
+            RZA_IO_RegWrite_32(&DMAC3.CHCTRL_n,
+                                1,
+                                DMAC3_CHCTRL_n_STG_SHIFT,
+                                DMAC3_CHCTRL_n_STG);
+        }
+
+        ret = 0;
+    }
+    else
+    {
+        ret = -1;
+    }
+
+    return ret;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC3_Close
+* Description  : Aborts DMAC channel 3 transfer. Returns the remaining transfer
+*              : byte count at the time of DMA transfer abort to the argument
+*              : *remain.
+* Arguments    : uint32_t * remain : Remaining transfer byte count when
+*              :                   : DMA transfer is aborted
+* Return Value : none
+*******************************************************************************/
+void usb1_function_DMAC3_Close (uint32_t * remain)
+{
+
+    /* ==== Abort transfer ==== */
+    RZA_IO_RegWrite_32(&DMAC3.CHCTRL_n,
+                        1,
+                        DMAC3_CHCTRL_n_CLREN_SHIFT,
+                        DMAC3_CHCTRL_n_CLREN);
+
+    while (1 == RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
+                                DMAC3_CHSTAT_n_TACT_SHIFT,
+                                DMAC3_CHSTAT_n_TACT))
+    {
+        /* Loop until transfer is aborted */
+    }
+
+    while (1 == RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
+                                DMAC3_CHSTAT_n_EN_SHIFT,
+                                DMAC3_CHSTAT_n_EN))
+    {
+        /* Loop until 0 is set in EN before checking the remaining transfer byte count */
+    }
+    /* ==== Obtain remaining transfer byte count ==== */
+    *remain = DMAC3.CRTB_n;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC3_Load_Set
+* Description  : Sets the transfer source address, transfer destination
+*              : address, and total transfer byte count respectively
+*              : specified by the argument src_addr, dst_addr, and count to
+*              : DMAC channel 3 as DMA transfer information.
+*              : Sets the register set selected by the CHCFG_n register
+*              : RSEL bit from the Next0 or Next1 register set.
+*              : This function should be called when DMA transfer of DMAC
+*              : channel 3 is aboted.
+* Arguments    : uint32_t src_addr : Transfer source address
+*              : uint32_t dst_addr : Transfer destination address
+*              : uint32_t count    : Total transfer byte count
+* Return Value : none
+*******************************************************************************/
+void usb1_function_DMAC3_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
+{
+    uint8_t reg_set;
+
+    /* Obtain register set in use */
+    reg_set = RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
+                                DMAC3_CHSTAT_n_SR_SHIFT,
+                                DMAC3_CHSTAT_n_SR);
+
+    /* ==== Load ==== */
+    if (0 == reg_set)
+    {
+        /* ---- Next0 Register Set ---- */
+        DMAC3.N0SA_n = src_addr;    /* Start address of transfer source      */
+        DMAC3.N0DA_n = dst_addr;    /* Start address of transfer destination */
+        DMAC3.N0TB_n = count;       /* Total transfer byte count             */
+    }
+    else
+    {
+        /* ---- Next1 Register Set ---- */
+        DMAC3.N1SA_n = src_addr;     /* Start address of transfer source      */
+        DMAC3.N1DA_n = dst_addr;     /* Start address of transfer destination */
+        DMAC3.N1TB_n = count;        /* Total transfer byte count             */
+     }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC4_PeriReqInit
+* Description  : Sets the register mode for DMA mode and the on-chip peripheral
+*              : module request for transfer request for DMAC channel 2.
+*              : Executes DMAC initial setting using the DMA information
+*              : specified by the argument *trans_info and the enabled/disabled
+*              : continuous transfer specified by the argument continuation.
+*              : Registers DMAC channel 2 interrupt handler function and sets
+*              : the interrupt priority level. Then enables transfer completion
+*              : interrupt.
+* Arguments    : dmac_transinfo_t * trans_info : Setting information to DMAC
+*              :                               : register
+*              : uint32_t dmamode      : DMA mode (only for DMAC_MODE_REGISTER)
+*              : uint32_t continuation : Set continuous transfer to be valid
+*              :                       : after DMA transfer has been completed
+*              :         DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
+*              :         DMAC_SAMPLE_SINGLE       : Do not execute continuous
+*              :                                  : transfer
+*              : uint32_t request_factor : Factor for on-chip peripheral module
+*              :                         : request
+*              :         DMAC_REQ_OSTM0TINT : OSTM_0 compare match
+*              :         DMAC_REQ_OSTM1TINT : OSTM_1 compare match
+*              :         DMAC_REQ_TGI0A     : MTU2_0 input capture/compare match
+*              :                 :
+*              : uint32_t req_direction : Setting value of CHCFG_n register
+*              :                        : REQD bit
+*******************************************************************************/
+void usb1_function_DMAC4_PeriReqInit (const dmac_transinfo_t * trans_info,
+                                      uint32_t dmamode, uint32_t continuation,
+                                      uint32_t request_factor, uint32_t req_direction)
+{
+    /* ==== Register mode ==== */
+    if (DMAC_MODE_REGISTER == dmamode)
+    {
+        /* ==== Next0 register set ==== */
+        DMAC4.N0SA_n = trans_info->src_addr;        /* Start address of transfer source      */
+        DMAC4.N0DA_n = trans_info->dst_addr;        /* Start address of transfer destination */
+        DMAC4.N0TB_n = trans_info->count;           /* Total transfer byte count             */
+
+        /* DAD : Transfer destination address counting direction */
+        /* SAD : Transfer source address counting direction      */
+        /* DDS : Transfer destination transfer size              */
+        /* SDS : Transfer source transfer size                   */
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            trans_info->daddr_dir,
+                            DMAC4_CHCFG_n_DAD_SHIFT,
+                            DMAC4_CHCFG_n_DAD);
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            trans_info->saddr_dir,
+                            DMAC4_CHCFG_n_SAD_SHIFT,
+                            DMAC4_CHCFG_n_SAD);
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            trans_info->dst_size,
+                            DMAC4_CHCFG_n_DDS_SHIFT,
+                            DMAC4_CHCFG_n_DDS);
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            trans_info->src_size,
+                            DMAC4_CHCFG_n_SDS_SHIFT,
+                            DMAC4_CHCFG_n_SDS);
+
+        /* DMS  : Register mode                            */
+        /* RSEL : Select Next0 register set                */
+        /* SBE  : No discharge of buffer data when aborted */
+        /* DEM  : No DMA interrupt mask                    */
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            0,
+                            DMAC4_CHCFG_n_DMS_SHIFT,
+                            DMAC4_CHCFG_n_DMS);
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            0,
+                            DMAC4_CHCFG_n_RSEL_SHIFT,
+                            DMAC4_CHCFG_n_RSEL);
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            0,
+                            DMAC4_CHCFG_n_SBE_SHIFT,
+                            DMAC4_CHCFG_n_SBE);
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            0,
+                            DMAC4_CHCFG_n_DEM_SHIFT,
+                            DMAC4_CHCFG_n_DEM);
+
+        /* ---- Continuous transfer ---- */
+        if (DMAC_SAMPLE_CONTINUATION == continuation)
+        {
+            /* REN : Execute continuous transfer                         */
+            /* RSW : Change register set when DMA transfer is completed. */
+            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                                1,
+                                DMAC4_CHCFG_n_REN_SHIFT,
+                                DMAC4_CHCFG_n_REN);
+            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                                1,
+                                DMAC4_CHCFG_n_RSW_SHIFT,
+                                DMAC4_CHCFG_n_RSW);
+        }
+        /* ---- Single transfer ---- */
+        else
+        {
+            /* REN : Do not execute continuous transfer                         */
+            /* RSW : Do not change register set when DMA transfer is completed. */
+            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                                0,
+                                DMAC4_CHCFG_n_REN_SHIFT,
+                                DMAC4_CHCFG_n_REN);
+            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                                0,
+                                DMAC4_CHCFG_n_RSW_SHIFT,
+                                DMAC4_CHCFG_n_RSW);
+        }
+
+        /* TM  : Single transfer                          */
+        /* SEL : Channel setting                          */
+        /* HIEN, LOEN : On-chip peripheral module request */
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            0,
+                            DMAC4_CHCFG_n_TM_SHIFT,
+                            DMAC4_CHCFG_n_TM);
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            4,
+                            DMAC4_CHCFG_n_SEL_SHIFT,
+                            DMAC4_CHCFG_n_SEL);
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            1,
+                            DMAC4_CHCFG_n_HIEN_SHIFT,
+                            DMAC4_CHCFG_n_HIEN);
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            0,
+                            DMAC4_CHCFG_n_LOEN_SHIFT,
+                            DMAC4_CHCFG_n_LOEN);
+
+        /* ---- Set factor by specified on-chip peripheral module request ---- */
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
+                            DMAC4_CHCFG_n_AM_SHIFT,
+                            DMAC4_CHCFG_n_AM);
+        RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
+                            DMAC4_CHCFG_n_LVL_SHIFT,
+                            DMAC4_CHCFG_n_LVL);
+        if (usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
+        {
+            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                                usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
+                                DMAC4_CHCFG_n_REQD_SHIFT,
+                                DMAC4_CHCFG_n_REQD);
+        }
+        else
+        {
+            RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+                                req_direction,
+                                DMAC4_CHCFG_n_REQD_SHIFT,
+                                DMAC4_CHCFG_n_REQD);
+        }
+        RZA_IO_RegWrite_32(&DMAC45.DMARS,
+                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
+                            DMAC45_DMARS_CH4_RID_SHIFT,
+                            DMAC45_DMARS_CH4_RID);
+        RZA_IO_RegWrite_32(&DMAC45.DMARS,
+                            usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
+                            DMAC45_DMARS_CH4_MID_SHIFT,
+                            DMAC45_DMARS_CH4_MID);
+
+        /* PR : Round robin mode */
+        RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
+                            1,
+                            DMAC07_DCTRL_0_7_PR_SHIFT,
+                            DMAC07_DCTRL_0_7_PR);
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC4_Open
+* Description  : Enables DMAC channel 4 transfer.
+* Arguments    : uint32_t req : DMAC request mode
+* Return Value :  0 : Succeeded in enabling DMA transfer
+*              : -1 : Failed to enable DMA transfer (due to DMA operation)
+*******************************************************************************/
+int32_t usb1_function_DMAC4_Open (uint32_t req)
+{
+    int32_t ret;
+    volatile uint8_t  dummy;
+
+    /* Transferable? */
+    if ((0 == RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
+                                DMAC4_CHSTAT_n_EN_SHIFT,
+                                DMAC4_CHSTAT_n_EN)) &&
+        (0 == RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
+                                DMAC4_CHSTAT_n_TACT_SHIFT,
+                                DMAC4_CHSTAT_n_TACT)))
+    {
+        /* Clear Channel Status Register */
+        RZA_IO_RegWrite_32(&DMAC4.CHCTRL_n,
+                            1,
+                            DMAC4_CHCTRL_n_SWRST_SHIFT,
+                            DMAC4_CHCTRL_n_SWRST);
+        dummy = RZA_IO_RegRead_32(&DMAC4.CHCTRL_n,
+                                DMAC4_CHCTRL_n_SWRST_SHIFT,
+                                DMAC4_CHCTRL_n_SWRST);
+        /* Enable DMA transfer */
+        RZA_IO_RegWrite_32(&DMAC4.CHCTRL_n,
+                            1,
+                            DMAC4_CHCTRL_n_SETEN_SHIFT,
+                            DMAC4_CHCTRL_n_SETEN);
+
+        /* ---- Request by software ---- */
+        if (DMAC_REQ_MODE_SOFT == req)
+        {
+            /* DMA transfer Request by software */
+            RZA_IO_RegWrite_32(&DMAC4.CHCTRL_n,
+                                1,
+                                DMAC4_CHCTRL_n_STG_SHIFT,
+                                DMAC4_CHCTRL_n_STG);
+        }
+
+        ret = 0;
+    }
+    else
+    {
+        ret = -1;
+    }
+
+    return ret;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC4_Close
+* Description  : Aborts DMAC channel 4 transfer. Returns the remaining transfer
+*              : byte count at the time of DMA transfer abort to the argument
+*              : *remain.
+* Arguments    : uint32_t * remain : Remaining transfer byte count when
+*              :                   : DMA transfer is aborted
+* Return Value : none
+*******************************************************************************/
+void usb1_function_DMAC4_Close (uint32_t * remain)
+{
+
+    /* ==== Abort transfer ==== */
+    RZA_IO_RegWrite_32(&DMAC4.CHCTRL_n,
+                        1,
+                        DMAC4_CHCTRL_n_CLREN_SHIFT,
+                        DMAC4_CHCTRL_n_CLREN);
+
+    while (1 == RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
+                                DMAC4_CHSTAT_n_TACT_SHIFT,
+                                DMAC4_CHSTAT_n_TACT))
+    {
+        /* Loop until transfer is aborted */
+    }
+
+    while (1 == RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
+                                DMAC4_CHSTAT_n_EN_SHIFT,
+                                DMAC4_CHSTAT_n_EN))
+    {
+        /* Loop until 0 is set in EN before checking the remaining transfer byte count */
+    }
+    /* ==== Obtain remaining transfer byte count ==== */
+    *remain = DMAC4.CRTB_n;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC4_Load_Set
+* Description  : Sets the transfer source address, transfer destination
+*              : address, and total transfer byte count respectively
+*              : specified by the argument src_addr, dst_addr, and count to
+*              : DMAC channel 4 as DMA transfer information.
+*              : Sets the register set selected by the CHCFG_n register
+*              : RSEL bit from the Next0 or Next1 register set.
+*              : This function should be called when DMA transfer of DMAC
+*              : channel 4 is aboted.
+* Arguments    : uint32_t src_addr : Transfer source address
+*              : uint32_t dst_addr : Transfer destination address
+*              : uint32_t count    : Total transfer byte count
+* Return Value : none
+*******************************************************************************/
+void usb1_function_DMAC4_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
+{
+    uint8_t reg_set;
+
+    /* Obtain register set in use */
+    reg_set = RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
+                                DMAC4_CHSTAT_n_SR_SHIFT,
+                                DMAC4_CHSTAT_n_SR);
+
+    /* ==== Load ==== */
+    if (0 == reg_set)
+    {
+        /* ---- Next0 Register Set ---- */
+        DMAC4.N0SA_n = src_addr;    /* Start address of transfer source      */
+        DMAC4.N0DA_n = dst_addr;    /* Start address of transfer destination */
+        DMAC4.N0TB_n = count;       /* Total transfer byte count             */
+    }
+    else
+    {
+        /* ---- Next1 Register Set ---- */
+        DMAC4.N1SA_n = src_addr;    /* Start address of transfer source      */
+        DMAC4.N1DA_n = dst_addr;    /* Start address of transfer destination */
+        DMAC4.N1TB_n = count;       /* Total transfer byte count             */
+     }
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/userdef/usb1_function_userdef.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb1/src/userdef/usb1_function_userdef.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,762 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb1_function_userdef.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include <stdio.h>
+#include "r_typedefs.h"
+#include "iodefine.h"
+#include "devdrv_usb_function_api.h"
+#include "usb1_function_dmacdrv.h"  /* common DMAC driver for USB */
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+#define DUMMY_ACCESS OSTM0CNT
+
+/* #define CACHE_WRITEBACK */
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+extern int32_t io_cwb(unsigned long start, unsigned long end);
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+static void usb1_function_enable_dmac0(uint32_t src, uint32_t dst, uint32_t count,
+                                       uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
+static void usb1_function_enable_dmac1(uint32_t src, uint32_t dst, uint32_t count,
+                                       uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
+static void Userdef_USB_usb1_function_delay_10us_2(void);
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_d0fifo_dmaintid
+* Description  : get D0FIFO DMA Interrupt ID
+* Arguments    : none
+* Return Value : D0FIFO DMA Interrupt ID
+*******************************************************************************/
+IRQn_Type Userdef_USB_usb1_function_d0fifo_dmaintid (void)
+{
+#if 0
+    return DMAINT1_IRQn;
+#else
+    return 0xFFFF;
+#endif
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_d1fifo_dmaintid
+* Description  : get D1FIFO DMA Interrupt ID
+* Arguments    : none
+* Return Value : D1FIFO DMA Interrupt ID
+*******************************************************************************/
+IRQn_Type Userdef_USB_usb1_function_d1fifo_dmaintid (void)
+{
+#if 0
+    return DMAINT1_IRQn;
+#else
+    return 0xFFFF;
+#endif
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_attach
+* Description  : Wait for the software of 1ms.
+*              : Alter this function according to the user's system.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb1_function_attach (void)
+{
+    printf("\n");
+    printf("channel 1 attach device\n");
+    printf("\n");
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_detach
+* Description  : Wait for the software of 1ms.
+*              : Alter this function according to the user's system.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb1_function_detach (void)
+{
+    printf("\n");
+    printf("channel 1 detach device\n");
+    printf("\n");
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_delay_1ms
+* Description  : Wait for the software of 1ms.
+*              : Alter this function according to the user's system.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb1_function_delay_1ms (void)
+{
+    volatile int i;
+    volatile unsigned long tmp;
+
+    /*
+     * Wait 1ms (Please change for your MCU).
+     */
+    for (i = 0; i < 1440; ++i)
+    {
+        tmp = DUMMY_ACCESS;
+    }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_delay_xms
+* Description  : Wait for the software in the period of time specified by the
+*              : argument.
+*              : Alter this function according to the user's system.
+* Arguments    : uint32_t msec ; Wait Time (msec)
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb1_function_delay_xms (uint32_t msec)
+{
+    volatile unsigned short i;
+
+    for (i = 0; i < msec; ++i)
+    {
+        Userdef_USB_usb1_function_delay_1ms();
+    }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_delay_10us
+* Description  : Waits for software for the period specified by the argument.
+*              : Alter this function according to the user's system.
+* Arguments    : uint32_t usec ; Wait Time(x 10usec)
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb1_function_delay_10us (uint32_t usec)
+{
+    volatile int i;
+
+    /* Wait 10us (Please change for your MCU) */
+    for (i = 0; i < usec; ++i)
+    {
+        Userdef_USB_usb1_function_delay_10us_2();
+    }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_delay_10us_2
+* Description  : Waits for software for the period specified by the argument.
+*              : Alter this function according to the user's system.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+static void Userdef_USB_usb1_function_delay_10us_2 (void)
+{
+    volatile int i;
+    volatile unsigned long tmp;
+
+    /* Wait 1us (Please change for your MCU) */
+    for (i = 0; i < 14; ++i)
+    {
+        tmp = DUMMY_ACCESS;
+    }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_delay_500ns
+* Description  : Wait for software for 500ns.
+*              : Alter this function according to the user's system.
+* Arguments    : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb1_function_delay_500ns (void)
+{
+    volatile int i;
+    volatile unsigned long tmp;
+
+    /* Wait 500ns (Please change for your MCU) */
+    /* Wait 500ns I clock 266MHz */
+    tmp = DUMMY_ACCESS;
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_start_dma
+* Description  : Enables DMA transfer on the information specified by the argument.
+*              : Set DMAC register by this function to enable DMA transfer.
+*              : After executing this function, USB module is set to start DMA
+*              : transfer. DMA transfer should not wait for DMA transfer complete.
+* Arguments    : USB_FUNCTION_DMA_t *dma   : DMA parameter
+*              :  typedef struct{
+*              :      uint32_t fifo;    FIFO for using
+*              :      uint32_t buffer;  Start address of transfer source/destination
+*              :      uint32_t bytes;   Transfer size(Byte)
+*              :      uint32_t dir;     Transfer direction(0:Buffer->FIFO, 1:FIFO->Buffer)
+*              :      uint32_t size;    DMA transfer size
+*              :   } USB_FUNCTION_DMA_t;
+*              : uint16_t dfacc ; 0 : cycle steal mode
+*              :                  1 : 16byte continuous mode
+*              :                  2 : 32byte continuous mode
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb1_function_start_dma (USB_FUNCTION_DMA_t * dma, uint16_t dfacc)
+{
+    uint32_t trncount;
+    uint32_t src;
+    uint32_t dst;
+    uint32_t size;
+    uint32_t dir;
+#ifdef CACHE_WRITEBACK
+    uint32_t ptr;
+#endif
+
+    trncount = dma->bytes;
+    dir      = dma->dir;
+
+    if (dir == USB_FUNCTION_FIFO2BUF)
+    {
+        /* DxFIFO determination */
+        dst = dma->buffer;
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+        if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+        {
+            src = (uint32_t)(&USB201.D0FIFO.UINT32);
+        }
+        else
+        {
+            src = (uint32_t)(&USB201.D1FIFO.UINT32);
+        }
+        size = dma->size;
+
+        if (size == 0)
+        {
+            src += 3;       /* byte access  */
+        }
+        else if (size == 1)
+        {
+            src += 2;       /* short access */
+        }
+        else
+        {
+            /* Do Nothing */
+        }
+#else
+        size = dma->size;
+
+        if (size == 2)
+        {
+            /* 32bit access */
+            if (dfacc == 2)
+            {
+                /* 32byte access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    src = (uint32_t)(&USB201.D0FIFOB0);
+                }
+                else
+                {
+                    src = (uint32_t)(&USB201.D1FIFOB0);
+                }
+            }
+            else if (dfacc == 1)
+            {
+                /* 16byte access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    src = (uint32_t)(&USB201.D0FIFOB0);
+                }
+                else
+                {
+                    src = (uint32_t)(&USB201.D1FIFOB0);
+                }
+            }
+            else
+            {
+                /* normal access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    src = (uint32_t)(&USB201.D0FIFO.UINT32);
+                }
+                else
+                {
+                    src = (uint32_t)(&USB201.D1FIFO.UINT32);
+                }
+            }
+        }
+        else if (size == 1)
+        {
+            /* 16bit access */
+            dfacc = 0;      /* force normal access */
+
+            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+            {
+                src = (uint32_t)(&USB201.D0FIFO.UINT32);
+            }
+            else
+            {
+                src = (uint32_t)(&USB201.D1FIFO.UINT32);
+            }
+            src += 2;       /* short access */
+        }
+        else
+        {
+            /* 8bit access */
+            dfacc = 0;      /* force normal access */
+
+            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+            {
+                src = (uint32_t)(&USB201.D0FIFO.UINT32);
+            }
+            else
+            {
+                src = (uint32_t)(&USB201.D1FIFO.UINT32);
+            }
+            src += 3;       /* byte access */
+        }
+#endif
+    }
+    else
+    {
+        /* DxFIFO determination */
+        src = dma->buffer;
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+        if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+        {
+            dst = (uint32_t)(&USB201.D0FIFO.UINT32);
+        }
+        else
+        {
+            dst = (uint32_t)(&USB201.D1FIFO.UINT32);
+        }
+        size = dma->size;
+
+        if (size == 0)
+        {
+            dst += 3;       /* byte access  */
+        }
+        else if (size == 1)
+        {
+            dst += 2;       /* short access */
+        }
+        else
+        {
+            /* Do Nothing */
+        }
+#else
+        size = dma->size;
+
+        if (size == 2)
+        {
+            /* 32bit access */
+            if (dfacc == 2)
+            {
+                /* 32byte access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    dst = (uint32_t)(&USB201.D0FIFOB0);
+                }
+                else
+                {
+                    dst = (uint32_t)(&USB201.D1FIFOB0);
+                }
+            }
+            else if (dfacc == 1)
+            {
+                /* 16byte access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    dst = (uint32_t)(&USB201.D0FIFOB0);
+                }
+                else
+                {
+                    dst = (uint32_t)(&USB201.D1FIFOB0);
+                }
+            }
+            else
+            {
+                /* normal access */
+                if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+                {
+                    dst = (uint32_t)(&USB201.D0FIFO.UINT32);
+                }
+                else
+                {
+                    dst = (uint32_t)(&USB201.D1FIFO.UINT32);
+                }
+            }
+        }
+        else if (size == 1)
+        {
+            /* 16bit access */
+            dfacc = 0;      /* force normal access */
+            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+            {
+                dst = (uint32_t)(&USB201.D0FIFO.UINT32);
+            }
+            else
+            {
+                dst = (uint32_t)(&USB201.D1FIFO.UINT32);
+            }
+            dst += 2;       /* short access */
+        }
+        else
+        {
+            /* 8bit access */
+            dfacc = 0;      /* force normal access */
+
+            if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+            {
+                dst = (uint32_t)(&USB201.D0FIFO.UINT32);
+            }
+            else
+            {
+                dst = (uint32_t)(&USB201.D1FIFO.UINT32);
+            }
+            dst += 3;       /* byte access  */
+        }
+#endif
+    }
+
+#ifdef CACHE_WRITEBACK
+    ptr = (uint32_t)dma->buffer;
+
+    if ((ptr & 0x20000000ul) == 0)
+    {
+        io_cwb((uint32_t)ptr, (uint32_t)(ptr) + trncount);
+    }
+#endif
+
+    if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+    {
+        usb1_function_enable_dmac0(src, dst, trncount, size, dir, dma->fifo, dfacc);
+    }
+    else
+    {
+        usb1_function_enable_dmac1(src, dst, trncount, size, dir, dma->fifo, dfacc);
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_enable_dmac0
+* Description  : Enables DMA transfer on the information specified by the argument.
+* Arguments    : uint32_t src   : src address
+*              : uint32_t dst   : dst address
+*              : uint32_t count : transfer byte
+*              : uint32_t size  : transfer size
+*              : uint32_t dir   : direction
+*              : uint32_t fifo  : FIFO(D0FIFO or D1FIFO)
+*              : uint16_t dfacc : 0 : normal access
+*              :                : 1 : 16byte access
+*              :                : 2 : 32byte access
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_enable_dmac0 (uint32_t src, uint32_t dst, uint32_t count,
+                                        uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
+{
+    dmac_transinfo_t trans_info;
+    uint32_t         request_factor = 0;
+    int32_t          ret;
+
+    /* ==== Variable setting for DMAC initialization ==== */
+    trans_info.src_addr = (uint32_t)src;                /* Start address of transfer source      */
+    trans_info.dst_addr = (uint32_t)dst;                /* Start address of transfer destination */
+    trans_info.count    = (uint32_t)count;              /* Total byte count to be transferred    */
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+    if (size == 0)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_8;        /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_8;        /* Transfer destination transfer size */
+    }
+    else if (size == 1)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_16;       /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_16;       /* Transfer destination transfer size */
+    }
+    else if (size == 2)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_32;       /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_32;       /* Transfer destination transfer size */
+    }
+    else
+    {
+        printf("size error!!\n");
+    }
+#else
+    if (dfacc == 2)
+    {
+        /* 32byte access */
+        trans_info.src_size = DMAC_TRANS_SIZE_256;      /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_256;      /* Transfer destination transfer size */
+    }
+    else if (dfacc == 1)
+    {
+        /* 16byte access */
+        trans_info.src_size = DMAC_TRANS_SIZE_128;      /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_128;      /* Transfer destination transfer size */
+    }
+    else
+    {
+        /* normal access */
+        if (size == 0)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_8;    /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_8;    /* Transfer destination transfer size */
+        }
+        else if (size == 1)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_16;   /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_16;   /* Transfer destination transfer size */
+        }
+        else if (size == 2)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_32;   /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_32;   /* Transfer destination transfer size */
+        }
+        else
+        {
+            printf("size error!!\n");
+        }
+    }
+#endif
+
+    if (dir == USB_FUNCTION_FIFO2BUF)
+    {
+        request_factor =DMAC_REQ_USB1_DMA0_RX;          /* USB_0 channel 0 receive FIFO full               */
+        trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer source address      */
+        trans_info.daddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer destination address */
+    }
+    else if (dir == USB_FUNCTION_BUF2FIFO)
+    {
+        request_factor =DMAC_REQ_USB1_DMA0_TX;          /* USB_0 channel 0 receive FIFO empty              */
+        trans_info.saddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer source address      */
+        trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer destination address */
+    }
+    else
+    {
+        /* Do Nothing */
+    }
+
+    /* ==== DMAC initialization ==== */
+    usb1_function_DMAC3_PeriReqInit((const dmac_transinfo_t *)&trans_info,
+                                    DMAC_MODE_REGISTER,
+                                    DMAC_SAMPLE_SINGLE,
+                                    request_factor,
+                                    0);     /* Don't care DMAC_REQ_REQD is setting in
+                                            usb1_function_DMAC3_PeriReqInit() */
+
+    /* ==== DMAC startup ==== */
+    ret = usb1_function_DMAC3_Open(DMAC_REQ_MODE_PERI);
+    if (ret != 0)
+    {
+        printf("DMAC3 Open error!!\n");
+    }
+
+    return;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_enable_dmac1
+* Description  : Enables DMA transfer on the information specified by the argument.
+* Arguments    : uint32_t src   : src address
+*              : uint32_t dst   : dst address
+*              : uint32_t count : transfer byte
+*              : uint32_t size  : transfer size
+*              : uint32_t dir   : direction
+*              : uint32_t fifo  : FIFO(D0FIFO or D1FIFO)
+*              : uint16_t dfacc : 0 : normal access
+*              :                : 1 : 16byte access
+*              :                : 2 : 32byte access
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_enable_dmac1 (uint32_t src, uint32_t dst, uint32_t count,
+                                        uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
+{
+    dmac_transinfo_t trans_info;
+    uint32_t         request_factor = 0;
+    int32_t          ret;
+
+    /* ==== Variable setting for DMAC initialization ==== */
+    trans_info.src_addr = (uint32_t)src;                /* Start address of transfer source      */
+    trans_info.dst_addr = (uint32_t)dst;                /* Start address of transfer destination */
+    trans_info.count    = (uint32_t)count;              /* Total byte count to be transferred    */
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+    if (size == 0)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_8;        /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_8;        /* Transfer destination transfer size */
+    }
+    else if (size == 1)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_16;       /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_16;       /* Transfer destination transfer size */
+    }
+    else if (size == 2)
+    {
+        trans_info.src_size = DMAC_TRANS_SIZE_32;       /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_32;       /* Transfer destination transfer size */
+    }
+    else
+    {
+        printf("size error!!\n");
+    }
+#else
+    if (dfacc == 2)
+    {
+        /* 32byte access */
+        trans_info.src_size = DMAC_TRANS_SIZE_256;      /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_256;      /* Transfer destination transfer size */
+    }
+    else if (dfacc == 1)
+    {
+        /* 16byte access */
+        trans_info.src_size = DMAC_TRANS_SIZE_128;      /* Transfer source transfer size      */
+        trans_info.dst_size = DMAC_TRANS_SIZE_128;      /* Transfer destination transfer size */
+    }
+    else
+    {
+        /* normal access */
+        if (size == 0)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_8;    /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_8;    /* Transfer destination transfer size */
+        }
+        else if (size == 1)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_16;   /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_16;   /* Transfer destination transfer size */
+        }
+        else if (size == 2)
+        {
+            trans_info.src_size = DMAC_TRANS_SIZE_32;   /* Transfer source transfer size      */
+            trans_info.dst_size = DMAC_TRANS_SIZE_32;   /* Transfer destination transfer size */
+        }
+        else
+        {
+            printf("size error!!\n");
+        }
+    }
+#endif
+
+    if (dir == USB_FUNCTION_FIFO2BUF)
+    {
+        request_factor =DMAC_REQ_USB1_DMA1_RX;          /* USB_0 channel 0 receive FIFO full               */
+        trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer source address      */
+        trans_info.daddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer destination address */
+    }
+    else if (dir == USB_FUNCTION_BUF2FIFO)
+    {
+        request_factor =DMAC_REQ_USB1_DMA1_TX;          /* USB_0 channel 0 receive FIFO empty              */
+        trans_info.saddr_dir = DMAC_TRANS_ADR_INC;      /* Count direction of transfer source address      */
+        trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC;   /* Count direction of transfer destination address */
+    }
+    else
+    {
+        /* Do Nothing */
+    }
+
+    /* ==== DMAC initialization ==== */
+    usb1_function_DMAC4_PeriReqInit((const dmac_transinfo_t *)&trans_info,
+                                    DMAC_MODE_REGISTER,
+                                    DMAC_SAMPLE_SINGLE,
+                                    request_factor,
+                                    0);     /* Don't care DMAC_REQ_REQD is setting in
+                                            usb1_function_DMAC4_PeriReqInit() */
+
+    /* ==== DMAC startup ==== */
+    ret = usb1_function_DMAC4_Open(DMAC_REQ_MODE_PERI);
+    if (ret != 0)
+    {
+        printf("DMAC4 Open error!!\n");
+    }
+
+    return;
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_stop_dma0
+* Description  : Disables DMA transfer.
+*              : This function should be executed to DMAC executed at the time
+*              : of specification of D0_FIF0_DMA in dma->fifo.
+* Arguments    : none
+* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
+*              : regarding to the bus width.
+*******************************************************************************/
+uint32_t Userdef_USB_usb1_function_stop_dma0 (void)
+{
+    uint32_t remain;
+
+    /* ==== DMAC release ==== */
+    usb1_function_DMAC3_Close(&remain);
+
+    return remain;
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_stop_dma1
+* Description  : Disables DMA transfer.
+*              : This function should be executed to DMAC executed at the time
+*              : of specification of D1_FIF0_DMA in dma->fifo.
+* Arguments    : none
+* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
+*              : regarding to the bus width.
+*******************************************************************************/
+uint32_t Userdef_USB_usb1_function_stop_dma1 (void)
+{
+    uint32_t remain;
+
+    /* ==== DMAC release ==== */
+    usb1_function_DMAC4_Close(&remain);
+
+    return remain;
+}
+
+/* End of File */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb_function_setting.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/usb_function_setting.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,173 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2014 - 2015 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+
+#ifndef USB_FUNCTION_SETTING_H
+#define USB_FUNCTION_SETTING_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define USB_FUNCTION_CH                       0
+#define USB_FUNCTION_HISPEED                  1
+
+#if (USB_FUNCTION_CH == 0)
+#include "usb0_function.h"
+#define USB20X                                USB200
+#define USBIX_IRQn                            USBI0_IRQn
+#define g_usbx_function_bit_set               g_usb0_function_bit_set
+#define g_usbx_function_PipeDataSize          g_usb0_function_PipeDataSize
+#define g_usbx_function_data_count            g_usb0_function_data_count
+#define g_usbx_function_PipeTbl               g_usb0_function_PipeTbl
+#define g_usbx_function_DmaStatus             g_usb0_function_DmaStatus
+#define g_usbx_function_pipecfg               g_usb0_function_pipecfg
+#define g_usbx_function_pipe_status           g_usb0_function_pipe_status
+#define g_usbx_function_data_pointer          g_usb0_function_data_pointer
+#define g_usbx_function_pipebuf               g_usb0_function_pipebuf
+#define g_usbx_function_pipemaxp              g_usb0_function_pipemaxp
+#define g_usbx_function_pipeperi              g_usb0_function_pipeperi
+#define g_usbx_function_TestModeFlag          g_usb0_function_TestModeFlag
+#define usbx_function_BRDYInterruptPIPE0      usb0_function_BRDYInterruptPIPE0
+#define usbx_function_BRDYInterrupt           usb0_function_BRDYInterrupt
+#define usbx_function_NRDYInterruptPIPE0      usb0_function_NRDYInterruptPIPE0
+#define usbx_function_NRDYInterrupt           usb0_function_NRDYInterrupt
+#define usbx_function_BEMPInterruptPIPE0      usb0_function_BEMPInterruptPIPE0
+#define usbx_function_BEMPInterrupt           usb0_function_BEMPInterrupt
+#define usbx_function_read_buffer_c           usb0_function_read_buffer_c
+#define usbx_function_set_pid_buf             usb0_function_set_pid_buf
+#define usbx_function_disable_brdy_int        usb0_function_disable_brdy_int
+#define usbx_function_set_pid_stall           usb0_function_set_pid_stall
+#define usbx_function_dma_interrupt_d0fifo    usb0_function_dma_interrupt_d0fifo
+#define usbx_function_read_dma                usb0_function_read_dma
+#define usbx_function_dma_interrupt_d1fifo    usb0_function_dma_interrupt_d1fifo
+#define usbx_function_write_buffer            usb0_function_write_buffer
+#define usbx_function_set_pid_nak             usb0_function_set_pid_nak
+#define usbx_function_get_mbw                 usb0_function_get_mbw
+#define usbx_function_set_curpipe             usb0_function_set_curpipe
+#define usbx_function_aclrm                   usb0_function_aclrm
+#define usbx_function_enable_nrdy_int         usb0_function_enable_nrdy_int
+#define usbx_function_enable_brdy_int         usb0_function_enable_brdy_int
+#define usbx_function_get_pid                 usb0_function_get_pid
+#define usbx_function_get_inbuf               usb0_function_get_inbuf
+#define usbx_function_disable_bemp_int        usb0_function_disable_bemp_int
+#define usbx_function_EpToPipe                usb0_function_EpToPipe
+#define usbx_function_clear_pipe_tbl          usb0_function_clear_pipe_tbl
+#define Userdef_USB_usbx_function_d0fifo_dmaintid Userdef_USB_usb0_function_d0fifo_dmaintid
+#define Userdef_USB_usbx_function_d1fifo_dmaintid Userdef_USB_usb0_function_d1fifo_dmaintid
+#define usbx_function_reset_module            usb0_function_reset_module
+#define usbx_function_init_status             usb0_function_init_status
+#define usbx_function_InitModule              usb0_function_InitModule
+#define usbx_function_clear_alt               usb0_function_clear_alt
+#define usbx_function_set_sqclr               usb0_function_set_sqclr
+#define usbx_api_function_CtrlWriteStart      usb0_api_function_CtrlWriteStart
+#define usbx_api_function_CtrlReadStart       usb0_api_function_CtrlReadStart
+#define usbx_function_write_buffer_c          usb0_function_write_buffer_c
+#define usbx_api_function_check_pipe_status   usb0_api_function_check_pipe_status
+#define usbx_api_function_set_pid_nak         usb0_api_function_set_pid_nak
+#define usbx_api_function_clear_pipe_status   usb0_api_function_clear_pipe_status
+#define usbx_api_function_start_receive_transfer usb0_api_function_start_receive_transfer
+#define usbx_function_read_buffer             usb0_function_read_buffer
+#define usbx_api_function_start_send_transfer usb0_api_function_start_send_transfer
+#define usbx_function_stop_transfer           usb0_function_stop_transfer
+#define usbx_function_clear_pid_stall         usb0_function_clear_pid_stall
+#define usbx_function_CheckVBUStaus           usb0_function_CheckVBUStaus
+#define usbx_function_USB_FUNCTION_Attach     usb0_function_USB_FUNCTION_Attach
+#define usbx_function_USB_FUNCTION_Detach     usb0_function_USB_FUNCTION_Detach
+#define usbx_function_is_hispeed              usb0_function_is_hispeed
+#define usbx_function_ResetDescriptor         usb0_function_ResetDescriptor
+#define usbx_function_USB_FUNCTION_Suspend    usb0_function_USB_FUNCTION_Suspend
+#define usbx_function_USB_FUNCTION_TestMode   usb0_function_USB_FUNCTION_TestMode
+#else
+#include "usb1_function.h"
+#define USB20X                                USB201
+#define USBIX_IRQn                            USBI1_IRQn
+#define g_usbx_function_bit_set               g_usb1_function_bit_set
+#define g_usbx_function_PipeDataSize          g_usb1_function_PipeDataSize
+#define g_usbx_function_data_count            g_usb1_function_data_count
+#define g_usbx_function_PipeTbl               g_usb1_function_PipeTbl
+#define g_usbx_function_DmaStatus             g_usb1_function_DmaStatus
+#define g_usbx_function_pipecfg               g_usb1_function_pipecfg
+#define g_usbx_function_pipe_status           g_usb1_function_pipe_status
+#define g_usbx_function_data_pointer          g_usb1_function_data_pointer
+#define g_usbx_function_pipebuf               g_usb1_function_pipebuf
+#define g_usbx_function_pipemaxp              g_usb1_function_pipemaxp
+#define g_usbx_function_pipeperi              g_usb1_function_pipeperi
+#define g_usbx_function_TestModeFlag          g_usb1_function_TestModeFlag
+#define usbx_function_BRDYInterruptPIPE0      usb1_function_BRDYInterruptPIPE0
+#define usbx_function_BRDYInterrupt           usb1_function_BRDYInterrupt
+#define usbx_function_NRDYInterruptPIPE0      usb1_function_NRDYInterruptPIPE0
+#define usbx_function_NRDYInterrupt           usb1_function_NRDYInterrupt
+#define usbx_function_BEMPInterruptPIPE0      usb1_function_BEMPInterruptPIPE0
+#define usbx_function_BEMPInterrupt           usb1_function_BEMPInterrupt
+#define usbx_function_read_buffer_c           usb1_function_read_buffer_c
+#define usbx_function_set_pid_buf             usb1_function_set_pid_buf
+#define usbx_function_disable_brdy_int        usb1_function_disable_brdy_int
+#define usbx_function_set_pid_stall           usb1_function_set_pid_stall
+#define usbx_function_dma_interrupt_d0fifo    usb1_function_dma_interrupt_d0fifo
+#define usbx_function_read_dma                usb1_function_read_dma
+#define usbx_function_dma_interrupt_d1fifo    usb1_function_dma_interrupt_d1fifo
+#define usbx_function_write_buffer            usb1_function_write_buffer
+#define usbx_function_set_pid_nak             usb1_function_set_pid_nak
+#define usbx_function_get_mbw                 usb1_function_get_mbw
+#define usbx_function_set_curpipe             usb1_function_set_curpipe
+#define usbx_function_aclrm                   usb1_function_aclrm
+#define usbx_function_enable_nrdy_int         usb1_function_enable_nrdy_int
+#define usbx_function_enable_brdy_int         usb1_function_enable_brdy_int
+#define usbx_function_get_pid                 usb1_function_get_pid
+#define usbx_function_get_inbuf               usb1_function_get_inbuf
+#define usbx_function_disable_bemp_int        usb1_function_disable_bemp_int
+#define usbx_function_EpToPipe                usb1_function_EpToPipe
+#define usbx_function_clear_pipe_tbl          usb1_function_clear_pipe_tbl
+#define Userdef_USB_usbx_function_d0fifo_dmaintid Userdef_USB_usb1_function_d0fifo_dmaintid
+#define Userdef_USB_usbx_function_d1fifo_dmaintid Userdef_USB_usb1_function_d1fifo_dmaintid
+#define usbx_function_reset_module            usb1_function_reset_module
+#define usbx_function_init_status             usb1_function_init_status
+#define usbx_function_InitModule              usb1_function_InitModule
+#define usbx_function_clear_alt               usb1_function_clear_alt
+#define usbx_function_set_sqclr               usb1_function_set_sqclr
+#define usbx_api_function_CtrlWriteStart      usb1_api_function_CtrlWriteStart
+#define usbx_api_function_CtrlReadStart       usb1_api_function_CtrlReadStart
+#define usbx_function_write_buffer_c          usb1_function_write_buffer_c
+#define usbx_api_function_check_pipe_status   usb1_api_function_check_pipe_status
+#define usbx_api_function_set_pid_nak         usb1_api_function_set_pid_nak
+#define usbx_api_function_clear_pipe_status   usb1_api_function_clear_pipe_status
+#define usbx_api_function_start_receive_transfer usb1_api_function_start_receive_transfer
+#define usbx_function_read_buffer             usb1_function_read_buffer
+#define usbx_api_function_start_send_transfer usb1_api_function_start_send_transfer
+#define usbx_function_stop_transfer           usb1_function_stop_transfer
+#define usbx_function_clear_pid_stall         usb1_function_clear_pid_stall
+#define usbx_function_CheckVBUStaus           usb1_function_CheckVBUStaus
+#define usbx_function_USB_FUNCTION_Attach     usb1_function_USB_FUNCTION_Attach
+#define usbx_function_USB_FUNCTION_Detach     usb1_function_USB_FUNCTION_Detach
+#define usbx_function_is_hispeed              usb1_function_is_hispeed
+#define usbx_function_ResetDescriptor         usb1_function_ResetDescriptor
+#define usbx_function_USB_FUNCTION_Suspend    usb1_function_USB_FUNCTION_Suspend
+#define usbx_function_USB_FUNCTION_TestMode   usb1_function_USB_FUNCTION_TestMode
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* USB_FUNCTION_SETTING_H */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/USBEndpoints_RZ_A1H.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/USBEndpoints_RZ_A1H.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,85 @@
+/* Copyright (c) 2010-2011 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#define NUMBER_OF_LOGICAL_ENDPOINTS (16)
+#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS * 2)
+
+/* Define physical endpoint numbers */
+
+/*      Endpoint    No.     Type(s)   MaxSiz  DoubleBuf  pipe */
+/*      ----------------    --------- ------  ---------  ---- */
+#define EP0OUT      (0)  /* Control    256    No           0  */
+#define EP0IN       (1)  /* Control    256    No           0  */
+#define EP1OUT      (2)  /* Int         64    No           6  */
+#define EP1IN       (3)  /* Int         64    No           7  */
+#define EP2OUT      (4)  /* Bulk      2048    Yes          3  */
+#define EP2IN       (5)  /* Bulk      2048    Yes          4  */
+#define EP3OUT      (6)  /* Bulk/Iso  2048    Yes          1  */
+#define EP3IN       (7)  /* Bulk/Iso  2048    Yes          2  */
+/*following EP is not configured in sample program*/
+#define EP6IN       (8)  /* Bulk      2048    Yes          5  */
+#define EP8IN       (9)  /* Int        64     No           8  */
+#define EP9IN       (10) /* Bulk       512    Bulk         9  */
+#define EP10IN      (11) /* Int/Bulk  2048    Bulk        10  */
+#define EP11IN      (12) /* Bulk      2048    Yes         11  */
+#define EP12IN      (13) /* Bulk      2048    Yes         12  */
+#define EP13IN      (14) /* Bulk      2048    Yes         13  */
+#define EP14IN      (15) /* Bulk      2048    Yes         14  */
+#define EP15IN      (16) /* Bulk      2048    Yes         15  */
+
+/* Maximum Packet sizes */
+#define MAX_PACKET_SIZE_EP0   (64)      /*pipe0/pipe0: control      */
+#define MAX_PACKET_SIZE_EP1   (64)      /*pipe6/pipe7: interrupt    */
+#define MAX_PACKET_SIZE_EP2  (512)      /*pipe3/pipe4: bulk         */
+#define MAX_PACKET_SIZE_EP3  (512)      /*pipe1/pipe2: isochronous  */
+#define MAX_PACKET_SIZE_EP6   (64)      /*pipe5:    Note *1 */
+#define MAX_PACKET_SIZE_EP8   (64)      /*pipe7:    Note *1 */
+#define MAX_PACKET_SIZE_EP9  (512)      /*pipe8:    Note *1 */
+#define MAX_PACKET_SIZE_EP10 (512)      /*pipe9:    Note *1 */
+#define MAX_PACKET_SIZE_EP11 (512)      /*pipe10:   Note *1 */
+#define MAX_PACKET_SIZE_EP12 (512)      /*pipe11:   Note *1 */
+#define MAX_PACKET_SIZE_EP13 (512)      /*pipe12:   Note *1 */
+#define MAX_PACKET_SIZE_EP14 (512)      /*pipe13:   Note *1 */
+#define MAX_PACKET_SIZE_EP15 (512)      /*pipe14:   Note *1 */
+/* Note *1: This pipe is not configure in sample program */
+
+
+/* Generic endpoints - intended to be portable accross devices */
+/* and be suitable for simple USB devices. */
+
+/* Bulk endpoints */
+#define EPBULK_OUT  (EP2OUT)
+#define EPBULK_IN   (EP2IN)
+#define EPBULK_OUT_callback   EP2_OUT_callback
+#define EPBULK_IN_callback    EP2_IN_callback
+/* Interrupt endpoints */
+#define EPINT_OUT   (EP1OUT)
+#define EPINT_IN    (EP1IN)
+#define EPINT_OUT_callback    EP1_OUT_callback
+#define EPINT_IN_callback     EP1_IN_callback
+/* Isochronous endpoints */
+#define EPISO_OUT   (EP3OUT)
+#define EPISO_IN    (EP3IN)
+#define EPISO_OUT_callback    EP3_OUT_callback
+#define EPISO_IN_callback     EP3_IN_callback
+
+#define MAX_PACKET_SIZE_EPBULK  (MAX_PACKET_SIZE_EP2)
+#define MAX_PACKET_SIZE_EPINT   (MAX_PACKET_SIZE_EP1)
+#define MAX_PACKET_SIZE_EPISO   (MAX_PACKET_SIZE_EP3)
+
+/*EOF*/
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_RENESAS/USBHAL_RZ_A1H.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_RENESAS/USBHAL_RZ_A1H.cpp	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,1497 @@
+/* Copyright (c) 2010-2011 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person
+* obtaining a copy of this software and associated documentation
+* files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use,
+* copy, modify, merge, publish, distribute, sublicense, and/or
+* sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following
+* conditions:
+*
+* The above copyright notice and this permission notice shall be
+* included in all copies or substantial portions of the
+* Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+* KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+* WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+* PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#if defined(TARGET_RZ_A1H) || defined(TARGET_VK_RZ_A1H)
+
+/*
+  This class can use the pipe1, pipe3 and pipe6 only. You should
+  re-program this class if you wanted to use other pipe.
+ */
+
+/*************************************************************************/
+extern "C"
+{
+#include "r_typedefs.h"
+#include "iodefine.h"
+}
+#include "USBHAL.h"
+#include "devdrv_usb_function_api.h"
+#include "usb_iobitmask.h"
+#include "rza_io_regrw.h"
+#include "USBDevice_Types.h"
+#include "usb_function_setting.h"
+
+
+/*************************************************************************/
+/* constants */
+const struct PIPECFGREC {
+    uint16_t    endpoint;
+    uint16_t    pipesel;
+    uint16_t    pipecfg;
+    uint16_t    pipebuf;
+    uint16_t    pipemaxp;
+    uint16_t    pipeperi;
+} def_pipecfg[] = {
+    /*EP0OUT and EP0IN are configured by USB IP*/
+    {
+        EP1OUT, /*EP1: Host -> Func, INT*/
+        6 | USB_FUNCTION_D0FIFO_USE,
+        USB_FUNCTION_INTERRUPT |
+        USB_FUNCTION_BFREOFF   |
+        USB_FUNCTION_DBLBOFF   |
+        USB_FUNCTION_CNTMDON   |
+        USB_FUNCTION_SHTNAKOFF |
+        USB_FUNCTION_DIR_P_OUT |
+        USB_FUNCTION_EP1,
+        ( ( (  64) / 64 - 1 ) << 10 ) | 0x04u,
+        MAX_PACKET_SIZE_EP1,
+        DEVDRV_USBF_OFF |
+        ( 3 << USB_PIPEPERI_IITV_SHIFT ),
+    },
+    {
+        EP1IN,  /*EP1: Host <- Func, INT*/
+        7 | USB_FUNCTION_D1FIFO_USE,
+        USB_FUNCTION_INTERRUPT |
+        USB_FUNCTION_BFREOFF   |
+        USB_FUNCTION_DBLBOFF   |
+        USB_FUNCTION_CNTMDOFF  |
+        USB_FUNCTION_SHTNAKOFF |
+        USB_FUNCTION_DIR_P_IN  |
+        USB_FUNCTION_EP1,
+        ( ( (  64) / 64 - 1 ) << 10 ) | 0x05u,
+        MAX_PACKET_SIZE_EP1,
+        DEVDRV_USBF_OFF |
+        ( 3 << USB_PIPEPERI_IITV_SHIFT ),
+    },
+    {
+        EP2OUT, /*EP2: Host -> Func, BULK*/
+        3 | USB_FUNCTION_D0FIFO_USE,
+        USB_FUNCTION_BULK      |
+        USB_FUNCTION_BFREOFF   |
+        USB_FUNCTION_DBLBON    |
+        USB_FUNCTION_CNTMDON   |
+        USB_FUNCTION_SHTNAKON  |
+        USB_FUNCTION_DIR_P_OUT |
+        USB_FUNCTION_EP2,
+        ( ( (2048) / 64 - 1 ) << 10 ) | 0x30u,
+        MAX_PACKET_SIZE_EP2,
+        DEVDRV_USBF_OFF |
+        ( 0 << USB_PIPEPERI_IITV_SHIFT ),
+    },
+    {
+        EP2IN,  /*EP2: Host <- Func, BULK*/
+        4 | USB_FUNCTION_D1FIFO_USE,
+        USB_FUNCTION_BULK      |
+        USB_FUNCTION_BFREOFF   |
+        USB_FUNCTION_DBLBOFF   |
+        USB_FUNCTION_CNTMDON   |
+        USB_FUNCTION_SHTNAKOFF |
+        USB_FUNCTION_DIR_P_IN  |
+        USB_FUNCTION_EP2,
+        ( ( (2048) / 64 - 1 ) << 10 ) | 0x50u,
+        MAX_PACKET_SIZE_EP2,
+        DEVDRV_USBF_OFF |
+        ( 0 << USB_PIPEPERI_IITV_SHIFT ),
+    },
+    {
+        EP3OUT, /*EP3: Host -> Func, ISO*/
+        1 | USB_FUNCTION_D0FIFO_USE,
+        USB_FUNCTION_ISO       |
+        USB_FUNCTION_BFREOFF   |
+        USB_FUNCTION_DBLBON    |
+        USB_FUNCTION_CNTMDOFF  |
+        USB_FUNCTION_SHTNAKON  |
+        USB_FUNCTION_DIR_P_OUT |
+        USB_FUNCTION_EP3,
+        ( ( ( 512) / 64 - 1 ) << 10 ) | 0x10u,
+        MAX_PACKET_SIZE_EP3,
+        DEVDRV_USBF_OFF |
+        ( 0 << USB_PIPEPERI_IITV_SHIFT ),
+    },
+    {
+        EP3IN,  /*EP3: Host <- Func, ISO*/
+        2 | USB_FUNCTION_D1FIFO_USE,
+        USB_FUNCTION_ISO       |
+        USB_FUNCTION_BFREOFF   |
+        USB_FUNCTION_DBLBON    |
+        USB_FUNCTION_CNTMDOFF  |
+        USB_FUNCTION_SHTNAKOFF |
+        USB_FUNCTION_DIR_P_IN  |
+        USB_FUNCTION_EP3,
+        ( ( ( 512) / 64 - 1 ) << 10 ) | 0x20u,
+        MAX_PACKET_SIZE_EP3,
+        DEVDRV_USBF_OFF |
+        ( 0 << USB_PIPEPERI_IITV_SHIFT ),
+    },
+    { /*terminator*/
+        0, 0, 0, 0, 0,
+    },
+};
+
+
+/*************************************************************************/
+/* workareas */
+USBHAL * USBHAL::instance;
+
+static IRQn_Type    int_id;         /* interrupt ID          */
+static uint16_t     int_level;      /* initerrupt level      */
+static uint16_t     clock_mode;     /* input clock selector  */
+static uint16_t     mode;           /* USB speed (HIGH/FULL) */
+
+//static DigitalOut *usbx_en;
+
+static uint16_t     EP0_read_status;
+static uint16_t     EPx_read_status;
+
+static uint16_t setup_buffer[MAX_PACKET_SIZE_EP0 / 2];
+
+/* 0: not used / other: a pipe number to use recv_buffer*/
+static uint8_t  recv_buffer[MAX_PACKET_SIZE_EPBULK];
+volatile static uint16_t    recv_error;
+
+
+/*************************************************************************/
+/* prototypes for C */
+extern "C" {
+    void usbx_function_BRDYInterruptPIPE0 (uint16_t status, uint16_t intenb,
+        USBHAL *object, void (USBHAL::*EP0func)(void));
+
+    void usbx_function_BRDYInterrupt (uint16_t status, uint16_t intenb,
+        USBHAL *object, bool (USBHAL::*epCallback[])(void));
+
+    void usbx_function_NRDYInterruptPIPE0(uint16_t status, uint16_t intenb,
+        USBHAL *object, void (USBHAL::*EP0func)(void));
+
+    void usbx_function_NRDYInterrupt (uint16_t status, uint16_t intenb,
+        USBHAL *object, bool (USBHAL::*epCallback[])(void));
+
+    void usbx_function_BEMPInterruptPIPE0(uint16_t status, uint16_t intenb,
+        USBHAL *object, void (USBHAL::*EP0func)(void));
+
+    void usbx_function_BEMPInterrupt (uint16_t status, uint16_t intenb,
+        USBHAL *object, bool (USBHAL::*epCallback[])(void));
+}
+
+
+/*************************************************************************/
+/* macros */
+
+/******************************************************************************
+ * Function Name: usbx_function_BRDYInterruptPIPE0
+ * Description  : Executes BRDY interrupt for pipe0.
+ * Arguments    : uint16_t status       ; BRDYSTS Register Value
+ *              : uint16_t intenb       ; BRDYENB Register Value
+ * Return Value : none
+ *****************************************************************************/
+extern "C" {
+    void usbx_function_BRDYInterruptPIPE0 (
+        uint16_t status,
+        uint16_t intenb,
+        USBHAL *object,
+        void (USBHAL::*EP0func)(void)
+    )
+    {
+        volatile uint16_t dumy_sts;
+        uint16_t read_status;
+
+        USB20X.BRDYSTS =
+            (uint16_t)~g_usbx_function_bit_set[USB_FUNCTION_PIPE0];
+        RZA_IO_RegWrite_16(
+            &USB20X.CFIFOSEL, USB_FUNCTION_PIPE0,
+            USB_CFIFOSEL_CURPIPE_SHIFT, USB_CFIFOSEL_CURPIPE);
+
+        g_usbx_function_PipeDataSize[USB_FUNCTION_PIPE0] =
+            g_usbx_function_data_count[USB_FUNCTION_PIPE0];
+
+        read_status = usbx_function_read_buffer_c(USB_FUNCTION_PIPE0);
+
+        g_usbx_function_PipeDataSize[USB_FUNCTION_PIPE0] -=
+            g_usbx_function_data_count[USB_FUNCTION_PIPE0];
+
+        switch (read_status) {
+            case USB_FUNCTION_READING:      /* Continue of data read */
+            case USB_FUNCTION_READEND:      /* End of data read */
+                /* PID = BUF */
+                usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);
+
+                /*callback*/
+                (object->*EP0func)();
+                break;
+
+            case USB_FUNCTION_READSHRT:     /* End of data read */
+                usbx_function_disable_brdy_int(USB_FUNCTION_PIPE0);
+                /* PID = BUF */
+                usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);
+
+                /*callback*/
+                (object->*EP0func)();
+                break;
+
+            case USB_FUNCTION_READOVER:     /* FIFO access error */
+                /* Buffer Clear */
+                USB20X.CFIFOCTR = USB_FUNCTION_BITBCLR;
+                usbx_function_disable_brdy_int(USB_FUNCTION_PIPE0);
+                /* Req Error */
+                usbx_function_set_pid_stall(USB_FUNCTION_PIPE0);
+
+                /*callback*/
+                (object->*EP0func)();
+                break;
+
+            case DEVDRV_USBF_FIFOERROR:     /* FIFO access error */
+            default:
+                usbx_function_disable_brdy_int(USB_FUNCTION_PIPE0);
+                /* Req Error */
+                usbx_function_set_pid_stall(USB_FUNCTION_PIPE0);
+                break;
+        }
+        /* Three dummy reads for clearing interrupt requests */
+        dumy_sts = USB20X.BRDYSTS;
+    }
+}
+
+
+/******************************************************************************
+ * Function Name: usbx_function_BRDYInterrupt
+ * Description  : Executes BRDY interrupt uxclude pipe0.
+ * Arguments    : uint16_t status       ; BRDYSTS Register Value
+ *              : uint16_t intenb       ; BRDYENB Register Value
+ * Return Value : none
+ *****************************************************************************/
+extern "C" {
+    void usbx_function_BRDYInterrupt(
+        uint16_t status,
+        uint16_t intenb,
+        USBHAL *object,
+        bool (USBHAL::*epCallback[])(void)
+    )
+    {
+        volatile uint16_t dumy_sts;
+
+        /**************************************************************
+         * Function Name: usbx_function_brdy_int
+         * Description  : Executes BRDY interrupt(USB_FUNCTION_PIPE1-9).
+         *              : According to the pipe that interrupt is generated in,
+         *              : reads/writes buffer allocated in the pipe.
+         *              : This function is executed in the BRDY
+         *              : interrupt handler.  This function
+         *              : clears BRDY interrupt status and BEMP
+         *              : interrupt status.
+         * Arguments    : uint16_t Status    ; BRDYSTS Register Value
+         *              : uint16_t Int_enbl  ; BRDYENB Register Value
+         * Return Value : none
+         *************************************************************/
+        /* copied from usbx_function_intrn.c */
+        uint32_t int_sense = 0;
+        uint16_t pipe;
+        uint16_t pipebit;
+        uint16_t ep;
+
+        for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++) {
+            pipebit = g_usbx_function_bit_set[pipe];
+
+            if ((status & pipebit) && (intenb & pipebit)) {
+                USB20X.BRDYSTS = (uint16_t)~pipebit;
+                USB20X.BEMPSTS = (uint16_t)~pipebit;
+
+                switch (g_usbx_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) {
+                    case USB_FUNCTION_D0FIFO_DMA:
+                        if (g_usbx_function_DmaStatus[USB_FUNCTION_D0FIFO] != USB_FUNCTION_DMA_READY) {
+                            /*now, DMA is not supported*/
+                            usbx_function_dma_interrupt_d0fifo(int_sense);
+                        }
+
+                        if (RZA_IO_RegRead_16(
+                                &g_usbx_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0) {
+                            /*now, DMA is not supported*/
+                            usbx_function_read_dma(pipe);
+                            usbx_function_disable_brdy_int(pipe);
+                        } else {
+                            USB20X.D0FIFOCTR = USB_FUNCTION_BITBCLR;
+                            g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                        }
+                        break;
+
+                    case USB_FUNCTION_D1FIFO_DMA:
+                        if (g_usbx_function_DmaStatus[USB_FUNCTION_D1FIFO] != USB_FUNCTION_DMA_READY) {
+                            /*now, DMA is not supported*/
+                            usbx_function_dma_interrupt_d1fifo(int_sense);
+                        }
+
+                        if (RZA_IO_RegRead_16(
+                                &g_usbx_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0) {
+                            /*now, DMA is not supported*/
+                            usbx_function_read_dma(pipe);
+                            usbx_function_disable_brdy_int(pipe);
+                        } else {
+                            USB20X.D1FIFOCTR = USB_FUNCTION_BITBCLR;
+                            g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+                        }
+                        break;
+
+                    default:
+                        ep = (g_usbx_function_pipecfg[pipe] & USB_PIPECFG_EPNUM) >> USB_PIPECFG_EPNUM_SHIFT;
+                        ep <<= 1;
+                        if (RZA_IO_RegRead_16(
+                                &g_usbx_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0) {
+                            /* read */
+                            EPx_read_status = DEVDRV_USBF_PIPE_WAIT;
+                            (object->*(epCallback[ep - 2])) ();
+                            EPx_read_status = DEVDRV_USBF_PIPE_DONE;
+                        } else {
+                            /* write */
+                            EPx_read_status = DEVDRV_USBF_PIPE_WAIT;
+                            (object->*(epCallback[ep - 2 + 1])) ();
+                            EPx_read_status = DEVDRV_USBF_PIPE_DONE;
+                            usbx_function_write_buffer(pipe);
+                        }
+                }
+            }
+        }
+        /* Three dummy reads for clearing interrupt requests */
+        dumy_sts = USB20X.BRDYSTS;
+    }
+}
+
+
+/******************************************************************************
+ * Function Name: usbx_function_NRDYInterruptPIPE0
+ * Description  : Executes NRDY interrupt for pipe0.
+ * Arguments    : uint16_t status       ; NRDYSTS Register Value
+ *              : uint16_t intenb       ; NRDYENB Register Value
+ * Return Value : none
+ *****************************************************************************/
+extern "C" {
+    void usbx_function_NRDYInterruptPIPE0(
+        uint16_t status,
+        uint16_t intenb,
+        USBHAL *object,
+        void (USBHAL::*EP0func)(void)
+    )
+    {
+        volatile uint16_t dumy_sts;
+
+        USB20X.NRDYSTS =
+            (uint16_t)~g_usbx_function_bit_set[USB_FUNCTION_PIPE0];
+
+        /* Three dummy reads for clearing interrupt requests */
+        dumy_sts = USB20X.NRDYSTS;
+    }
+}
+
+
+/******************************************************************************
+ * Function Name: usbx_function_NRDYInterrupt
+ * Description  : Executes NRDY interrupt exclude pipe0.
+ * Arguments    : uint16_t status       ; NRDYSTS Register Value
+ *              : uint16_t intenb       ; NRDYENB Register Value
+ * Return Value : none
+ *****************************************************************************/
+extern "C" {
+    void usbx_function_NRDYInterrupt(
+        uint16_t status,
+        uint16_t intenb,
+        USBHAL *object,
+        bool (USBHAL::*epCallback[])(void)
+    )
+    {
+        volatile uint16_t dumy_sts;
+
+        /**************************************************************
+         * Function Name: usbx_function_nrdy_int
+         * Description  : Executes NRDY interrupt(USB_FUNCTION_PIPE1-9).
+         *              : Checks NRDY interrupt cause by PID. When the cause if STALL,
+         *              : regards the pipe state as STALL and ends the processing.
+         *              : Then the cause is not STALL, increments the error count to
+         *              : communicate again. When the error count is 3, determines
+         *              : the pipe state as DEVDRV_USBF_PIPE_NORES and ends the processing.
+         *              : This function is executed in the NRDY interrupt handler.
+         *              : This function clears NRDY interrupt status.
+         * Arguments    : uint16_t status       ; NRDYSTS Register Value
+         *              : uint16_t int_enb      ; NRDYENB Register Value
+         * Return Value : none
+         *************************************************************/
+        /* copied from usbx_function_intrn.c */
+#if 0
+        uint16_t usefifo;
+#endif
+        uint16_t pid;
+        uint16_t pipe;
+        uint16_t bitcheck;
+#if 0
+        uint16_t mbw;
+        uint32_t size;
+#endif
+        uint16_t ep;
+
+        bitcheck = (uint16_t)(status & intenb);
+
+        USB20X.NRDYSTS = (uint16_t)~status;
+
+
+        if (RZA_IO_RegRead_16(&USB20X.SYSCFG0, USB_SYSCFG_DCFM_SHIFT, USB_SYSCFG_DCFM) == 1) {
+            /* USB HOST */
+            /* not support */
+
+        } else {
+            /* USB Function */
+            for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++) {
+                if ((bitcheck&g_usbx_function_bit_set[pipe]) != g_usbx_function_bit_set[pipe]) {
+                    continue;
+                }
+
+                if (g_usbx_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_WAIT) {
+                    continue;
+                }
+
+#if 0
+                usbx_function_set_pid_nak(pipe);
+
+                size = (uint32_t)g_usbx_function_data_count[pipe];
+                mbw = usbx_function_get_mbw(
+                    size, (uint32_t)g_usbx_function_data_pointer[pipe]);
+
+                usefifo = (uint16_t)(g_usbx_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+                switch (usefifo) {
+
+                    case USB_FUNCTION_D0FIFO_USE:
+                        usbx_function_set_curpipe(
+                            pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+                        USB20X.D0FIFOCTR = USB_FUNCTION_BITBCLR;
+                        break;
+
+                    case USB_FUNCTION_D1FIFO_USE:
+                        usbx_function_set_curpipe(
+                            pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+                        USB20X.D1FIFOCTR = USB_FUNCTION_BITBCLR;
+                        break;
+
+                    default:
+                        usbx_function_set_curpipe(
+                            pipe, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_READ, mbw);
+                        USB20X.CFIFOCTR = USB_FUNCTION_BITBCLR;
+                        break;
+                }
+
+                usbx_function_aclrm(pipe);
+
+                usbx_function_enable_nrdy_int(pipe);
+                usbx_function_enable_brdy_int(pipe);
+
+                usbx_function_set_pid_buf(pipe);
+#endif
+
+                pid = usbx_function_get_pid(pipe);
+                if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2)) {
+                    g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
+                } else {
+                    usbx_function_set_pid_buf(pipe);
+                }
+
+                ep = (g_usbx_function_pipecfg[pipe] & USB_PIPECFG_EPNUM) >> USB_PIPECFG_EPNUM_SHIFT;
+                ep <<= 1;
+                if (RZA_IO_RegRead_16(
+                        &g_usbx_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0) {
+                    /* read */
+                    __NOP();
+                } else {
+                    /* write */
+                    __NOP();
+                }
+            }
+        }
+
+        /* Three dummy reads for clearing interrupt requests */
+        dumy_sts = USB20X.NRDYSTS;
+    }
+}
+
+/******************************************************************************
+ * Function Name: usbx_function_BEMPInterruptPIPE0
+ * Description  : Executes BEMP interrupt for pipe0.
+ * Arguments    : uint16_t status       ; BEMPSTS Register Value
+ *              : uint16_t intenb       ; BEMPENB Register Value
+ * Return Value : none
+ *****************************************************************************/
+extern "C" {
+    void usbx_function_BEMPInterruptPIPE0(
+        uint16_t status,
+        uint16_t intenb,
+        USBHAL *object,
+        void (USBHAL::*EP0func)(void)
+    )
+    {
+        volatile uint16_t dumy_sts;
+
+        USB20X.BEMPSTS =
+            (uint16_t)~g_usbx_function_bit_set[USB_FUNCTION_PIPE0];
+        RZA_IO_RegWrite_16(
+            &USB20X.CFIFOSEL, USB_FUNCTION_PIPE0,
+            USB_CFIFOSEL_CURPIPE_SHIFT, USB_CFIFOSEL_CURPIPE);
+
+        /*usbx_function_write_buffer_c(USB_FUNCTION_PIPE0);*/
+        (object->*EP0func)();
+
+        /* Three dummy reads for clearing interrupt requests */
+        dumy_sts = USB20X.BEMPSTS;
+    }
+}
+
+
+/******************************************************************************
+ * Function Name: usbx_function_BEMPInterrupt
+ * Description  : Executes BEMP interrupt exclude pipe0.
+ * Arguments    : uint16_t status       ; BEMPSTS Register Value
+ *              : uint16_t intenb       ; BEMPENB Register Value
+ * Return Value : none
+ *****************************************************************************/
+extern "C" {
+    void usbx_function_BEMPInterrupt(
+        uint16_t status,
+        uint16_t intenb,
+        USBHAL *object,
+        bool (USBHAL::*epCallback[])(void)
+    )
+    {
+        volatile uint16_t dumy_sts;
+
+        /**************************************************************
+         * Function Name: usbx_function_bemp_int
+         * Description  : Executes BEMP interrupt(USB_FUNCTION_PIPE1-9).
+         * Arguments    : uint16_t status       ; BEMPSTS Register Value
+         *              : uint16_t intenb      ; BEMPENB Register Value
+         * Return Value : none
+         *************************************************************/
+        /* copied from usbx_function_intrn.c */
+        uint16_t pid;
+        uint16_t pipe;
+        uint16_t bitcheck;
+        uint16_t inbuf;
+        uint16_t ep;
+
+        bitcheck = (uint16_t)(status & intenb);
+
+        USB20X.BEMPSTS = (uint16_t)~status;
+
+        for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++) {
+            if ((bitcheck&g_usbx_function_bit_set[pipe]) != g_usbx_function_bit_set[pipe]) {
+                continue;
+            }
+
+            pid = usbx_function_get_pid(pipe);
+
+            if ((pid == DEVDRV_USBF_PID_STALL) ||
+                (pid == DEVDRV_USBF_PID_STALL2)) {
+                g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
+
+            } else {
+                inbuf = usbx_function_get_inbuf(pipe);
+
+                if (inbuf == 0) {
+                    usbx_function_disable_bemp_int(pipe);
+                    usbx_function_set_pid_nak(pipe);
+                    g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+
+                    switch (g_usbx_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) {
+                        case USB_FUNCTION_D0FIFO_DMA:
+                            /*now, DMA is not supported*/
+                            break;
+
+                        case USB_FUNCTION_D1FIFO_DMA:
+                            /*now, DMA is not supported*/
+                            break;
+
+                        default:
+                            ep = (g_usbx_function_pipecfg[pipe] & USB_PIPECFG_EPNUM) >> USB_PIPECFG_EPNUM_SHIFT;
+                            ep <<= 1;
+                            if (RZA_IO_RegRead_16(
+                                    &g_usbx_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0) {
+                                /* read */
+                                __NOP();
+                            } else {
+                                /* write */
+                                EPx_read_status = DEVDRV_USBF_PIPE_WAIT;
+                                (object->*(epCallback[ep - 2 + 1])) ();
+                                EPx_read_status = DEVDRV_USBF_PIPE_DONE;
+                            }
+                    }
+                }
+            }
+        }
+
+        /* Three dummy reads for clearing interrupt requests */
+        dumy_sts = USB20X.BEMPSTS;
+    }
+}
+
+/******************************************************************************
+ * Function Name: EP2PIPE
+ * Description  : Converts from endpoint to pipe
+ * Arguments    : number of endpoint
+ * Return Value : number of pipe
+ *****************************************************************************/
+/*EP2PIPE converter is for pipe1, pipe3 and pipe6 only.*/
+#define EP2PIPE(endpoint)   ((uint32_t)usbx_function_EpToPipe(endpoint))
+
+
+/******************************************************************************
+ * Function Name: usbx_function_save_request
+ * Description  : Retains the USB request information in variables.
+ * Arguments    : none
+ * Return Value : none
+ *****************************************************************************/
+#define  usbx_function_save_request()                       \
+    {                                                       \
+        uint16_t *bufO = &setup_buffer[0];                  \
+                                                            \
+        USB20X.INTSTS0 = (uint16_t)~USB_FUNCTION_BITVALID;  \
+        /*data[0] <= bmRequest, data[1] <= bmRequestType */ \
+        *bufO++ = USB20X.USBREQ;                            \
+        /*data[2] data[3] <= wValue*/                       \
+        *bufO++ = USB20X.USBVAL;                            \
+        /*data[4] data[5] <= wIndex*/                       \
+        *bufO++ = USB20X.USBINDX;                           \
+        /*data[6] data[6] <= wIndex*/                       \
+        *bufO++ = USB20X.USBLENG;                           \
+    }
+
+
+/*************************************************************************/
+/*************************************************************************/
+/*************************************************************************/
+
+/*************************************************************************/
+/* constructor */
+USBHAL::USBHAL(void)
+{
+    /* ---- P4_1 : P4_1 (USB0_EN for GR-PEACH) ---- */
+    //usbx_en = new DigitalOut(P4_1, 1);
+
+    /* some constants */
+    int_id          = USBIX_IRQn;
+    int_level       = ( 2 << 3 );
+    clock_mode      = USBFCLOCK_X1_48MHZ;
+#if (USB_FUNCTION_HISPEED == 0)
+    mode            = USB_FUNCTION_FULL_SPEED;
+#else
+    mode            = USB_FUNCTION_HIGH_SPEED;
+#endif
+    EP0_read_status = DEVDRV_USBF_WRITEEND;
+    EPx_read_status = DEVDRV_USBF_PIPE_DONE;
+
+    /* Disables interrupt for usb */
+    GIC_DisableIRQ(int_id);
+
+    /* Setup the end point */
+    epCallback[ 0] = &USBHAL::EP1_OUT_callback;
+    epCallback[ 1] = &USBHAL::EP1_IN_callback;
+    epCallback[ 2] = &USBHAL::EP2_OUT_callback;
+    epCallback[ 3] = &USBHAL::EP2_IN_callback;
+    epCallback[ 4] = &USBHAL::EP3_OUT_callback;
+    epCallback[ 5] = &USBHAL::EP3_IN_callback;
+    epCallback[ 6] = &USBHAL::EP4_OUT_callback;
+    epCallback[ 7] = &USBHAL::EP4_IN_callback;
+    epCallback[ 8] = &USBHAL::EP5_OUT_callback;
+    epCallback[ 9] = &USBHAL::EP5_IN_callback;
+    epCallback[10] = &USBHAL::EP6_OUT_callback;
+    epCallback[11] = &USBHAL::EP6_IN_callback;
+    epCallback[12] = &USBHAL::EP7_OUT_callback;
+    epCallback[13] = &USBHAL::EP7_IN_callback;
+    epCallback[14] = &USBHAL::EP8_OUT_callback;
+    epCallback[15] = &USBHAL::EP8_IN_callback;
+    epCallback[16] = &USBHAL::EP9_OUT_callback;
+    epCallback[17] = &USBHAL::EP9_IN_callback;
+    epCallback[18] = &USBHAL::EP10_OUT_callback;
+    epCallback[19] = &USBHAL::EP10_IN_callback;
+    epCallback[20] = &USBHAL::EP11_OUT_callback;
+    epCallback[21] = &USBHAL::EP11_IN_callback;
+    epCallback[22] = &USBHAL::EP12_OUT_callback;
+    epCallback[23] = &USBHAL::EP12_IN_callback;
+    epCallback[24] = &USBHAL::EP13_OUT_callback;
+    epCallback[25] = &USBHAL::EP13_IN_callback;
+    epCallback[26] = &USBHAL::EP14_OUT_callback;
+    epCallback[27] = &USBHAL::EP14_IN_callback;
+    epCallback[28] = &USBHAL::EP15_OUT_callback;
+    epCallback[29] = &USBHAL::EP15_IN_callback;
+
+    /* registers me */
+    instance = this;
+
+    /* Clear pipe table */
+    usbx_function_clear_pipe_tbl();
+
+/******************************************************************************
+ * Function Name: usbx_api_function_init
+ * Description  : Initializes the USB module in the USB function mode.
+ *****************************************************************************/
+    /* The clock of USB0 modules is permitted */
+#if (USB_FUNCTION_CH == 0)
+    CPG.STBCR7 &= ~(CPG_STBCR7_MSTP71);
+#else
+    CPG.STBCR7 &= ~(CPG_STBCR7_MSTP71 | CPG_STBCR7_MSTP70);
+#endif
+    volatile uint8_t    dummy8;
+    dummy8 = CPG.STBCR7;
+
+    {
+/******************************************************************************
+ * Function Name: usbx_function_setting_interrupt
+ * Description  : Sets the USB module interrupt level.
+ *****************************************************************************/
+#if 0   /*DMA is not supported*/
+        IRQn_Type d0fifo_dmaintid;
+        IRQn_Type d1fifo_dmaintid;
+#endif
+
+        InterruptHandlerRegister(int_id, &_usbisr);
+        GIC_SetPriority(int_id, int_level);
+        GIC_EnableIRQ(int_id);
+
+#if 0   /*DMA is not supported*/
+        d0fifo_dmaintid = Userdef_USB_usbx_function_d0fifo_dmaintid();
+        if (d0fifo_dmaintid != 0xFFFF) {
+            InterruptHandlerRegister(d0fifo_dmaintid, usbx_function_dma_interrupt_d0fifo);
+            GIC_SetPriority(d0fifo_dmaintid, int_level);
+            GIC_EnableIRQ(d0fifo_dmaintid);
+        }
+#endif
+
+#if 0   /*DMA is not supported*/
+        d1fifo_dmaintid = Userdef_USB_usbx_function_d1fifo_dmaintid();
+        if (d1fifo_dmaintid != 0xFFFF) {
+            InterruptHandlerRegister(d1fifo_dmaintid, usbx_function_dma_interrupt_d1fifo);
+            GIC_SetPriority(d1fifo_dmaintid, int_level);
+            GIC_EnableIRQ(d1fifo_dmaintid);
+        }
+#endif
+/*****************************************************************************/
+    }
+
+    /* reset USB module with setting tranciever and HSE=1 */
+    usbx_function_reset_module(clock_mode);
+
+    /* clear variables */
+    usbx_function_init_status();
+
+    /* select USB Function and Interrupt Enable */
+    /* Detect USB Device to attach or detach    */
+    usbx_function_InitModule(mode);
+
+    {
+        uint16_t buf;
+        buf  = USB20X.INTENB0;
+        buf |= USB_INTENB0_SOFE;
+        USB20X.INTENB0 = buf;
+    }
+}
+
+/*************************************************************************/
+USBHAL::~USBHAL(void)
+{
+    /* Disables interrupt for usb */
+    GIC_DisableIRQ( int_id );
+    /* Unregisters interrupt function and priority */
+    InterruptHandlerRegister( int_id, (uint32_t)NULL );
+
+    //usbx_en  = NULL;
+    instance = NULL;
+}
+
+/*************************************************************************/
+void USBHAL::connect(void)
+{
+    /* Activates USB0_EN */
+    //(*usbx_en) = 0;
+}
+
+
+/*************************************************************************/
+void USBHAL::disconnect(void)
+{
+    /* Deactivates USB0_EN */
+    //(*usbx_en) = 1;
+}
+
+
+/*************************************************************************/
+void USBHAL::configureDevice(void)
+{
+    /*The pipes set up in USBHAL::realiseEndpoint*/
+    /*usbx_function_clear_alt();*/      /* Alternate setting clear */
+    /*usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);*/
+}
+
+
+/*************************************************************************/
+void USBHAL::unconfigureDevice(void)
+{
+    /* The Interface would be managed by USBDevice */
+    /*usbx_function_clear_alt();*/      /* Alternate setting clear */
+    /*usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);*/
+}
+
+
+/*************************************************************************/
+void USBHAL::setAddress(uint8_t address)
+{
+    if (address <= 127) {
+        usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);      /* OK */
+    } else {
+        usbx_function_set_pid_stall(USB_FUNCTION_PIPE0);    /* Not Spec */
+    }
+}
+
+
+/*************************************************************************/
+bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t flags)
+{
+    const struct PIPECFGREC *cfg;
+    uint16_t pipe;
+    uint16_t buf;
+
+    if ( (EP0OUT == endpoint) || (EP0IN  == endpoint) ) {
+        return true;
+    }
+
+    for (cfg = &def_pipecfg[0]; cfg->pipesel != 0; cfg++) {
+        if (cfg->endpoint == endpoint) {
+            break;
+        }
+    }
+    if (cfg->pipesel == 0) {
+        return false;
+    }
+
+    pipe = ((cfg->pipesel & USB_PIPESEL_PIPESEL) >> USB_PIPESEL_PIPESEL_SHIFT);
+
+    g_usbx_function_PipeTbl[ pipe ] = (uint16_t)(endpoint | ((cfg->pipesel & USB_FUNCTION_FIFO_USE) << 0));
+
+    /* There are maintenance routine of SHTNAK and BFRE bits
+     * in original sample program. This sample is not
+     * programmed. Do maintenance the "def_pipecfg" array if
+     * you want it. */
+
+    /* Interrupt Disable */
+    buf  = USB20X.BRDYENB;
+    buf &= (uint16_t)~g_usbx_function_bit_set[pipe];
+    USB20X.BRDYENB = buf;
+    buf  = USB20X.NRDYENB;
+    buf &= (uint16_t)~g_usbx_function_bit_set[pipe];
+    USB20X.NRDYENB = buf;
+    buf  = USB20X.BEMPENB;
+    buf &= (uint16_t)~g_usbx_function_bit_set[pipe];
+    USB20X.BEMPENB = buf;
+
+    usbx_function_set_pid_nak(pipe);
+
+    /* CurrentPIPE Clear */
+    if (RZA_IO_RegRead_16(&USB20X.CFIFOSEL, USB_CFIFOSEL_CURPIPE_SHIFT, USB_CFIFOSEL_CURPIPE) == pipe) {
+        RZA_IO_RegWrite_16(&USB20X.CFIFOSEL, 0, USB_CFIFOSEL_CURPIPE_SHIFT, USB_CFIFOSEL_CURPIPE);
+    }
+
+    if (RZA_IO_RegRead_16(&USB20X.D0FIFOSEL, USB_DnFIFOSEL_CURPIPE_SHIFT, USB_DnFIFOSEL_CURPIPE) == pipe) {
+        RZA_IO_RegWrite_16(&USB20X.D0FIFOSEL, 0, USB_DnFIFOSEL_CURPIPE_SHIFT, USB_DnFIFOSEL_CURPIPE);
+    }
+
+    if (RZA_IO_RegRead_16(&USB20X.D1FIFOSEL, USB_DnFIFOSEL_CURPIPE_SHIFT, USB_DnFIFOSEL_CURPIPE) == pipe) {
+        RZA_IO_RegWrite_16(&USB20X.D1FIFOSEL, 0, USB_DnFIFOSEL_CURPIPE_SHIFT, USB_DnFIFOSEL_CURPIPE);
+    }
+
+    /* PIPE Configuration */
+    USB20X.PIPESEL  = pipe;
+    USB20X.PIPECFG  = cfg->pipecfg;
+    USB20X.PIPEBUF  = cfg->pipebuf;
+    USB20X.PIPEMAXP = cfg->pipemaxp;
+    USB20X.PIPEPERI = cfg->pipeperi;
+
+    g_usbx_function_pipecfg[pipe]  = cfg->pipecfg;
+    g_usbx_function_pipebuf[pipe]  = cfg->pipebuf;
+    g_usbx_function_pipemaxp[pipe] = cfg->pipemaxp;
+    g_usbx_function_pipeperi[pipe] = cfg->pipeperi;
+
+    /* Buffer Clear */
+    usbx_function_set_sqclr(pipe);
+    usbx_function_aclrm(pipe);
+
+    /* init Global */
+    g_usbx_function_pipe_status[pipe]  = DEVDRV_USBF_PIPE_IDLE;
+    g_usbx_function_PipeDataSize[pipe] = 0;
+
+    return true;
+}
+
+
+/*************************************************************************/
+// read setup packet
+void USBHAL::EP0setup(uint8_t *buffer)
+{
+    memcpy(buffer, setup_buffer, MAX_PACKET_SIZE_EP0);
+}
+
+
+/*************************************************************************/
+void USBHAL::EP0readStage(void)
+{
+    // No implements
+}
+
+
+/*************************************************************************/
+void USBHAL::EP0read(void)
+{
+    uint8_t *buffer;
+    uint32_t size;
+
+    /* remain of last writing */
+    while (EP0_read_status != DEVDRV_USBF_WRITEEND) {
+        static uint8_t bbb[2] = { 255, 255 };
+        EP0write(&bbb[0], 0);
+    }
+
+    buffer = (uint8_t*)(&setup_buffer[4]);
+    size   = (MAX_PACKET_SIZE_EP0 / 2) - 8;
+    usbx_api_function_CtrlWriteStart(size, buffer);
+}
+
+
+/*************************************************************************/
+uint32_t USBHAL::EP0getReadResult(uint8_t *buffer)
+{
+    memcpy(buffer, (uint8_t*)(&setup_buffer[4]), g_usbx_function_PipeDataSize[USB_FUNCTION_PIPE0]);
+
+    return g_usbx_function_PipeDataSize[USB_FUNCTION_PIPE0];
+}
+
+
+/*************************************************************************/
+void USBHAL::EP0write(uint8_t *buffer, uint32_t size)
+{
+    /* zero byte writing */
+    if ( (size == 0) && (EP0_read_status == DEVDRV_USBF_WRITEEND) ) {
+        return;
+    }
+
+    if (EP0_read_status == DEVDRV_USBF_WRITEEND) {
+        /*1st block*/
+        EP0_read_status = usbx_api_function_CtrlReadStart(size, buffer);
+    } else {
+        /* waits the last transmission */
+        /*other blocks*/
+        g_usbx_function_data_count[ USB_FUNCTION_PIPE0 ]    = size;
+        g_usbx_function_data_pointer [ USB_FUNCTION_PIPE0 ] = buffer;
+        EP0_read_status = usbx_function_write_buffer_c(USB_FUNCTION_PIPE0);
+    }
+    /*max size may be deblocking outside*/
+    if (size == MAX_PACKET_SIZE_EP0) {
+        EP0_read_status = DEVDRV_USBF_WRITING;
+    }
+}
+
+
+/*************************************************************************/
+#if 0   // No implements
+void USBHAL::EP0getWriteResult(void)
+{
+}
+#endif
+
+/*************************************************************************/
+void USBHAL::EP0stall(void)
+{
+    stallEndpoint( 0 );
+}
+
+
+/*************************************************************************/
+EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t max_size)
+{
+    uint32_t    pipe = EP2PIPE(endpoint);
+    uint32_t    pipe_size;
+    uint16_t    pipe_status;
+    EP_STATUS status = EP_COMPLETED;
+
+    pipe_status = usbx_api_function_check_pipe_status(pipe, &pipe_size);
+
+    switch (pipe_status) {
+        case DEVDRV_USBF_PIPE_IDLE:
+        case DEVDRV_USBF_PIPE_WAIT:
+            usbx_api_function_set_pid_nak(pipe);
+            usbx_api_function_clear_pipe_status(pipe);
+
+            usbx_api_function_start_receive_transfer(pipe, max_size, recv_buffer);
+            break;
+
+        default:
+            status = EP_PENDING;
+            break;
+    }
+
+    return status;
+}
+
+
+/*************************************************************************/
+EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t *buffer, uint32_t *bytes_read )
+{
+    uint32_t pipe = EP2PIPE(endpoint);
+    uint16_t pipe_status;
+    uint16_t err;
+    EP_STATUS status = EP_PENDING;
+
+
+    if (EPx_read_status != DEVDRV_USBF_PIPE_WAIT) {
+        return status;
+    }
+
+    pipe_status = usbx_api_function_check_pipe_status(pipe, bytes_read);
+    switch (pipe_status) {
+        case DEVDRV_USBF_PIPE_IDLE:
+            return EP_COMPLETED;
+
+        case DEVDRV_USBF_PIPE_DONE:
+            return EP_COMPLETED;
+
+        case DEVDRV_USBF_PIPE_WAIT:
+            break;
+
+        default:
+            return status;
+    }
+
+    /* sets the output buffer and size */
+    g_usbx_function_data_pointer[pipe] = buffer;
+
+    /* receives data from pipe */
+    err = usbx_function_read_buffer(pipe);
+    recv_error = err;
+    switch (err) {
+        case USB_FUNCTION_READEND:
+        case USB_FUNCTION_READSHRT:
+        case USB_FUNCTION_READOVER:
+            *bytes_read = g_usbx_function_PipeDataSize[pipe];
+            break;
+
+        case USB_FUNCTION_READING:
+        case DEVDRV_USBF_FIFOERROR:
+            break;
+    }
+
+    pipe_status = usbx_api_function_check_pipe_status(pipe, bytes_read);
+    switch (pipe_status) {
+        case DEVDRV_USBF_PIPE_DONE:
+            status = EP_COMPLETED;
+            break;
+
+        case DEVDRV_USBF_PIPE_IDLE:
+        case DEVDRV_USBF_PIPE_NORES:
+        case DEVDRV_USBF_PIPE_STALL:
+        case DEVDRV_USBF_FIFOERROR:
+        default:
+            break;
+    }
+
+    return status;
+}
+
+
+/*************************************************************************/
+EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size)
+{
+    uint32_t pipe = EP2PIPE(endpoint);
+    uint32_t pipe_size;
+    uint16_t pipe_status;
+    uint16_t err;
+    uint16_t count;
+    EP_STATUS status = EP_PENDING;
+
+    pipe_status = usbx_api_function_check_pipe_status(pipe, &pipe_size);
+
+    /* waits the last transmission */
+    count = 30000;
+    while ((pipe_status == DEVDRV_USBF_PIPE_WAIT) || (pipe_status == DEVDRV_USBF_PIPE_DONE)) {
+        pipe_status = usbx_api_function_check_pipe_status(pipe, &pipe_size);
+        if( --count == 0 ) {
+            pipe_status = DEVDRV_USBF_PIPE_STALL;
+            break;
+        }
+    }
+
+    switch (pipe_status) {
+        case DEVDRV_USBF_PIPE_IDLE:
+            err = usbx_api_function_start_send_transfer(pipe, size, data);
+
+            switch (err) {
+                    /* finish to write */
+                case DEVDRV_USBF_WRITEEND:
+                    /* finish to write, but data is short */
+                case DEVDRV_USBF_WRITESHRT:
+                    /* continue to write */
+                case DEVDRV_USBF_WRITING:
+                    /* use DMA */
+                case DEVDRV_USBF_WRITEDMA:
+                    /* error */
+                case DEVDRV_USBF_FIFOERROR:
+                    status = EP_PENDING;
+                    break;
+            }
+            break;
+
+        case DEVDRV_USBF_PIPE_WAIT:
+        case DEVDRV_USBF_PIPE_DONE:
+            status = EP_PENDING;
+            break;
+
+        case DEVDRV_USBF_PIPE_NORES:
+        case DEVDRV_USBF_PIPE_STALL:
+        default:
+            status = EP_STALLED;
+            break;
+    }
+
+    return status;
+}
+
+
+/*************************************************************************/
+EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint)
+{
+    uint32_t    pipe = EP2PIPE(endpoint);
+    uint32_t    pipe_size;
+    uint16_t    pipe_status;
+    EP_STATUS status = EP_PENDING;
+
+    pipe_status = usbx_api_function_check_pipe_status(pipe, &pipe_size);
+
+    switch (pipe_status) {
+        case DEVDRV_USBF_PIPE_IDLE:
+            status = EP_COMPLETED;
+            break;
+
+        case DEVDRV_USBF_PIPE_WAIT:
+            status = EP_PENDING;
+            break;
+
+        case DEVDRV_USBF_PIPE_DONE:
+            usbx_function_stop_transfer(pipe);
+            status = EP_COMPLETED;
+            break;
+
+        case DEVDRV_USBF_PIPE_NORES:
+            status = EP_STALLED;
+            break;
+
+        case DEVDRV_USBF_PIPE_STALL:
+            status = EP_STALLED;
+            break;
+
+        default:
+            status = EP_PENDING;
+    }
+
+    return status;
+}
+
+
+/*************************************************************************/
+void USBHAL::stallEndpoint(uint8_t endpoint)
+{
+    uint32_t pipe = EP2PIPE(endpoint);
+
+    usbx_function_clear_pid_stall(pipe);
+}
+
+
+/*************************************************************************/
+void USBHAL::unstallEndpoint(uint8_t endpoint)
+{
+    uint32_t pipe = EP2PIPE(endpoint);
+
+    usbx_function_set_pid_stall( pipe );
+}
+
+
+/*************************************************************************/
+bool USBHAL::getEndpointStallState(uint8_t endpoint)
+{
+    // No implemens
+    return false;
+}
+
+
+/*************************************************************************/
+#if 0   // No implements
+void USBHAL::remoteWakeup(void)
+{
+}
+#endif
+
+/*************************************************************************/
+void USBHAL::_usbisr(void)
+{
+    instance->usbisr();
+}
+
+
+/*************************************************************************/
+void USBHAL::usbisr(void)
+{
+    uint16_t            int_sts0;
+    uint16_t            int_sts1;
+    uint16_t            int_sts2;
+    uint16_t            int_sts3;
+    uint16_t            int_enb0;
+    uint16_t            int_enb2;
+    uint16_t            int_enb3;
+    uint16_t            int_enb4;
+    volatile uint16_t   dumy_sts;
+
+
+    int_sts0 = USB20X.INTSTS0;
+
+    if (!(int_sts0 & (
+                USB_FUNCTION_BITVBINT |
+                USB_FUNCTION_BITRESM  |
+                USB_FUNCTION_BITSOFR  |
+                USB_FUNCTION_BITDVST  |
+                USB_FUNCTION_BITCTRT  |
+                USB_FUNCTION_BITBEMP  |
+                USB_FUNCTION_BITNRDY  |
+                USB_FUNCTION_BITBRDY ))) {
+        return;
+    }
+
+    int_sts1 = USB20X.BRDYSTS;
+    int_sts2 = USB20X.NRDYSTS;
+    int_sts3 = USB20X.BEMPSTS;
+    int_enb0 = USB20X.INTENB0;
+    int_enb2 = USB20X.BRDYENB;
+    int_enb3 = USB20X.NRDYENB;
+    int_enb4 = USB20X.BEMPENB;
+
+    if ((int_sts0 & USB_FUNCTION_BITRESM) &&
+            (int_enb0 & USB_FUNCTION_BITRSME)) {
+        USB20X.INTSTS0 = (uint16_t)~USB_FUNCTION_BITRESM;
+        RZA_IO_RegWrite_16(&USB20X.INTENB0, 0, USB_INTENB0_RSME_SHIFT, USB_INTENB0_RSME);
+        /*usbx_function_USB_FUNCTION_Resume();*/
+        suspendStateChanged(1);
+    } else if (
+        (int_sts0 & USB_FUNCTION_BITVBINT) &&
+        (int_enb0 & USB_FUNCTION_BITVBSE)) {
+        USB20X.INTSTS0 = (uint16_t)~USB_FUNCTION_BITVBINT;
+
+        if (usbx_function_CheckVBUStaus() == DEVDRV_USBF_ON) {
+            usbx_function_USB_FUNCTION_Attach();
+        } else {
+            usbx_function_USB_FUNCTION_Detach();
+        }
+    } else if (
+        (int_sts0 & USB_FUNCTION_BITSOFR) &&
+        (int_enb0 & USB_FUNCTION_BITSOFE)) {
+        USB20X.INTSTS0 = (uint16_t)~USB_FUNCTION_BITSOFR;
+        SOF((USB20X.FRMNUM & USB_FRMNUM_FRNM) >> USB_FRMNUM_FRNM_SHIFT);
+    } else if (
+        (int_sts0 & USB_FUNCTION_BITDVST) &&
+        (int_enb0 & USB_FUNCTION_BITDVSE)) {
+        USB20X.INTSTS0 = (uint16_t)~USB_FUNCTION_BITDVST;
+        switch (int_sts0 & USB_FUNCTION_BITDVSQ) {
+            case USB_FUNCTION_DS_POWR:
+                break;
+
+            case USB_FUNCTION_DS_DFLT:
+                /*****************************************************************************
+                 * Function Name: usbx_function_USB_FUNCTION_BusReset
+                 * Description  : This function is executed when the USB device is transitioned
+                 *              : to POWERD_STATE. Sets the device descriptor according to the
+                 *              : connection speed determined by the USB reset hand shake.
+                 * Arguments    : none
+                 * Return Value : none
+                 *****************************************************************************/
+                usbx_function_init_status();            /* memory clear */
+
+#if 0
+                /* You would program those steps in USBCallback_busReset
+                 * if the system need the comment out steps.
+                 */
+
+                if (usbx_function_is_hispeed() == USB_FUNCTION_HIGH_SPEED) {
+                    /* Device Descriptor reset */
+                    usbx_function_ResetDescriptor(USB_FUNCTION_HIGH_SPEED);
+                } else {
+                    /* Device Descriptor reset */
+                    usbx_function_ResetDescriptor(USB_FUNCTION_FULL_SPEED);
+                }
+#endif
+                /* Default Control PIPE reset */
+                /*****************************************************************************
+                 * Function Name: usbx_function_ResetDCP
+                 * Description  : Initializes the default control pipe(DCP).
+                 * Outline      : Reset default control pipe
+                 * Arguments    : none
+                 * Return Value : none
+                 *****************************************************************************/
+                USB20X.DCPCFG  = 0;
+                USB20X.DCPMAXP = 64;    /*TODO: This value is copied from sample*/
+
+                USB20X.CFIFOSEL  = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+                USB20X.D0FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+                USB20X.D1FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+
+                busReset();
+                break;
+
+            case USB_FUNCTION_DS_ADDS:
+                break;
+
+            case USB_FUNCTION_DS_CNFG:
+                break;
+
+            case USB_FUNCTION_DS_SPD_POWR:
+            case USB_FUNCTION_DS_SPD_DFLT:
+            case USB_FUNCTION_DS_SPD_ADDR:
+            case USB_FUNCTION_DS_SPD_CNFG:
+                suspendStateChanged(0);
+                /*usbx_function_USB_FUNCTION_Suspend();*/
+                break;
+
+            default:
+                break;
+        }
+    } else if (
+        (int_sts0 & USB_FUNCTION_BITBEMP) &&
+        (int_enb0 & USB_FUNCTION_BITBEMP) &&
+        ((int_sts3 & int_enb4) & g_usbx_function_bit_set[USB_FUNCTION_PIPE0])) {
+        /* ==== BEMP PIPE0 ==== */
+        usbx_function_BEMPInterruptPIPE0(int_sts3, int_enb4, this, &USBHAL::EP0in);
+    } else if (
+        (int_sts0 & USB_FUNCTION_BITBRDY) &&
+        (int_enb0 & USB_FUNCTION_BITBRDY) &&
+        ((int_sts1 & int_enb2) & g_usbx_function_bit_set[USB_FUNCTION_PIPE0])) {
+        /* ==== BRDY PIPE0 ==== */
+        usbx_function_BRDYInterruptPIPE0(int_sts1, int_enb2, this, &USBHAL::EP0out);
+    } else if (
+        (int_sts0 & USB_FUNCTION_BITNRDY) &&
+        (int_enb0 & USB_FUNCTION_BITNRDY) &&
+        ((int_sts2 & int_enb3) & g_usbx_function_bit_set[USB_FUNCTION_PIPE0])) {
+        /* ==== NRDY PIPE0 ==== */
+        usbx_function_NRDYInterruptPIPE0(int_sts2, int_enb3, this, NULL);
+    } else if (
+        (int_sts0 & USB_FUNCTION_BITCTRT) && (int_enb0 & USB_FUNCTION_BITCTRE)) {
+        int_sts0 = USB20X.INTSTS0;
+        USB20X.INTSTS0 = (uint16_t)~USB_FUNCTION_BITCTRT;
+
+        if (((int_sts0 & USB_FUNCTION_BITCTSQ) == USB_FUNCTION_CS_RDDS) ||
+                ((int_sts0 & USB_FUNCTION_BITCTSQ) == USB_FUNCTION_CS_WRDS) ||
+                ((int_sts0 & USB_FUNCTION_BITCTSQ) == USB_FUNCTION_CS_WRND)) {
+
+            /* remake EP0 into buffer */
+            usbx_function_save_request();
+            if ((USB20X.INTSTS0 & USB_FUNCTION_BITVALID) && (
+                        ((int_sts0 & USB_FUNCTION_BITCTSQ) == USB_FUNCTION_CS_RDDS) ||
+                        ((int_sts0 & USB_FUNCTION_BITCTSQ) == USB_FUNCTION_CS_WRDS) ||
+                        ((int_sts0 & USB_FUNCTION_BITCTSQ) == USB_FUNCTION_CS_WRND))) {
+                /* New SETUP token received */
+                /* Three dummy reads for cleearing interrupt requests */
+                dumy_sts = USB20X.INTSTS0;
+                dumy_sts = USB20X.INTSTS0;
+                dumy_sts = USB20X.INTSTS0;
+                return;
+            }
+        }
+
+        switch (int_sts0 & USB_FUNCTION_BITCTSQ) {
+            case USB_FUNCTION_CS_IDST:
+                if (g_usbx_function_TestModeFlag == DEVDRV_USBF_YES) {
+                    /* ==== Test Mode ==== */
+                    usbx_function_USB_FUNCTION_TestMode();
+                }
+                /* Needs not procedure in this state */
+                break;
+
+            case USB_FUNCTION_CS_RDDS:
+                /* Reads a setup packet */
+                EP0setupCallback();
+                break;
+
+            case USB_FUNCTION_CS_WRDS:
+                /* Original code was the SetDescriptor was called */
+                EP0setupCallback();
+                break;
+
+            case USB_FUNCTION_CS_WRND:
+                EP0setupCallback();
+
+                /*The EP0setupCallback should finish in successful */
+                usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);
+
+                RZA_IO_RegWrite_16(&USB20X.DCPCTR, 1, USB_DCPCTR_CCPL_SHIFT, USB_DCPCTR_CCPL);
+                break;
+
+            case USB_FUNCTION_CS_RDSS:
+                RZA_IO_RegWrite_16(&USB20X.DCPCTR, 1, USB_DCPCTR_CCPL_SHIFT, USB_DCPCTR_CCPL);
+                break;
+
+            case USB_FUNCTION_CS_WRSS:
+                RZA_IO_RegWrite_16(&USB20X.DCPCTR, 1, USB_DCPCTR_CCPL_SHIFT, USB_DCPCTR_CCPL);
+                break;
+
+            case USB_FUNCTION_CS_SQER:
+                usbx_function_set_pid_stall(USB_FUNCTION_PIPE0);
+                break;
+
+            default:
+                usbx_function_set_pid_stall(USB_FUNCTION_PIPE0);
+                break;
+        }
+    } else if (
+        (int_sts0 & USB_FUNCTION_BITBEMP) &&
+        (int_enb0 & USB_FUNCTION_BITBEMP) &&
+        (int_sts3 & int_enb4) ) {
+        /* ==== BEMP PIPEx ==== */
+        usbx_function_BEMPInterrupt(int_sts3, int_enb4, this, epCallback);
+    } else if (
+        (int_sts0 & USB_FUNCTION_BITBRDY) &&
+        (int_enb0 & USB_FUNCTION_BITBRDY) &&
+        (int_sts1 & int_enb2) ) {
+        /* ==== BRDY PIPEx ==== */
+        usbx_function_BRDYInterrupt(int_sts1, int_enb2, this, epCallback);
+    } else if (
+        (int_sts0 & USB_FUNCTION_BITNRDY) &&
+        (int_enb0 & USB_FUNCTION_BITNRDY) &&
+        (int_sts2 & int_enb3)) {
+        /* ==== NRDY PIPEx ==== */
+        usbx_function_NRDYInterrupt(int_sts2, int_enb3, this, epCallback);
+    } else {
+        /* Do Nothing */
+    }
+
+    /* Three dummy reads for cleearing interrupt requests */
+    dumy_sts = USB20X.INTSTS0;
+    dumy_sts = USB20X.INTSTS1;
+}
+
+/*************************************************************************/
+#endif
+/*************************************************************************/
+/*EOF*/
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/USBHAL_STM32F103RB.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/USBHAL_STM32F103RB.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,147 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#ifndef USBHAL_STM32F103RB
+#define USBHAL_STM32F103RB
+
+#define USBHAL_IRQn  USB_LP_CAN1_RX0_IRQn
+
+
+#define NB_ENDPOINT  8
+/*  must be multiple of 4 bytes */
+#define MAXTRANSFER_SIZE  0x200
+#define FIFO_USB_RAM_SIZE (MAXTRANSFER_SIZE+MAX_PACKET_SIZE_EP0+MAX_PACKET_SIZE_EP1+MAX_PACKET_SIZE_EP2+MAX_PACKET_SIZE_EP3)
+#if (FIFO_USB_RAM_SIZE > 0x500)
+#error "FIFO dimensioning incorrect"
+#endif
+
+typedef struct
+{
+    USBHAL *inst;
+    void (USBHAL::*bus_reset)(void);
+    void (USBHAL::*sof)(int frame);
+    void (USBHAL::*connect_change)(unsigned int  connected);
+    void (USBHAL::*suspend_change)(unsigned int suspended);
+    void (USBHAL::*ep0_setup)(void);
+    void (USBHAL::*ep0_in)(void);
+    void (USBHAL::*ep0_out)(void);
+    void (USBHAL::*ep0_read)(void);
+    bool (USBHAL::*ep_realise)(uint8_t endpoint, uint32_t maxPacket, uint32_t flags);
+    bool (USBHAL::*epCallback[2*NB_ENDPOINT-2])(void);
+    uint8_t epComplete[8];
+    /*  memorize dummy buffer used for reception */
+    uint32_t pBufRx[MAXTRANSFER_SIZE>>2];
+    uint32_t pBufRx0[MAX_PACKET_SIZE_EP0>>2];
+    gpio_t usb_switch;
+}USBHAL_Private_t;
+
+void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state)
+{
+    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
+    gpio_write(&(priv->usb_switch),!state);
+}
+
+uint32_t HAL_PCDEx_GetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo)
+{
+    return 1024;
+}
+void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
+{
+    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
+    USBHAL *obj= priv->inst;
+    uint32_t sofnum = (hpcd->Instance->FNR) & USB_FNR_FN;
+    void (USBHAL::*func)(int frame) = priv->sof;
+    (obj->*func)(sofnum);
+}
+
+USBHAL * USBHAL::instance;
+
+USBHAL::USBHAL(void)
+{
+    /*  init parameter  */
+    USBHAL_Private_t *HALPriv = new(USBHAL_Private_t);
+    /*  initialized all field of init including 0 field  */
+    /*  constructor does not fill with zero */
+    hpcd.Instance = USB;
+    /*  initialized all field of init including 0 field  */
+    /*  constructor does not fill with zero */
+    memset(&hpcd.Init, 0, sizeof(hpcd.Init));
+    hpcd.Init.dev_endpoints = NB_ENDPOINT;
+    hpcd.Init.ep0_mps =   MAX_PACKET_SIZE_EP0;
+    hpcd.Init.phy_itface = PCD_PHY_EMBEDDED;
+    hpcd.Init.Sof_enable = 1;
+    hpcd.Init.speed = PCD_SPEED_FULL;
+    /*  pass instance for usage inside call back */
+    HALPriv->inst = this;
+    HALPriv->bus_reset = &USBHAL::busReset;
+    HALPriv->suspend_change = &USBHAL::suspendStateChanged;
+    HALPriv->connect_change = &USBHAL::connectStateChanged;
+    HALPriv->sof = &USBHAL::SOF;
+    HALPriv->ep0_setup = &USBHAL::EP0setupCallback;
+    HALPriv->ep_realise = &USBHAL::realiseEndpoint;
+    HALPriv->ep0_in = &USBHAL::EP0in;
+    HALPriv->ep0_out = &USBHAL::EP0out;
+    HALPriv->ep0_read = &USBHAL::EP0read;
+    hpcd.pData = (void*)HALPriv;
+    HALPriv->epCallback[0] = &USBHAL::EP1_OUT_callback;
+    HALPriv->epCallback[1] = &USBHAL::EP1_IN_callback;
+    HALPriv->epCallback[2] = &USBHAL::EP2_OUT_callback;
+    HALPriv->epCallback[3] = &USBHAL::EP2_IN_callback;
+    HALPriv->epCallback[4] = &USBHAL::EP3_OUT_callback;
+    HALPriv->epCallback[5] = &USBHAL::EP3_IN_callback;
+    instance = this;
+
+
+    /* Configure USB VBUS GPIO */
+    gpio_init_out(&HALPriv->usb_switch,PB_14);
+    gpio_mode(&HALPriv->usb_switch,OpenDrain);
+    /* Configure USB FS GPIOs */
+
+    /* Configure DM DP Pins
+     *   - USB-DP (D+ of the USB connector) <======> PA12 (Nucleo board)
+     *   Make sure to connect a 1.5KOhm pull up to USB-DP PA12 pin
+     *   (permanent pull-up)
+     - USB-DM (D- of the USB connector) <======> PA11 (Nucleo board)
+     */
+
+    pin_function(PA_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_MODE_AF_INPUT));
+    pin_function(PA_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_MODE_AF_INPUT));
+
+    __HAL_RCC_USB_CLK_ENABLE();
+
+    hpcd.State = HAL_PCD_STATE_RESET;
+
+    HAL_PCD_Init(&hpcd);
+    /* hardcoded size of FIFO according definition*/
+    HAL_PCDEx_PMAConfig(&hpcd , 0x00 , PCD_SNG_BUF, 0x30);
+    HAL_PCDEx_PMAConfig(&hpcd , 0x80 , PCD_SNG_BUF, 0x70);
+    HAL_PCDEx_PMAConfig(&hpcd , 0x01 , PCD_SNG_BUF, 0x90);
+    HAL_PCDEx_PMAConfig(&hpcd , 0x81 , PCD_SNG_BUF, 0xb0);
+#if 0
+    HAL_PCDEx_PMAConfig(&hpcd , 0x2, PCD_DBL_BUF, 0x018000b0);
+#else
+    HAL_PCDEx_PMAConfig(&hpcd , 0x2, PCD_SNG_BUF, 0x100);
+#endif
+    HAL_PCDEx_PMAConfig(&hpcd , 0x82, PCD_SNG_BUF, 0x120);
+
+    NVIC_SetVector(USBHAL_IRQn,(uint32_t)&_usbisr);
+    NVIC_SetPriority( USBHAL_IRQn, 1);
+
+    HAL_PCD_Start(&hpcd);
+}
+
+#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/USBHAL_STM_TARGET.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/USBHAL_STM_TARGET.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,19 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#include "USBHAL_STM32F103RB.h"
+
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/USBHAL_STM_TARGET.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/USBHAL_STM_TARGET.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,19 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#include "USBHAL_STM_144_64pins.h"
+
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303ZE/USBHAL_STM32F303ZE.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303ZE/USBHAL_STM32F303ZE.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,127 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#ifndef USBHAL_STM32F303ZE_H
+#define USBHAL_STM32F303ZE_H
+#define USBHAL_IRQn  USB_LP_CAN_RX0_IRQn
+/*  must be multiple of 4 bytes */
+#define NB_ENDPOINT 8
+#define MAXTRANSFER_SIZE  0x200
+#define FIFO_USB_RAM_SIZE (MAXTRANSFER_SIZE+MAX_PACKET_SIZE_EP0+MAX_PACKET_SIZE_EP1+MAX_PACKET_SIZE_EP2+MAX_PACKET_SIZE_EP3)
+#if (FIFO_USB_RAM_SIZE > 0x500)
+#error "FIFO dimensioning incorrect"
+#endif
+
+typedef struct
+{
+	USBHAL *inst;
+	void (USBHAL::*bus_reset)(void);
+	void (USBHAL::*sof)(int frame);
+	void (USBHAL::*connect_change)(unsigned int  connected);
+	void (USBHAL::*suspend_change)(unsigned int suspended);
+	void (USBHAL::*ep0_setup)(void);
+	void (USBHAL::*ep0_in)(void);
+	void (USBHAL::*ep0_out)(void);
+	void (USBHAL::*ep0_read)(void);
+	bool (USBHAL::*ep_realise)(uint8_t endpoint, uint32_t maxPacket, uint32_t flags);
+	bool (USBHAL::*epCallback[6])(void);
+	uint8_t epComplete[2*NB_ENDPOINT];
+	/*  memorize dummy buffer used for reception */
+	uint32_t pBufRx[MAXTRANSFER_SIZE>>2];
+	uint32_t pBufRx0[MAX_PACKET_SIZE_EP0>>2];
+    gpio_t usb_switch;
+}USBHAL_Private_t;
+
+uint32_t HAL_PCDEx_GetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo)
+{
+        return 1024;
+}
+
+void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state){
+    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
+    gpio_write(&(priv->usb_switch),state);
+}
+
+void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd) {
+    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
+    USBHAL *obj= priv->inst;
+    uint32_t sofnum = (hpcd->Instance->FNR) & USB_FNR_FN;
+    void (USBHAL::*func)(int frame) = priv->sof;
+    (obj->*func)(sofnum);
+}
+
+USBHAL * USBHAL::instance;
+
+USBHAL::USBHAL(void) {
+    /*  init parameter  */
+    USBHAL_Private_t *HALPriv = new(USBHAL_Private_t);
+    hpcd.Instance = USB;
+    /*  initialized Init to zero (constructor does not zero initialized the
+     *  area */
+    /*  initialized all field of init including 0 field  */
+    /*  constructor does not fill with zero */
+    memset(&hpcd.Init, 0, sizeof(hpcd.Init));
+    hpcd.Init.dev_endpoints = NB_ENDPOINT;
+    hpcd.Init.ep0_mps =   MAX_PACKET_SIZE_EP0;
+    hpcd.Init.phy_itface = PCD_PHY_EMBEDDED;
+    hpcd.Init.Sof_enable = 1;
+    hpcd.Init.speed = PCD_SPEED_FULL;
+    /*  pass instance for usage inside call back */
+    HALPriv->inst = this;
+    HALPriv->bus_reset = &USBHAL::busReset;
+    HALPriv->suspend_change = &USBHAL::suspendStateChanged;
+    HALPriv->connect_change = &USBHAL::connectStateChanged;
+    HALPriv->sof = &USBHAL::SOF;
+    HALPriv->ep0_setup = &USBHAL::EP0setupCallback;
+    HALPriv->ep_realise = &USBHAL::realiseEndpoint;
+    HALPriv->ep0_in = &USBHAL::EP0in;
+    HALPriv->ep0_out = &USBHAL::EP0out;
+    HALPriv->ep0_read = &USBHAL::EP0read;
+    hpcd.pData = (void*)HALPriv;
+    HALPriv->epCallback[0] = &USBHAL::EP1_OUT_callback;
+    HALPriv->epCallback[1] = &USBHAL::EP1_IN_callback;
+    HALPriv->epCallback[2] = &USBHAL::EP2_OUT_callback;
+    HALPriv->epCallback[3] = &USBHAL::EP2_IN_callback;
+    HALPriv->epCallback[4] = &USBHAL::EP3_OUT_callback;
+    HALPriv->epCallback[5] = &USBHAL::EP3_IN_callback;
+    instance = this;
+    __HAL_RCC_GPIOA_CLK_ENABLE();
+    /* Configure USB DM pin. This is optional, and maintained only for user guidance. */
+    pin_function(PA_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF14_USB));
+    pin_function(PA_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF14_USB));
+    __HAL_RCC_GPIOG_CLK_ENABLE();
+    gpio_init_out(&HALPriv->usb_switch,PG_6);
+    /* Enable USB Clock */
+    __HAL_RCC_USB_CLK_ENABLE();
+    /* Enable SYSCFG Clock */
+    __HAL_RCC_SYSCFG_CLK_ENABLE();
+    hpcd.State = HAL_PCD_STATE_RESET;
+    HAL_PCD_Init(&hpcd);
+    /* hardcoded size of FIFO according definition*/
+    HAL_PCDEx_PMAConfig(&hpcd , 0x00 , PCD_SNG_BUF, 0x30);
+    HAL_PCDEx_PMAConfig(&hpcd , 0x80 , PCD_SNG_BUF, 0x70);
+#if 1
+    HAL_PCDEx_PMAConfig(&hpcd , 0x3, PCD_DBL_BUF, 0x018000b0);
+#else
+    HAL_PCDEx_PMAConfig(&hpcd , 0x3, PCD_SNG_BUF, 0x180);
+#endif
+    HAL_PCDEx_PMAConfig(&hpcd , 0x83, PCD_SNG_BUF, 0xb0);
+    NVIC_SetVector(USBHAL_IRQn,(uint32_t)&_usbisr);
+    NVIC_SetPriority(USBHAL_IRQn, 1);
+    HAL_PCD_Start(&hpcd);
+}
+#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303ZE/USBHAL_STM_TARGET.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303ZE/USBHAL_STM_TARGET.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,18 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#include "USBHAL_STM32F303ZE.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/USBHAL_STM_TARGET.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/USBHAL_STM_TARGET.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,18 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#include "USBHAL_STM_144_64pins.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/USBHAL_STM_TARGET.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/USBHAL_STM_TARGET.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,18 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#include "USBHAL_STM_144_64pins.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_NUCLEO_F411RE/USBHAL_STM_TARGET.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_NUCLEO_F411RE/USBHAL_STM_TARGET.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,19 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#include "USBHAL_STM_144_64pins.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_NUCLEO_F412ZG/USBHAL_STM_TARGET.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_NUCLEO_F412ZG/USBHAL_STM_TARGET.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,18 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#include "USBHAL_STM_144_64pins.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_NUCLEO_F429ZI/USBHAL_STM_TARGET.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_NUCLEO_F429ZI/USBHAL_STM_TARGET.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,18 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#include "USBHAL_STM_144_64pins.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_NUCLEO_F439ZI/USBHAL_STM_TARGET.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_NUCLEO_F439ZI/USBHAL_STM_TARGET.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,18 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#include "USBHAL_STM_144_64pins.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446RE/USBHAL_STM_TARGET.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446RE/USBHAL_STM_TARGET.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,18 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#include "USBHAL_STM_144_64pins.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446ZE/USBHAL_STM_TARGET.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446ZE/USBHAL_STM_TARGET.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,18 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#include "USBHAL_STM_144_64pins.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/USBHAL_STM_TARGET.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/USBHAL_STM_TARGET.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,19 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#include "USBHAL_STM_144_64pins.h"
+
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/TARGET_NUCLEO_F756ZG/USBHAL_STM_TARGET.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/TARGET_NUCLEO_F756ZG/USBHAL_STM_TARGET.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,19 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#include "USBHAL_STM_144_64pins.h"
+
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/USBHAL_STM_TARGET.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/USBHAL_STM_TARGET.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,18 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#include "USBHAL_STM_144_64pins.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/TARGET_DISCO_F769NI/USBHAL_STM32F769NI.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/TARGET_DISCO_F769NI/USBHAL_STM32F769NI.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,147 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#ifndef USBHAL_STM32F769NI_H
+#define USBHAL_STM32F769NI_H
+#define USBHAL_IRQn  OTG_HS_IRQn
+/*  must be multiple of 4 bytes */
+#define NB_ENDPOINT 4
+#define MAXTRANSFER_SIZE  0x200
+#define FIFO_USB_RAM_SIZE (MAXTRANSFER_SIZE+MAX_PACKET_SIZE_EP0+MAX_PACKET_SIZE_EP1+MAX_PACKET_SIZE_EP2+MAX_PACKET_SIZE_EP3)
+#if (FIFO_USB_RAM_SIZE > 0x500)
+#error "FIFO dimensioning incorrect"
+#endif
+
+typedef struct
+{
+    USBHAL *inst;
+    void (USBHAL::*bus_reset)(void);
+    void (USBHAL::*sof)(int frame);
+    void (USBHAL::*connect_change)(unsigned int  connected);
+    void (USBHAL::*suspend_change)(unsigned int suspended);
+    void (USBHAL::*ep0_setup)(void);
+    void (USBHAL::*ep0_in)(void);
+    void (USBHAL::*ep0_out)(void);
+    void (USBHAL::*ep0_read)(void);
+    bool (USBHAL::*ep_realise)(uint8_t endpoint, uint32_t maxPacket, uint32_t flags);
+    bool (USBHAL::*epCallback[2*NB_ENDPOINT-2])(void);
+    /*  memorize dummy buffer used for reception */
+    uint32_t pBufRx[MAXTRANSFER_SIZE>>2];
+    uint32_t pBufRx0[MAX_PACKET_SIZE_EP0>>2];
+    uint8_t epComplete[2*NB_ENDPOINT];
+}USBHAL_Private_t;
+
+uint32_t HAL_PCDEx_GetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo)
+{
+    uint32_t len;
+    if (fifo == 0) len = hpcd->Instance->DIEPTXF0_HNPTXFSIZ>>16;
+    else
+        len =  hpcd->Instance->DIEPTXF[fifo - 1] >> 16;
+    return len*4;
+}
+void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd) 
+{
+    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
+    USBHAL *obj= priv->inst;
+    USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
+    uint32_t sofnum = (USBx_DEVICE->DSTS & USB_OTG_DSTS_FNSOF) >> 8;
+    void (USBHAL::*func)(int frame) = priv->sof;
+    /* fix me  call with same frame number */
+    (obj->*func)(sofnum);
+}
+
+
+USBHAL * USBHAL::instance;
+
+USBHAL::USBHAL(void) {
+    /*  init parameter  */
+    USBHAL_Private_t *HALPriv = new(USBHAL_Private_t);
+    hpcd.Instance = USB_OTG_HS;
+    memset(&hpcd.Init, 0, sizeof(hpcd.Init));
+    hpcd.Init.dev_endpoints = NB_ENDPOINT;
+    hpcd.Init.ep0_mps =   MAX_PACKET_SIZE_EP0;
+    hpcd.Init.phy_itface = PCD_PHY_ULPI;
+    hpcd.Init.Sof_enable = 0;
+
+    hpcd.Init.speed = PCD_SPEED_HIGH;
+    //hpcd.Init.vbus_sensing_enable = 0;
+    //hpcd.Init.lpm_enable = 0;
+    /*  pass instance for usage inside call back */
+    HALPriv->inst = this;
+    HALPriv->bus_reset = &USBHAL::busReset;
+    HALPriv->suspend_change = &USBHAL::suspendStateChanged;
+    HALPriv->connect_change = &USBHAL::connectStateChanged;
+    HALPriv->sof = &USBHAL::SOF;
+    HALPriv->ep0_setup = &USBHAL::EP0setupCallback;
+    HALPriv->ep_realise = &USBHAL::realiseEndpoint;
+    HALPriv->ep0_in = &USBHAL::EP0in;
+    HALPriv->ep0_out = &USBHAL::EP0out;
+    HALPriv->ep0_read = &USBHAL::EP0read;
+    hpcd.pData = (void*)HALPriv;
+    HALPriv->epCallback[0] = &USBHAL::EP1_OUT_callback;
+    HALPriv->epCallback[1] = &USBHAL::EP1_IN_callback;
+    HALPriv->epCallback[2] = &USBHAL::EP2_OUT_callback;
+    HALPriv->epCallback[3] = &USBHAL::EP2_IN_callback;
+    HALPriv->epCallback[4] = &USBHAL::EP3_OUT_callback;
+    HALPriv->epCallback[5] = &USBHAL::EP3_IN_callback;
+    instance = this;
+    /* Enable power and clocking */
+    __HAL_RCC_GPIOA_CLK_ENABLE();
+    __HAL_RCC_GPIOB_CLK_ENABLE();
+    __HAL_RCC_GPIOC_CLK_ENABLE();
+    __HAL_RCC_GPIOH_CLK_ENABLE();
+    __HAL_RCC_GPIOI_CLK_ENABLE();
+
+    pin_function(PA_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // CLK
+    pin_function(PA_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // D0
+
+    pin_function(PB_0, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // D1
+    pin_function(PB_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // D2
+    pin_function(PB_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // D3
+    pin_function(PB_10, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // D4
+    pin_function(PB_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // D5
+    pin_function(PB_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // D6
+    pin_function(PB_13, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // D7
+
+    pin_function(PC_0, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // STP
+    pin_function(PH_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // NXT
+    pin_function(PI_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_HS)); // DIR
+
+    __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE();
+    __HAL_RCC_USB_OTG_HS_CLK_ENABLE();
+
+    __HAL_RCC_SYSCFG_CLK_ENABLE();
+    hpcd.State = HAL_PCD_STATE_RESET;
+    HAL_PCD_Init(&hpcd);
+    /* 1.25kbytes */
+    /* min value 16 (= 16 x 4 bytes) */
+    /*  max value 256 (= 1K bytes ) */
+    /*  maximum sum is 0x140 */
+    HAL_PCDEx_SetRxFiFo(&hpcd, (MAXTRANSFER_SIZE/4));
+    /*  bulk/int 64 bytes in FS  */
+    HAL_PCDEx_SetTxFiFo(&hpcd, 0, (MAX_PACKET_SIZE_EP0/4)+1);
+    /*  bulk/int bytes in FS */
+    HAL_PCDEx_SetTxFiFo(&hpcd, 1, (MAX_PACKET_SIZE_EP1/4)+1);
+    HAL_PCDEx_SetTxFiFo(&hpcd, 2, (MAX_PACKET_SIZE_EP2/4));
+    /* ISOchronous */
+    HAL_PCDEx_SetTxFiFo(&hpcd, 3, (MAX_PACKET_SIZE_EP3/4));
+    NVIC_SetVector(USBHAL_IRQn, (uint32_t)&_usbisr);
+    NVIC_SetPriority(USBHAL_IRQn, 1);
+    HAL_PCD_Start(&hpcd);
+}
+#endif
+
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/TARGET_DISCO_F769NI/USBHAL_STM_TARGET.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/TARGET_DISCO_F769NI/USBHAL_STM_TARGET.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,19 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#include "USBHAL_STM32F769NI.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L053C8/USBHAL_STM32L053C8.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L053C8/USBHAL_STM32L053C8.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,134 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#ifndef USBHAL_STM32L053C8_H
+#define USBHAL_STM32L053C8_H
+
+#define USBHAL_IRQn  USB_IRQn
+
+/*  must be multiple of 4 bytes */
+#define NB_ENDPOINT 8
+#define MAXTRANSFER_SIZE  0x200
+#define FIFO_USB_RAM_SIZE (MAXTRANSFER_SIZE+MAX_PACKET_SIZE_EP0+MAX_PACKET_SIZE_EP1+MAX_PACKET_SIZE_EP2+MAX_PACKET_SIZE_EP3)
+#if (FIFO_USB_RAM_SIZE > 0x500)
+#error "FIFO dimensioning incorrect"
+#endif
+
+typedef struct
+{
+	USBHAL *inst;
+	void (USBHAL::*bus_reset)(void);
+	void (USBHAL::*sof)(int frame);
+	void (USBHAL::*connect_change)(unsigned int  connected);
+	void (USBHAL::*suspend_change)(unsigned int suspended);
+	void (USBHAL::*ep0_setup)(void);
+	void (USBHAL::*ep0_in)(void);
+	void (USBHAL::*ep0_out)(void);
+	void (USBHAL::*ep0_read)(void);
+	bool (USBHAL::*ep_realise)(uint8_t endpoint, uint32_t maxPacket, uint32_t flags);
+	bool (USBHAL::*epCallback[6])(void);
+	uint8_t epComplete[2*NB_ENDPOINT];
+	/*  memorize dummy buffer used for reception */
+	uint32_t pBufRx[MAXTRANSFER_SIZE>>2];
+	uint32_t pBufRx0[MAX_PACKET_SIZE_EP0>>2];
+    gpio_t usb_switch;
+}USBHAL_Private_t;
+
+uint32_t HAL_PCDEx_GetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo)
+{
+        return 1024;
+}
+
+void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state)
+{
+    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
+    gpio_write(&(priv->usb_switch),state);
+}
+
+void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
+{
+    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
+    USBHAL *obj= priv->inst;
+    uint32_t sofnum = (hpcd->Instance->FNR) & USB_FNR_FN;
+    void (USBHAL::*func)(int frame) = priv->sof;
+    (obj->*func)(sofnum);
+}
+
+USBHAL * USBHAL::instance;
+
+USBHAL::USBHAL(void)
+{
+    /*  init parameter  */
+    USBHAL_Private_t *HALPriv = new(USBHAL_Private_t);
+    hpcd.Instance = USB;
+    /*  initialized Init to zero (constructor does not zero initialized the
+     *  area */
+    /*  initialized all field of init including 0 field  */
+    /*  constructor does not fill with zero */
+    memset(&hpcd.Init, 0, sizeof(hpcd.Init));
+    hpcd.Init.dev_endpoints = NB_ENDPOINT;
+    hpcd.Init.ep0_mps =   MAX_PACKET_SIZE_EP0;
+    hpcd.Init.phy_itface = PCD_PHY_EMBEDDED;
+    hpcd.Init.Sof_enable = 1;
+    hpcd.Init.speed = PCD_SPEED_FULL;
+    /*  pass instance for usage inside call back */
+    HALPriv->inst = this;
+    HALPriv->bus_reset = &USBHAL::busReset;
+    HALPriv->suspend_change = &USBHAL::suspendStateChanged;
+    HALPriv->connect_change = &USBHAL::connectStateChanged;
+    HALPriv->sof = &USBHAL::SOF;
+    HALPriv->ep0_setup = &USBHAL::EP0setupCallback;
+    HALPriv->ep_realise = &USBHAL::realiseEndpoint;
+    HALPriv->ep0_in = &USBHAL::EP0in;
+    HALPriv->ep0_out = &USBHAL::EP0out;
+    HALPriv->ep0_read = &USBHAL::EP0read;
+    hpcd.pData = (void*)HALPriv;
+    HALPriv->epCallback[0] = &USBHAL::EP1_OUT_callback;
+    HALPriv->epCallback[1] = &USBHAL::EP1_IN_callback;
+    HALPriv->epCallback[2] = &USBHAL::EP2_OUT_callback;
+    HALPriv->epCallback[3] = &USBHAL::EP2_IN_callback;
+    HALPriv->epCallback[4] = &USBHAL::EP3_OUT_callback;
+    HALPriv->epCallback[5] = &USBHAL::EP3_IN_callback;
+    instance = this;
+    
+    /* Configure USB DM pin. This is optional, and maintained only for user guidance. */
+    __HAL_RCC_GPIOA_CLK_ENABLE();
+    pin_function(PA_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_USB));
+    pin_function(PA_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_USB));
+    
+    /* Enable USB Clock */
+    __HAL_RCC_USB_CLK_ENABLE();
+    
+    /* Enable SYSCFG Clock */
+    __HAL_RCC_SYSCFG_CLK_ENABLE();
+    hpcd.State = HAL_PCD_STATE_RESET;
+    HAL_PCD_Init(&hpcd);
+    
+    /* hardcoded size of FIFO according definition*/
+    HAL_PCDEx_PMAConfig(&hpcd , 0x00 , PCD_SNG_BUF, 0x30);
+    HAL_PCDEx_PMAConfig(&hpcd , 0x80 , PCD_SNG_BUF, 0x70);
+#if 1
+    HAL_PCDEx_PMAConfig(&hpcd , 0x3, PCD_DBL_BUF, 0x018000b0);
+#else
+    HAL_PCDEx_PMAConfig(&hpcd , 0x3, PCD_SNG_BUF, 0x180);
+#endif
+    HAL_PCDEx_PMAConfig(&hpcd , 0x83, PCD_SNG_BUF, 0xb0);
+    NVIC_SetVector(USBHAL_IRQn,(uint32_t)&_usbisr);
+    NVIC_SetPriority(USBHAL_IRQn, 1);
+    HAL_PCD_Start(&hpcd);
+}
+#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L053C8/USBHAL_STM_TARGET.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L053C8/USBHAL_STM_TARGET.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,18 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#include "USBHAL_STM32L053C8.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L072CZ_LRWAN1/USBHAL_STM32L072CZ.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L072CZ_LRWAN1/USBHAL_STM32L072CZ.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,131 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#ifndef USBHAL_STM32L072CZ_H
+#define USBHAL_STM32L072CZ_H
+
+#define USBHAL_IRQn  USB_IRQn
+
+/*  must be multiple of 4 bytes */
+#define NB_ENDPOINT 8
+#define MAXTRANSFER_SIZE  0x200
+#define FIFO_USB_RAM_SIZE (MAXTRANSFER_SIZE+MAX_PACKET_SIZE_EP0+MAX_PACKET_SIZE_EP1+MAX_PACKET_SIZE_EP2+MAX_PACKET_SIZE_EP3)
+#if (FIFO_USB_RAM_SIZE > 0x500)
+#error "FIFO dimensioning incorrect"
+#endif
+
+typedef struct
+{
+	USBHAL *inst;
+	void (USBHAL::*bus_reset)(void);
+	void (USBHAL::*sof)(int frame);
+	void (USBHAL::*connect_change)(unsigned int  connected);
+	void (USBHAL::*suspend_change)(unsigned int suspended);
+	void (USBHAL::*ep0_setup)(void);
+	void (USBHAL::*ep0_in)(void);
+	void (USBHAL::*ep0_out)(void);
+	void (USBHAL::*ep0_read)(void);
+	bool (USBHAL::*ep_realise)(uint8_t endpoint, uint32_t maxPacket, uint32_t flags);
+	bool (USBHAL::*epCallback[6])(void);
+	uint8_t epComplete[2*NB_ENDPOINT];
+	/*  memorize dummy buffer used for reception */
+	uint32_t pBufRx[MAXTRANSFER_SIZE>>2];
+	uint32_t pBufRx0[MAX_PACKET_SIZE_EP0>>2];
+    gpio_t usb_switch;
+}USBHAL_Private_t;
+
+uint32_t HAL_PCDEx_GetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo)
+{
+        return 1024;
+}
+
+void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state)
+{
+    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
+    gpio_write(&(priv->usb_switch),state);
+}
+
+void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
+{
+    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
+    USBHAL *obj= priv->inst;
+    uint32_t sofnum = (hpcd->Instance->FNR) & USB_FNR_FN;
+    void (USBHAL::*func)(int frame) = priv->sof;
+    (obj->*func)(sofnum);
+}
+
+USBHAL * USBHAL::instance;
+
+USBHAL::USBHAL(void)
+{
+    /*  init parameter  */
+    USBHAL_Private_t *HALPriv = new(USBHAL_Private_t);
+    hpcd.Instance = USB;
+    /*  initialized Init to zero (constructor does not zero initialized the
+     *  area */
+    /*  initialized all field of init including 0 field  */
+    /*  constructor does not fill with zero */
+    memset(&hpcd.Init, 0, sizeof(hpcd.Init));
+    hpcd.Init.dev_endpoints = NB_ENDPOINT;
+    hpcd.Init.ep0_mps =   MAX_PACKET_SIZE_EP0;
+    hpcd.Init.phy_itface = PCD_PHY_EMBEDDED;
+    hpcd.Init.Sof_enable = 1;
+    hpcd.Init.speed = PCD_SPEED_FULL;
+    /*  pass instance for usage inside call back */
+    HALPriv->inst = this;
+    HALPriv->bus_reset = &USBHAL::busReset;
+    HALPriv->suspend_change = &USBHAL::suspendStateChanged;
+    HALPriv->connect_change = &USBHAL::connectStateChanged;
+    HALPriv->sof = &USBHAL::SOF;
+    HALPriv->ep0_setup = &USBHAL::EP0setupCallback;
+    HALPriv->ep_realise = &USBHAL::realiseEndpoint;
+    HALPriv->ep0_in = &USBHAL::EP0in;
+    HALPriv->ep0_out = &USBHAL::EP0out;
+    HALPriv->ep0_read = &USBHAL::EP0read;
+    hpcd.pData = (void*)HALPriv;
+    HALPriv->epCallback[0] = &USBHAL::EP1_OUT_callback;
+    HALPriv->epCallback[1] = &USBHAL::EP1_IN_callback;
+    HALPriv->epCallback[2] = &USBHAL::EP2_OUT_callback;
+    HALPriv->epCallback[3] = &USBHAL::EP2_IN_callback;
+    HALPriv->epCallback[4] = &USBHAL::EP3_OUT_callback;
+    HALPriv->epCallback[5] = &USBHAL::EP3_IN_callback;
+    instance = this;
+    
+    /* Configure USB DM pin. This is optional, and maintained only for user guidance. */
+    __HAL_RCC_GPIOA_CLK_ENABLE();
+    pin_function(PA_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_USB));
+    pin_function(PA_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_USB));
+    
+    /* Enable USB Clock */
+    __HAL_RCC_USB_CLK_ENABLE();
+    
+    /* Enable SYSCFG Clock */
+    __HAL_RCC_SYSCFG_CLK_ENABLE();
+    hpcd.State = HAL_PCD_STATE_RESET;
+    HAL_PCD_Init(&hpcd);
+    
+    /* hardcoded size of FIFO according definition*/
+    HAL_PCDEx_PMAConfig(&hpcd , 0x00 , PCD_SNG_BUF, 0x30);
+    HAL_PCDEx_PMAConfig(&hpcd , 0x80 , PCD_SNG_BUF, 0x70);
+    HAL_PCDEx_PMAConfig(&hpcd , 0x3, PCD_DBL_BUF, 0x018000b0);
+    HAL_PCDEx_PMAConfig(&hpcd , 0x83, PCD_SNG_BUF, 0xb0);
+
+    NVIC_SetVector(USBHAL_IRQn,(uint32_t)&_usbisr);
+    NVIC_SetPriority(USBHAL_IRQn, 1);
+    HAL_PCD_Start(&hpcd);
+}
+#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L072CZ_LRWAN1/USBHAL_STM_TARGET.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L072CZ_LRWAN1/USBHAL_STM_TARGET.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,18 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#include "USBHAL_STM32L072CZ.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/USBHAL_STM32L475VG.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/USBHAL_STM32L475VG.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,145 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#ifndef USBHAL_STM32L475VG
+#define USBHAL_STM32L475VG
+
+#define USBHAL_IRQn  OTG_FS_IRQn
+
+
+#define NB_ENDPOINT  4
+/*  must be multiple of 4 bytes */
+#define MAXTRANSFER_SIZE  0x200
+#define FIFO_USB_RAM_SIZE (MAXTRANSFER_SIZE+MAX_PACKET_SIZE_EP0+MAX_PACKET_SIZE_EP1+MAX_PACKET_SIZE_EP2+MAX_PACKET_SIZE_EP3)
+#if (FIFO_USB_RAM_SIZE > 0x500)
+#error "FIFO dimensioning incorrect"
+#endif
+
+typedef struct
+{
+    USBHAL *inst;
+    void (USBHAL::*bus_reset)(void);
+    void (USBHAL::*sof)(int frame);
+    void (USBHAL::*connect_change)(unsigned int  connected);
+    void (USBHAL::*suspend_change)(unsigned int suspended);
+    void (USBHAL::*ep0_setup)(void);
+    void (USBHAL::*ep0_in)(void);
+    void (USBHAL::*ep0_out)(void);
+    void (USBHAL::*ep0_read)(void);
+    bool (USBHAL::*ep_realise)(uint8_t endpoint, uint32_t maxPacket, uint32_t flags);
+    bool (USBHAL::*epCallback[2*NB_ENDPOINT-2])(void);
+    uint8_t epComplete[8];
+    /*  memorize dummy buffer used for reception */
+    uint32_t pBufRx[MAXTRANSFER_SIZE>>2];
+    uint32_t pBufRx0[MAX_PACKET_SIZE_EP0>>2];
+}USBHAL_Private_t;
+
+uint32_t HAL_PCDEx_GetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo)
+{
+    uint32_t len;
+    if (fifo == 0) len = hpcd->Instance->DIEPTXF0_HNPTXFSIZ>>16;
+    else
+        len =  hpcd->Instance->DIEPTXF[fifo - 1] >> 16;
+    return len*4;
+}
+void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd) {
+    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
+    USBHAL *obj= priv->inst;
+    USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
+    uint32_t sofnum = (USBx_DEVICE->DSTS & USB_OTG_DSTS_FNSOF) >> 8;
+    void (USBHAL::*func)(int frame) = priv->sof;
+    /* fix me  call with same frame number */
+    (obj->*func)(sofnum);
+}
+
+USBHAL * USBHAL::instance;
+
+USBHAL::USBHAL(void) {
+    /*  init parameter  */
+    USBHAL_Private_t *HALPriv = new(USBHAL_Private_t);
+    /*  initialized all field of init including 0 field  */
+    /*  constructor does not fill with zero */
+    hpcd.Instance = USB_OTG_FS;
+    /*  initialized all field of init including 0 field  */
+    /*  constructor does not fill with zero */
+    memset(&hpcd.Init, 0, sizeof(hpcd.Init));
+    hpcd.Init.dev_endpoints = NB_ENDPOINT;
+    hpcd.Init.ep0_mps =   MAX_PACKET_SIZE_EP0;
+    hpcd.Init.phy_itface = PCD_PHY_EMBEDDED;
+    hpcd.Init.Sof_enable = 1;
+    hpcd.Init.speed = PCD_SPEED_FULL;
+    /*  pass instance for usage inside call back */
+    HALPriv->inst = this;
+    HALPriv->bus_reset = &USBHAL::busReset;
+    HALPriv->suspend_change = &USBHAL::suspendStateChanged;
+    HALPriv->connect_change = &USBHAL::connectStateChanged;
+    HALPriv->sof = &USBHAL::SOF;
+    HALPriv->ep0_setup = &USBHAL::EP0setupCallback;
+    HALPriv->ep_realise = &USBHAL::realiseEndpoint;
+    HALPriv->ep0_in = &USBHAL::EP0in;
+    HALPriv->ep0_out = &USBHAL::EP0out;
+    HALPriv->ep0_read = &USBHAL::EP0read;
+    hpcd.pData = (void*)HALPriv;
+    HALPriv->epCallback[0] = &USBHAL::EP1_OUT_callback;
+    HALPriv->epCallback[1] = &USBHAL::EP1_IN_callback;
+    HALPriv->epCallback[2] = &USBHAL::EP2_OUT_callback;
+    HALPriv->epCallback[3] = &USBHAL::EP2_IN_callback;
+    HALPriv->epCallback[4] = &USBHAL::EP3_OUT_callback;
+    HALPriv->epCallback[5] = &USBHAL::EP3_IN_callback;
+    instance = this;
+
+    __HAL_RCC_PWR_CLK_ENABLE();
+
+    HAL_PWREx_EnableVddUSB(); 
+    /* Configure USB VBUS GPIO */
+    __HAL_RCC_GPIOC_CLK_ENABLE();
+
+    /* Configure USB FS GPIOs */
+    __HAL_RCC_GPIOA_CLK_ENABLE();
+
+    /* Configure DM DP Pins */
+    pin_function(PA_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
+    pin_function(PA_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
+
+    /* Configure VBUS Pin */
+    pin_function(PC_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
+
+    __HAL_RCC_USB_OTG_FS_CLK_ENABLE();
+
+    hpcd.State = HAL_PCD_STATE_RESET;
+
+    HAL_PCD_Init(&hpcd);
+    /* 1.25kbytes */
+    /* min value 16 (= 16 x 4 bytes) */
+    /*  max value 256 (= 1K bytes ) */
+    /*  maximum sum is 0x140 */
+    HAL_PCDEx_SetRxFiFo(&hpcd, (MAXTRANSFER_SIZE/4));
+    /*  bulk/int 64 bytes in FS  */
+    HAL_PCDEx_SetTxFiFo(&hpcd, 0, (MAX_PACKET_SIZE_EP0/4)+1);
+    /*  bulk/int bytes in FS */
+    HAL_PCDEx_SetTxFiFo(&hpcd, 1, (MAX_PACKET_SIZE_EP1/4)+1);
+    HAL_PCDEx_SetTxFiFo(&hpcd, 2, (MAX_PACKET_SIZE_EP2/4));
+    /* ISOchronous */
+    HAL_PCDEx_SetTxFiFo(&hpcd, 3, (MAX_PACKET_SIZE_EP3/4));
+
+    NVIC_SetVector(USBHAL_IRQn,(uint32_t)&_usbisr);
+    NVIC_SetPriority( USBHAL_IRQn, 1);
+
+    HAL_PCD_Start(&hpcd);
+}
+
+#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/USBHAL_STM_TARGET.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/USBHAL_STM_TARGET.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,18 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#include "USBHAL_STM32L475VG.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_DISCO_L476VG/USBHAL_STM32L476VG.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_DISCO_L476VG/USBHAL_STM32L476VG.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,145 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#ifndef USBHAL_STM32L476VG
+#define USBHAL_STM32L476VG
+
+#define USBHAL_IRQn  OTG_FS_IRQn
+
+
+#define NB_ENDPOINT  4
+/*  must be multiple of 4 bytes */
+#define MAXTRANSFER_SIZE  0x200
+#define FIFO_USB_RAM_SIZE (MAXTRANSFER_SIZE+MAX_PACKET_SIZE_EP0+MAX_PACKET_SIZE_EP1+MAX_PACKET_SIZE_EP2+MAX_PACKET_SIZE_EP3)
+#if (FIFO_USB_RAM_SIZE > 0x500)
+#error "FIFO dimensioning incorrect"
+#endif
+
+typedef struct
+{
+    USBHAL *inst;
+    void (USBHAL::*bus_reset)(void);
+    void (USBHAL::*sof)(int frame);
+    void (USBHAL::*connect_change)(unsigned int  connected);
+    void (USBHAL::*suspend_change)(unsigned int suspended);
+    void (USBHAL::*ep0_setup)(void);
+    void (USBHAL::*ep0_in)(void);
+    void (USBHAL::*ep0_out)(void);
+    void (USBHAL::*ep0_read)(void);
+    bool (USBHAL::*ep_realise)(uint8_t endpoint, uint32_t maxPacket, uint32_t flags);
+    bool (USBHAL::*epCallback[2*NB_ENDPOINT-2])(void);
+    uint8_t epComplete[8];
+    /*  memorize dummy buffer used for reception */
+    uint32_t pBufRx[MAXTRANSFER_SIZE>>2];
+    uint32_t pBufRx0[MAX_PACKET_SIZE_EP0>>2];
+}USBHAL_Private_t;
+
+uint32_t HAL_PCDEx_GetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo)
+{
+    uint32_t len;
+    if (fifo == 0) len = hpcd->Instance->DIEPTXF0_HNPTXFSIZ>>16;
+    else
+        len =  hpcd->Instance->DIEPTXF[fifo - 1] >> 16;
+    return len*4;
+}
+void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd) {
+    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
+    USBHAL *obj= priv->inst;
+    USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
+    uint32_t sofnum = (USBx_DEVICE->DSTS & USB_OTG_DSTS_FNSOF) >> 8;
+    void (USBHAL::*func)(int frame) = priv->sof;
+    /* fix me  call with same frame number */
+    (obj->*func)(sofnum);
+}
+
+USBHAL * USBHAL::instance;
+
+USBHAL::USBHAL(void) {
+    /*  init parameter  */
+    USBHAL_Private_t *HALPriv = new(USBHAL_Private_t);
+    /*  initialized all field of init including 0 field  */
+    /*  constructor does not fill with zero */
+    hpcd.Instance = USB_OTG_FS;
+    /*  initialized all field of init including 0 field  */
+    /*  constructor does not fill with zero */
+    memset(&hpcd.Init, 0, sizeof(hpcd.Init));
+    hpcd.Init.dev_endpoints = NB_ENDPOINT;
+    hpcd.Init.ep0_mps =   MAX_PACKET_SIZE_EP0;
+    hpcd.Init.phy_itface = PCD_PHY_EMBEDDED;
+    hpcd.Init.Sof_enable = 1;
+    hpcd.Init.speed = PCD_SPEED_FULL;
+    /*  pass instance for usage inside call back */
+    HALPriv->inst = this;
+    HALPriv->bus_reset = &USBHAL::busReset;
+    HALPriv->suspend_change = &USBHAL::suspendStateChanged;
+    HALPriv->connect_change = &USBHAL::connectStateChanged;
+    HALPriv->sof = &USBHAL::SOF;
+    HALPriv->ep0_setup = &USBHAL::EP0setupCallback;
+    HALPriv->ep_realise = &USBHAL::realiseEndpoint;
+    HALPriv->ep0_in = &USBHAL::EP0in;
+    HALPriv->ep0_out = &USBHAL::EP0out;
+    HALPriv->ep0_read = &USBHAL::EP0read;
+    hpcd.pData = (void*)HALPriv;
+    HALPriv->epCallback[0] = &USBHAL::EP1_OUT_callback;
+    HALPriv->epCallback[1] = &USBHAL::EP1_IN_callback;
+    HALPriv->epCallback[2] = &USBHAL::EP2_OUT_callback;
+    HALPriv->epCallback[3] = &USBHAL::EP2_IN_callback;
+    HALPriv->epCallback[4] = &USBHAL::EP3_OUT_callback;
+    HALPriv->epCallback[5] = &USBHAL::EP3_IN_callback;
+    instance = this;
+
+    __HAL_RCC_PWR_CLK_ENABLE();
+
+    HAL_PWREx_EnableVddUSB(); 
+    /* Configure USB VBUS GPIO */
+    __HAL_RCC_GPIOC_CLK_ENABLE();
+
+    /* Configure USB FS GPIOs */
+    __HAL_RCC_GPIOA_CLK_ENABLE();
+
+    /* Configure DM DP Pins */
+    pin_function(PA_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
+    pin_function(PA_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
+
+    /* Configure VBUS Pin */
+    pin_function(PC_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
+
+    __HAL_RCC_USB_OTG_FS_CLK_ENABLE();
+
+    hpcd.State = HAL_PCD_STATE_RESET;
+
+    HAL_PCD_Init(&hpcd);
+    /* 1.25kbytes */
+    /* min value 16 (= 16 x 4 bytes) */
+    /*  max value 256 (= 1K bytes ) */
+    /*  maximum sum is 0x140 */
+    HAL_PCDEx_SetRxFiFo(&hpcd, (MAXTRANSFER_SIZE/4));
+    /*  bulk/int 64 bytes in FS  */
+    HAL_PCDEx_SetTxFiFo(&hpcd, 0, (MAX_PACKET_SIZE_EP0/4)+1);
+    /*  bulk/int bytes in FS */
+    HAL_PCDEx_SetTxFiFo(&hpcd, 1, (MAX_PACKET_SIZE_EP1/4)+1);
+    HAL_PCDEx_SetTxFiFo(&hpcd, 2, (MAX_PACKET_SIZE_EP2/4));
+    /* ISOchronous */
+    HAL_PCDEx_SetTxFiFo(&hpcd, 3, (MAX_PACKET_SIZE_EP3/4));
+
+    NVIC_SetVector(USBHAL_IRQn,(uint32_t)&_usbisr);
+    NVIC_SetPriority( USBHAL_IRQn, 1);
+
+    HAL_PCD_Start(&hpcd);
+}
+
+#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_DISCO_L476VG/USBHAL_STM_TARGET.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_DISCO_L476VG/USBHAL_STM_TARGET.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,18 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#include "USBHAL_STM32L476VG.h"
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/USBEndpoints_STM32.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/USBEndpoints_STM32.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,67 @@
+/* Copyright (c) 2010-2011 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#define NUMBER_OF_LOGICAL_ENDPOINTS (4)
+#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS * 2)
+
+/* Define physical endpoint numbers */
+
+/*      Endpoint    No.     Type(s)       MaxPacket   DoubleBuffer  */
+/*      ----------------    ------------  ----------  ---           */
+#define EP0OUT      (0)  /* Control       64          No            */
+#define EP0IN       (1)  /* Control       64          No            */
+#define EP1OUT      (2)  /* Int/Bulk/Iso  64/64/1023  Yes           */
+#define EP1IN       (3)  /* Int/Bulk/Iso  64/64/1023  Yes           */
+#define EP2OUT      (4)  /* Int/Bulk/Iso  64/64/1023  Yes           */
+#define EP2IN       (5)  /* Int/Bulk/Iso  64/64/1023  Yes           */
+#define EP3OUT      (6)  /* Int/Bulk/Iso  64/64/1023  Yes           */
+#define EP3IN       (7)  /* Int/Bulk/Iso  64/64/1023  Yes           */
+
+/* Maximum Packet sizes */
+#define MAX_PACKET_SIZE_SETUP (48)
+#define MAX_PACKET_SIZE_EP0 (64)
+#define MAX_PACKET_SIZE_EP1 (64) /* Int/Bulk */
+#define MAX_PACKET_SIZE_EP2 (64) /* Int/Bulk */
+#define MAX_PACKET_SIZE_EP3 (200) /* Int/Bulk/iso (44100 stereo 16 bits) */
+
+#define MAX_PACKET_SIZE_EP1_ISO (1023) /* Isochronous */
+#define MAX_PACKET_SIZE_EP2_ISO (1023) /* Isochronous */
+#define MAX_PACKET_SIZE_EP3_ISO (1023) /* Isochronous */
+
+/* Generic endpoints - intended to be portable accross devices */
+/* and be suitable for simple USB devices. */
+
+/* Bulk endpoint */
+#define EPBULK_OUT  (EP2OUT)
+#define EPBULK_IN   (EP2IN)
+#define EPBULK_OUT_callback   EP2_OUT_callback
+#define EPBULK_IN_callback    EP2_IN_callback
+/* Interrupt endpoint */
+#define EPINT_OUT   (EP1OUT)
+#define EPINT_IN    (EP1IN)
+#define EPINT_OUT_callback    EP1_OUT_callback
+#define EPINT_IN_callback     EP1_IN_callback
+/* Isochronous endpoint */
+#define EPISO_OUT   (EP3OUT)
+#define EPISO_IN    (EP3IN)
+#define EPISO_OUT_callback    EP3_OUT_callback
+#define EPISO_IN_callback     EP3_IN_callback
+
+#define MAX_PACKET_SIZE_EPBULK  (MAX_PACKET_SIZE_EP2)
+#define MAX_PACKET_SIZE_EPINT   (MAX_PACKET_SIZE_EP1)
+#define MAX_PACKET_SIZE_EPISO   (MAX_PACKET_SIZE_EP3_ISO)
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/USBEndpoints_STM32F4.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/USBEndpoints_STM32F4.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,67 @@
+/* Copyright (c) 2010-2011 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#define NUMBER_OF_LOGICAL_ENDPOINTS (4)
+#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS * 2)
+
+/* Define physical endpoint numbers */
+
+/*      Endpoint    No.     Type(s)       MaxPacket   DoubleBuffer  */
+/*      ----------------    ------------  ----------  ---           */
+#define EP0OUT      (0)  /* Control       64          No            */
+#define EP0IN       (1)  /* Control       64          No            */
+#define EP1OUT      (2)  /* Int/Bulk/Iso  64/64/1023  Yes           */
+#define EP1IN       (3)  /* Int/Bulk/Iso  64/64/1023  Yes           */
+#define EP2OUT      (4)  /* Int/Bulk/Iso  64/64/1023  Yes           */
+#define EP2IN       (5)  /* Int/Bulk/Iso  64/64/1023  Yes           */
+#define EP3OUT      (6)  /* Int/Bulk/Iso  64/64/1023  Yes           */
+#define EP3IN       (7)  /* Int/Bulk/Iso  64/64/1023  Yes           */
+
+/* Maximum Packet sizes */
+
+#define MAX_PACKET_SIZE_EP0 (64)
+#define MAX_PACKET_SIZE_EP1 (64) /* Int/Bulk */
+#define MAX_PACKET_SIZE_EP2 (64) /* Int/Bulk */
+#define MAX_PACKET_SIZE_EP3 (64) /* Int/Bulk */
+
+#define MAX_PACKET_SIZE_EP1_ISO (1023) /* Isochronous */
+#define MAX_PACKET_SIZE_EP2_ISO (1023) /* Isochronous */
+#define MAX_PACKET_SIZE_EP3_ISO (1023) /* Isochronous */
+
+/* Generic endpoints - intended to be portable accross devices */
+/* and be suitable for simple USB devices. */
+
+/* Bulk endpoint */
+#define EPBULK_OUT  (EP2OUT)
+#define EPBULK_IN   (EP2IN)
+#define EPBULK_OUT_callback   EP2_OUT_callback
+#define EPBULK_IN_callback    EP2_IN_callback
+/* Interrupt endpoint */
+#define EPINT_OUT   (EP1OUT)
+#define EPINT_IN    (EP1IN)
+#define EPINT_OUT_callback    EP1_OUT_callback
+#define EPINT_IN_callback     EP1_IN_callback
+/* Isochronous endpoint */
+#define EPISO_OUT   (EP3OUT)
+#define EPISO_IN    (EP3IN)
+#define EPISO_OUT_callback    EP3_OUT_callback
+#define EPISO_IN_callback     EP3_IN_callback
+
+#define MAX_PACKET_SIZE_EPBULK  (MAX_PACKET_SIZE_EP2)
+#define MAX_PACKET_SIZE_EPINT   (MAX_PACKET_SIZE_EP1)
+#define MAX_PACKET_SIZE_EPISO   (MAX_PACKET_SIZE_EP3_ISO)
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/USBHAL_STM32.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/USBHAL_STM32.cpp	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,332 @@
+/* Copyright (c) 2010-2011 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+/* TARGET NOT STM does not support this HAL */
+#ifndef TARGET_STM
+#define USBSTM_HAL_UNSUPPORTED
+#endif
+/* F4 famlily wihtout USB_STM_HAL use another HAL*/
+#if defined(TARGET_STM) && defined(TARGET_STM32F4) && !defined(USB_STM_HAL)
+#define USBSTM_HAL_UNSUPPORTED
+#endif
+
+#ifndef USBSTM_HAL_UNSUPPORTED
+#include "USBHAL.h"
+#include "pinmap.h"
+/* mbed endpoint definition to hal definition   */
+#define EP_ADDR(ep) (((ep) >> 1)|((ep) & 1) << 7)
+/* from hal definition to mbed definition */
+#define ADDR_EPIN(ep) (((ep) << 1) | 1)
+#define ADDR_EPOUT(ep) (((ep) << 1))
+/* id to detect if rx buffer is used or not  */
+
+#include "USBHAL_STM_TARGET.h"
+
+
+/*  this call at device reception completion on a Out Enpoint  */
+void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+{
+    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
+    USBHAL *obj= priv->inst;
+    uint8_t endpoint = ADDR_EPOUT(epnum);
+    priv->epComplete[endpoint] = 1;
+    /* -2 endpoint 0 In out are not in call back list */
+    if (epnum) {
+        bool (USBHAL::*func)(void) = priv->epCallback[endpoint-2];
+        (obj->*func)();
+    } else {
+        void (USBHAL::*func)(void) = priv->ep0_out;
+        (obj->*func)();
+    }
+}
+
+/*  this is call at device transmission completion on In endpoint */
+void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+{
+    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
+    USBHAL *obj= priv->inst;
+    uint8_t endpoint = ADDR_EPIN(epnum);
+    priv->epComplete[endpoint] = 1;
+    /*  -2 endpoint 0 In out are not in call back list */
+    if (epnum) {
+        bool (USBHAL::*func)(void) = priv->epCallback[endpoint-2];
+        (obj->*func)();
+    } else {
+        void (USBHAL::*func)(void) = priv->ep0_in;
+        (obj->*func)();
+    }
+}
+/*  This is call at device set up reception  */
+void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd)
+{
+    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
+    USBHAL *obj= priv->inst;
+    void (USBHAL::*func)(void)=priv->ep0_setup;
+    void (USBHAL::*func1)(void)=priv->ep0_read;
+    (obj->*func)();
+    (obj->*func1)();
+}
+
+void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd)
+{
+    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
+    USBHAL *obj= priv->inst;
+    void (USBHAL::*func)(unsigned int suspended) = priv->suspend_change;
+    (obj->*func)(1);
+}
+
+void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd)
+{
+    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
+    USBHAL *obj= priv->inst;
+    void (USBHAL::*func)(unsigned int suspended) = priv->suspend_change;
+    (obj->*func)(0);
+}
+
+void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd)
+{
+    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
+    USBHAL *obj= priv->inst;
+    void (USBHAL::*func)(unsigned int suspended) = priv->connect_change;
+    (obj->*func)(1);
+}
+
+void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd)
+{
+    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
+    USBHAL *obj= priv->inst;
+    void (USBHAL::*func)(unsigned int suspended) = priv->connect_change;
+    (obj->*func)(0);
+}
+
+void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd)
+{
+    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
+    USBHAL *obj= priv->inst;
+    unsigned int i;
+    for(i=0;i<hpcd->Init.dev_endpoints;i++) {
+        priv->epComplete[2*i]=0;
+        HAL_PCD_EP_Close(hpcd,EP_ADDR(2*i));
+        HAL_PCD_EP_Flush(hpcd,EP_ADDR(2*i));
+        priv->epComplete[2*i+1]=0;
+        HAL_PCD_EP_Close(hpcd,EP_ADDR(2*i+1));
+        HAL_PCD_EP_Flush(hpcd,EP_ADDR(2*i+1));
+
+    }
+    void (USBHAL::*func)(void)=priv->bus_reset;
+    bool (USBHAL::*ep_realise)(uint8_t endpoint, uint32_t maxPacket, uint32_t flags) = priv->ep_realise;
+    (obj->*func)();
+    (obj->*ep_realise)(EP0IN, MAX_PACKET_SIZE_EP0,0);
+    (obj->*ep_realise)(EP0OUT, MAX_PACKET_SIZE_EP0,0);
+}
+
+
+/* hal pcd handler , used for STM32 HAL PCD Layer */
+
+uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) {
+    return 0;
+}
+
+USBHAL::~USBHAL(void) {
+	USBHAL_Private_t *HALPriv = (USBHAL_Private_t *)(hpcd.pData);
+	HAL_PCD_DeInit(&hpcd);
+	delete HALPriv;
+}
+
+void USBHAL::connect(void) {
+    NVIC_EnableIRQ(USBHAL_IRQn);
+}
+
+void USBHAL::disconnect(void) {
+    NVIC_DisableIRQ(USBHAL_IRQn);
+}
+
+void USBHAL::configureDevice(void) {
+    // Not needed
+}
+
+void USBHAL::unconfigureDevice(void) {
+    // Not needed
+}
+
+void USBHAL::setAddress(uint8_t address) {
+	HAL_PCD_SetAddress(&hpcd, address);
+    EP0write(0, 0);
+}
+
+bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t flags) {
+    uint32_t epIndex = EP_ADDR(endpoint);
+    uint32_t type;
+    uint32_t len;
+    HAL_StatusTypeDef ret;
+    switch (endpoint) {
+    case EP0IN:
+    case EP0OUT:
+        type =  0;
+        break;
+    case EPISO_IN:
+    case EPISO_OUT:
+        type = 1;
+        break;
+    case EPBULK_IN:
+    case EPBULK_OUT:
+        type =  2;
+        break;
+    case EPINT_IN:
+    case EPINT_OUT:
+        type =  3;
+        break;
+    }
+    if (maxPacket > MAXTRANSFER_SIZE) return false;
+    if (epIndex & 0x80) {
+        len = HAL_PCDEx_GetTxFiFo(&hpcd,epIndex & 0x7f);
+        MBED_ASSERT(len >= maxPacket);
+    }
+    ret = HAL_PCD_EP_Open(&hpcd, epIndex,  maxPacket, type);
+    MBED_ASSERT(ret!=HAL_BUSY);
+    return (ret == HAL_OK) ? true:false;
+}
+
+// read setup packet
+void USBHAL::EP0setup(uint8_t *buffer) {
+    memcpy(buffer,  hpcd.Setup, MAX_PACKET_SIZE_SETUP);
+	memset(hpcd.Setup,0,MAX_PACKET_SIZE_SETUP);
+}
+
+void USBHAL::EP0readStage(void) {
+}
+
+void USBHAL::EP0read(void) {
+     USBHAL_Private_t *HALPriv =  (USBHAL_Private_t *)hpcd.pData;
+	 uint32_t epIndex = EP_ADDR(EP0OUT);
+	 uint8_t *pBuf = (uint8_t *)HALPriv->pBufRx0;
+	 HAL_StatusTypeDef ret;
+	 HALPriv->epComplete[EP0OUT] = 2;
+	 ret = HAL_PCD_EP_Receive(&hpcd, epIndex, pBuf, MAX_PACKET_SIZE_EP0 );
+	 MBED_ASSERT(ret!=HAL_BUSY);
+
+}
+
+uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) {
+    USBHAL_Private_t *HALPriv =  (USBHAL_Private_t *)hpcd.pData;
+    uint32_t length = (uint32_t) HAL_PCD_EP_GetRxCount(&hpcd, 0);
+	HALPriv->epComplete[EP0OUT] = 0;
+    if (length) {
+        uint8_t  *buff = (uint8_t *)HALPriv->pBufRx0;
+        memcpy(buffer, buff, length);
+    }
+    return length;
+}
+
+void USBHAL::EP0write(uint8_t *buffer, uint32_t size) {
+    /*  check that endpoint maximum size is not exceeding TX fifo */
+    MBED_ASSERT(hpcd.IN_ep[0].maxpacket >= size);
+    endpointWrite(EP0IN, buffer, size);
+}
+
+void USBHAL::EP0getWriteResult(void) {
+
+}
+
+void USBHAL::EP0stall(void) {
+    stallEndpoint(EP0IN);
+}
+
+EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) {
+    USBHAL_Private_t *HALPriv =  (USBHAL_Private_t *)(hpcd.pData);
+    uint32_t epIndex = EP_ADDR(endpoint);
+    uint8_t* pBuf = (uint8_t *)HALPriv->pBufRx;
+	HAL_StatusTypeDef ret;
+    // clean reception end flag before requesting reception
+    HALPriv->epComplete[endpoint] = 2;
+    ret = HAL_PCD_EP_Receive(&hpcd, epIndex, pBuf, maximumSize);
+	MBED_ASSERT(ret!=HAL_BUSY);
+    return EP_PENDING;
+}
+
+EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_t *bytesRead) {
+    USBHAL_Private_t *HALPriv =  (USBHAL_Private_t *)(hpcd.pData);
+	if (HALPriv->epComplete[endpoint]==0) {
+		/*  no reception possible !!! */
+		bytesRead = 0;
+        return EP_COMPLETED;
+    }else if ((HALPriv->epComplete[endpoint]!=1))
+	return EP_PENDING;
+    uint32_t epIndex = EP_ADDR(endpoint);
+    uint8_t  *buff = (uint8_t *)HALPriv->pBufRx;
+    uint32_t length = (uint32_t) HAL_PCD_EP_GetRxCount(&hpcd, epIndex);
+    memcpy(buffer, buff, length);
+    *bytesRead = length;
+	HALPriv->epComplete[endpoint]= 0;
+    return EP_COMPLETED;
+}
+
+EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size) {
+	USBHAL_Private_t *HALPriv =  (USBHAL_Private_t *)(hpcd.pData);
+    uint32_t epIndex = EP_ADDR(endpoint);
+    HAL_StatusTypeDef ret;
+    // clean transmission end flag before requesting transmission
+    HALPriv->epComplete[endpoint] = 2;
+    ret = HAL_PCD_EP_Transmit(&hpcd, epIndex, data, size);
+	MBED_ASSERT(ret!=HAL_BUSY);
+    // update the status
+    if (ret != HAL_OK) return EP_INVALID; 
+    // fix me return is too simple
+    return EP_PENDING;
+}
+
+EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint) {
+	USBHAL_Private_t *HALPriv =  (USBHAL_Private_t *)(hpcd.pData);
+    if (HALPriv->epComplete[endpoint] == 1)
+        return EP_COMPLETED;
+    return EP_PENDING;
+}
+
+void USBHAL::stallEndpoint(uint8_t endpoint) {
+    USBHAL_Private_t *HALPriv =  (USBHAL_Private_t *)(hpcd.pData);
+	HAL_StatusTypeDef ret;
+	HALPriv->epComplete[endpoint] = 0;
+	ret = HAL_PCD_EP_SetStall(&hpcd, EP_ADDR(endpoint));
+	MBED_ASSERT(ret!=HAL_BUSY);
+}
+
+void USBHAL::unstallEndpoint(uint8_t endpoint) {
+	HAL_StatusTypeDef ret;
+    ret = HAL_PCD_EP_ClrStall(&hpcd, EP_ADDR(endpoint));
+	MBED_ASSERT(ret!=HAL_BUSY);
+
+}
+
+bool USBHAL::getEndpointStallState(uint8_t endpoint) {
+    return false;
+}
+
+void USBHAL::remoteWakeup(void) {
+}
+
+
+void USBHAL::_usbisr(void) {
+    instance->usbisr();
+}
+
+
+void USBHAL::usbisr(void) {
+
+    HAL_PCD_IRQHandler(&instance->hpcd);
+}
+#endif
+
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/USBHAL_STM32F4.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/USBHAL_STM32F4.cpp	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,416 @@
+/* Copyright (c) 2010-2011 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#if defined(TARGET_STM32F4) && !defined(USB_STM_HAL)
+
+#include "USBHAL.h"
+#include "USBRegs_STM32.h"
+#include "pinmap.h"
+
+USBHAL * USBHAL::instance;
+
+static volatile int epComplete = 0;
+
+static uint32_t bufferEnd = 0;
+static const uint32_t rxFifoSize = 512;
+static uint32_t rxFifoCount = 0;
+
+static uint32_t setupBuffer[MAX_PACKET_SIZE_EP0 >> 2];
+
+uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) {
+    return 0;
+}
+
+USBHAL::USBHAL(void) {
+    NVIC_DisableIRQ(OTG_FS_IRQn);
+    epCallback[0] = &USBHAL::EP1_OUT_callback;
+    epCallback[1] = &USBHAL::EP1_IN_callback;
+    epCallback[2] = &USBHAL::EP2_OUT_callback;
+    epCallback[3] = &USBHAL::EP2_IN_callback;
+    epCallback[4] = &USBHAL::EP3_OUT_callback;
+    epCallback[5] = &USBHAL::EP3_IN_callback;
+
+    // Enable power and clocking
+    RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
+
+#if defined(TARGET_STM32F407VG) || defined(TARGET_STM32F401RE) || defined(TARGET_STM32F411RE) || defined(TARGET_STM32F412ZG) || defined(TARGET_STM32F429ZI)
+    pin_function(PA_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
+    pin_function(PA_9, STM_PIN_DATA(STM_MODE_INPUT, GPIO_PULLDOWN, GPIO_AF10_OTG_FS));
+    pin_function(PA_10, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF10_OTG_FS));
+    pin_function(PA_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
+    pin_function(PA_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
+#else
+    pin_function(PA_8, STM_PIN_DATA(2, 10));
+    pin_function(PA_9, STM_PIN_DATA(0, 0));
+    pin_function(PA_10, STM_PIN_DATA(2, 10));
+    pin_function(PA_11, STM_PIN_DATA(2, 10));
+    pin_function(PA_12, STM_PIN_DATA(2, 10));
+
+    // Set ID pin to open drain with pull-up resistor
+    pin_mode(PA_10, OpenDrain);
+    GPIOA->PUPDR &= ~(0x3 << 20);
+    GPIOA->PUPDR |= 1 << 20;
+
+    // Set VBUS pin to open drain
+    pin_mode(PA_9, OpenDrain);
+#endif
+
+    RCC->AHB2ENR |= RCC_AHB2ENR_OTGFSEN;
+
+    // Enable interrupts
+    OTG_FS->GREGS.GAHBCFG |= (1 << 0);
+
+    // Turnaround time to maximum value - too small causes packet loss
+    OTG_FS->GREGS.GUSBCFG |= (0xF << 10);
+
+    // Unmask global interrupts
+    OTG_FS->GREGS.GINTMSK |= (1 << 3) | // SOF
+                             (1 << 4) | // RX FIFO not empty
+                             (1 << 12); // USB reset
+
+    OTG_FS->DREGS.DCFG |= (0x3 << 0) | // Full speed
+                          (1 << 2); // Non-zero-length status OUT handshake
+
+    OTG_FS->GREGS.GCCFG |= (1 << 19) | // Enable VBUS sensing
+                           (1 << 16); // Power Up
+
+    instance = this;
+    NVIC_SetVector(OTG_FS_IRQn, (uint32_t)&_usbisr);
+    NVIC_SetPriority(OTG_FS_IRQn, 1);
+}
+
+USBHAL::~USBHAL(void) {
+}
+
+void USBHAL::connect(void) {
+    NVIC_EnableIRQ(OTG_FS_IRQn);
+}
+
+void USBHAL::disconnect(void) {
+    NVIC_DisableIRQ(OTG_FS_IRQn);
+}
+
+void USBHAL::configureDevice(void) {
+    // Not needed
+}
+
+void USBHAL::unconfigureDevice(void) {
+    // Not needed
+}
+
+void USBHAL::setAddress(uint8_t address) {
+    OTG_FS->DREGS.DCFG |= (address << 4);
+    EP0write(0, 0);
+}
+
+bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket,
+                             uint32_t flags) {
+    uint32_t epIndex = endpoint >> 1;
+
+    uint32_t type;
+    switch (endpoint) {
+        case EP0IN:
+        case EP0OUT:
+            type = 0;
+            break;
+        case EPISO_IN:
+        case EPISO_OUT:
+            type = 1;
+        case EPBULK_IN:
+        case EPBULK_OUT:
+            type = 2;
+            break;
+        case EPINT_IN:
+        case EPINT_OUT:
+            type = 3;
+            break;
+    }
+
+    // Generic in or out EP controls
+    uint32_t control = (maxPacket << 0) | // Packet size
+                       (1 << 15) | // Active endpoint
+                       (type << 18); // Endpoint type
+
+    if (endpoint & 0x1) { // In Endpoint
+        // Set up the Tx FIFO
+        if (endpoint == EP0IN) {
+            OTG_FS->GREGS.DIEPTXF0_HNPTXFSIZ = ((maxPacket >> 2) << 16) |
+                                               (bufferEnd << 0);
+        }
+        else {
+            OTG_FS->GREGS.DIEPTXF[epIndex - 1] = ((maxPacket >> 2) << 16) |
+                                                 (bufferEnd << 0);
+        }
+        bufferEnd += maxPacket >> 2;
+
+        // Set the In EP specific control settings
+        if (endpoint != EP0IN) {
+            control |= (1 << 28); // SD0PID
+        }
+
+        control |= (epIndex << 22) | // TxFIFO index
+                   (1 << 27); // SNAK
+        OTG_FS->INEP_REGS[epIndex].DIEPCTL = control;
+
+        // Unmask the interrupt
+        OTG_FS->DREGS.DAINTMSK |= (1 << epIndex);
+    }
+    else { // Out endpoint
+        // Set the out EP specific control settings
+        control |= (1 << 26); // CNAK
+        OTG_FS->OUTEP_REGS[epIndex].DOEPCTL = control;
+
+        // Unmask the interrupt
+        OTG_FS->DREGS.DAINTMSK |= (1 << (epIndex + 16));
+    }
+    return true;
+}
+
+// read setup packet
+void USBHAL::EP0setup(uint8_t *buffer) {
+    memcpy(buffer, setupBuffer, MAX_PACKET_SIZE_EP0);
+}
+
+void USBHAL::EP0readStage(void) {
+}
+
+void USBHAL::EP0read(void) {
+}
+
+uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) {
+    uint32_t* buffer32 = (uint32_t *) buffer;
+    uint32_t length = rxFifoCount;
+    for (uint32_t i = 0; i < length; i += 4) {
+        buffer32[i >> 2] = OTG_FS->FIFO[0][0];
+    }
+
+    rxFifoCount = 0;
+    return length;
+}
+
+void USBHAL::EP0write(uint8_t *buffer, uint32_t size) {
+    endpointWrite(0, buffer, size);
+}
+
+void USBHAL::EP0getWriteResult(void) {
+}
+
+void USBHAL::EP0stall(void) {
+    // If we stall the out endpoint here then we have problems transferring
+    // and setup requests after the (stalled) get device qualifier requests.
+    // TODO: Find out if this is correct behavior, or whether we are doing
+    // something else wrong
+    stallEndpoint(EP0IN);
+//    stallEndpoint(EP0OUT);
+}
+
+EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) {
+    uint32_t epIndex = endpoint >> 1;
+    uint32_t size = (1 << 19) | // 1 packet
+                    (maximumSize << 0); // Packet size
+//    if (endpoint == EP0OUT) {
+        size |= (1 << 29); // 1 setup packet
+//    }
+    OTG_FS->OUTEP_REGS[epIndex].DOEPTSIZ = size;
+    OTG_FS->OUTEP_REGS[epIndex].DOEPCTL |= (1 << 31) | // Enable endpoint
+                                           (1 << 26); // Clear NAK
+
+    epComplete &= ~(1 << endpoint);
+    return EP_PENDING;
+}
+
+EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_t *bytesRead) {
+    if (!(epComplete & (1 << endpoint))) {
+        return EP_PENDING;
+    }
+
+    uint32_t* buffer32 = (uint32_t *) buffer;
+    uint32_t length = rxFifoCount;
+    for (uint32_t i = 0; i < length; i += 4) {
+        buffer32[i >> 2] = OTG_FS->FIFO[endpoint >> 1][0];
+    }
+    rxFifoCount = 0;
+    *bytesRead = length;
+    return EP_COMPLETED;
+}
+
+EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size) {
+    uint32_t epIndex = endpoint >> 1;
+    OTG_FS->INEP_REGS[epIndex].DIEPTSIZ = (1 << 19) | // 1 packet
+                                          (size << 0); // Size of packet
+    OTG_FS->INEP_REGS[epIndex].DIEPCTL |= (1 << 31) | // Enable endpoint
+                                          (1 << 26); // CNAK
+    OTG_FS->DREGS.DIEPEMPMSK = (1 << epIndex);
+
+    while ((OTG_FS->INEP_REGS[epIndex].DTXFSTS & 0XFFFF) < ((size + 3) >> 2));
+
+    for (uint32_t i=0; i<(size + 3) >> 2; i++, data+=4) {
+        OTG_FS->FIFO[epIndex][0] = *(uint32_t *)data;
+    }
+
+    epComplete &= ~(1 << endpoint);
+
+    return EP_PENDING;
+}
+
+EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint) {
+    if (epComplete & (1 << endpoint)) {
+        epComplete &= ~(1 << endpoint);
+        return EP_COMPLETED;
+    }
+
+    return EP_PENDING;
+}
+
+void USBHAL::stallEndpoint(uint8_t endpoint) {
+    if (endpoint & 0x1) { // In EP
+        OTG_FS->INEP_REGS[endpoint >> 1].DIEPCTL |= (1 << 30) | // Disable
+                                                    (1 << 21); // Stall
+    }
+    else {  // Out EP
+        OTG_FS->DREGS.DCTL |= (1 << 9); // Set global out NAK
+        OTG_FS->OUTEP_REGS[endpoint >> 1].DOEPCTL |= (1 << 30) | // Disable
+                                                     (1 << 21); // Stall
+    }
+}
+
+void USBHAL::unstallEndpoint(uint8_t endpoint) {
+
+}
+
+bool USBHAL::getEndpointStallState(uint8_t endpoint) {
+    return false;
+}
+
+void USBHAL::remoteWakeup(void) {
+}
+
+
+void USBHAL::_usbisr(void) {
+    instance->usbisr();
+}
+
+
+void USBHAL::usbisr(void) {
+    if (OTG_FS->GREGS.GINTSTS & (1 << 11)) { // USB Suspend
+        suspendStateChanged(1);
+    };
+
+    if (OTG_FS->GREGS.GINTSTS & (1 << 12)) { // USB Reset
+        suspendStateChanged(0);
+
+        // Set SNAK bits
+        OTG_FS->OUTEP_REGS[0].DOEPCTL |= (1 << 27);
+        OTG_FS->OUTEP_REGS[1].DOEPCTL |= (1 << 27);
+        OTG_FS->OUTEP_REGS[2].DOEPCTL |= (1 << 27);
+        OTG_FS->OUTEP_REGS[3].DOEPCTL |= (1 << 27);
+
+        OTG_FS->DREGS.DIEPMSK = (1 << 0);
+
+        bufferEnd = 0;
+
+        // Set the receive FIFO size
+        OTG_FS->GREGS.GRXFSIZ = rxFifoSize >> 2;
+        bufferEnd += rxFifoSize >> 2;
+
+        // Create the endpoints, and wait for setup packets on out EP0
+        realiseEndpoint(EP0IN, MAX_PACKET_SIZE_EP0, 0);
+        realiseEndpoint(EP0OUT, MAX_PACKET_SIZE_EP0, 0);
+        endpointRead(EP0OUT, MAX_PACKET_SIZE_EP0);
+
+        OTG_FS->GREGS.GINTSTS = (1 << 12);
+    }
+
+    if (OTG_FS->GREGS.GINTSTS & (1 << 4)) { // RX FIFO not empty
+        uint32_t status = OTG_FS->GREGS.GRXSTSP;
+
+        uint32_t endpoint = (status & 0xF) << 1;
+        uint32_t length = (status >> 4) & 0x7FF;
+        uint32_t type = (status >> 17) & 0xF;
+
+        rxFifoCount = length;
+
+        if (type == 0x6) {
+            // Setup packet
+            for (uint32_t i=0; i<length; i+=4) {
+                setupBuffer[i >> 2] = OTG_FS->FIFO[0][i >> 2];
+            }
+            rxFifoCount = 0;
+        }
+
+        if (type == 0x4) {
+            // Setup complete
+            EP0setupCallback();
+            endpointRead(EP0OUT, MAX_PACKET_SIZE_EP0);
+        }
+
+        if (type == 0x2) {
+            // Out packet
+            if (endpoint == EP0OUT) {
+                EP0out();
+            }
+            else {
+                epComplete |= (1 << endpoint);
+                if ((instance->*(epCallback[endpoint - 2]))()) {
+                    epComplete &= ~(1 << endpoint);
+                }
+            }
+        }
+
+        for (uint32_t i=0; i<rxFifoCount; i+=4) {
+            (void) OTG_FS->FIFO[0][0];
+        }
+        OTG_FS->GREGS.GINTSTS = (1 << 4);
+    }
+
+    if (OTG_FS->GREGS.GINTSTS & (1 << 18)) { // In endpoint interrupt
+        // Loop through the in endpoints
+        for (uint32_t i=0; i<4; i++) {
+            if (OTG_FS->DREGS.DAINT & (1 << i)) { // Interrupt is on endpoint
+
+                if (OTG_FS->INEP_REGS[i].DIEPINT & (1 << 7)) {// Tx FIFO empty
+                    // If the Tx FIFO is empty on EP0 we need to send a further
+                    // packet, so call EP0in()
+                    if (i == 0) {
+                        EP0in();
+                    }
+                    // Clear the interrupt
+                    OTG_FS->INEP_REGS[i].DIEPINT = (1 << 7);
+                    // Stop firing Tx empty interrupts
+                    // Will get turned on again if another write is called
+                    OTG_FS->DREGS.DIEPEMPMSK &= ~(1 << i);
+                }
+
+                // If the transfer is complete
+                if (OTG_FS->INEP_REGS[i].DIEPINT & (1 << 0)) { // Tx Complete
+                    epComplete |= (1 << (1 + (i << 1)));
+                    OTG_FS->INEP_REGS[i].DIEPINT = (1 << 0);
+                }
+            }
+        }
+        OTG_FS->GREGS.GINTSTS = (1 << 18);
+    }
+
+    if (OTG_FS->GREGS.GINTSTS & (1 << 3)) { // Start of frame
+        SOF((OTG_FS->GREGS.GRXSTSR >> 17) & 0xF);
+        OTG_FS->GREGS.GINTSTS = (1 << 3);
+    }
+}
+
+
+#endif
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/USBHAL_STM_144_64pins.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/USBHAL_STM_144_64pins.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,132 @@
+/* Copyright (c) 2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#ifndef USBHAL_STM32_144_64
+#define USBHAL_STM32_144_64
+
+#define USBHAL_IRQn  OTG_FS_IRQn
+/*  must be multiple of 4 bytes */
+#define NB_ENDPOINT 4
+#define MAXTRANSFER_SIZE  0x200
+#define FIFO_USB_RAM_SIZE (MAXTRANSFER_SIZE+MAX_PACKET_SIZE_EP0+MAX_PACKET_SIZE_EP1+MAX_PACKET_SIZE_EP2+MAX_PACKET_SIZE_EP3)
+#if (FIFO_USB_RAM_SIZE > 0x500)
+#error "FIFO dimensioning incorrect"
+#endif
+
+typedef struct
+{
+    USBHAL *inst;
+    void (USBHAL::*bus_reset)(void);
+    void (USBHAL::*sof)(int frame);
+    void (USBHAL::*connect_change)(unsigned int  connected);
+    void (USBHAL::*suspend_change)(unsigned int suspended);
+    void (USBHAL::*ep0_setup)(void);
+    void (USBHAL::*ep0_in)(void);
+    void (USBHAL::*ep0_out)(void);
+    void (USBHAL::*ep0_read)(void);
+    bool (USBHAL::*ep_realise)(uint8_t endpoint, uint32_t maxPacket, uint32_t flags);
+    bool (USBHAL::*epCallback[2*NB_ENDPOINT-2])(void);
+    /*  memorize dummy buffer used for reception */
+    uint32_t pBufRx[MAXTRANSFER_SIZE>>2];
+    uint32_t pBufRx0[MAX_PACKET_SIZE_EP0>>2];
+    uint8_t epComplete[2*NB_ENDPOINT];
+}USBHAL_Private_t;
+
+uint32_t HAL_PCDEx_GetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo)
+{
+    uint32_t len;
+    if (fifo == 0) len = hpcd->Instance->DIEPTXF0_HNPTXFSIZ>>16;
+    else
+        len =  hpcd->Instance->DIEPTXF[fifo - 1] >> 16;
+    return len*4;
+}
+void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd) 
+{
+    USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
+    USBHAL *obj= priv->inst;
+    USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
+    uint32_t sofnum = (USBx_DEVICE->DSTS & USB_OTG_DSTS_FNSOF) >> 8;
+    void (USBHAL::*func)(int frame) = priv->sof;
+    (obj->*func)(sofnum);
+}
+
+
+USBHAL * USBHAL::instance;
+
+USBHAL::USBHAL(void) {
+    /*  init parameter  */
+    USBHAL_Private_t *HALPriv = new(USBHAL_Private_t);
+    hpcd.Instance = USB_OTG_FS;
+    memset(&hpcd.Init, 0, sizeof(hpcd.Init));
+    hpcd.Init.dev_endpoints = NB_ENDPOINT;
+    hpcd.Init.ep0_mps =   MAX_PACKET_SIZE_EP0;
+    hpcd.Init.phy_itface = PCD_PHY_EMBEDDED;
+    hpcd.Init.Sof_enable = 1;
+
+    hpcd.Init.speed = PCD_SPEED_FULL;
+    //hpcd.Init.vbus_sensing_enable = 0;
+    //hpcd.Init.lpm_enable = 0;
+    /*  pass instance for usage inside call back */
+    HALPriv->inst = this;
+    HALPriv->bus_reset = &USBHAL::busReset;
+    HALPriv->suspend_change = &USBHAL::suspendStateChanged;
+    HALPriv->connect_change = &USBHAL::connectStateChanged;
+    HALPriv->sof = &USBHAL::SOF;
+    HALPriv->ep0_setup = &USBHAL::EP0setupCallback;
+    HALPriv->ep_realise = &USBHAL::realiseEndpoint;
+    HALPriv->ep0_in = &USBHAL::EP0in;
+    HALPriv->ep0_out = &USBHAL::EP0out;
+    HALPriv->ep0_read = &USBHAL::EP0read;
+    hpcd.pData = (void*)HALPriv;
+    HALPriv->epCallback[0] = &USBHAL::EP1_OUT_callback;
+    HALPriv->epCallback[1] = &USBHAL::EP1_IN_callback;
+    HALPriv->epCallback[2] = &USBHAL::EP2_OUT_callback;
+    HALPriv->epCallback[3] = &USBHAL::EP2_IN_callback;
+    HALPriv->epCallback[4] = &USBHAL::EP3_OUT_callback;
+    HALPriv->epCallback[5] = &USBHAL::EP3_IN_callback;
+    instance = this;
+    // Enable power and clocking
+    /*  board 144 pin all similar  */
+    __HAL_RCC_GPIOA_CLK_ENABLE();
+    pin_function(PA_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));  /* OTG_FS_SOF */
+    pin_function(PA_9, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF10_OTG_FS));  /* OTG_FS_VBUS */
+    pin_function(PA_10, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF10_OTG_FS)); /* OTG_FS_ID */
+    pin_function(PA_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS)); /* OTG_FS_DM */
+    pin_function(PA_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS)); /* OTG_FS_DP */
+
+    __HAL_RCC_USB_OTG_FS_CLK_ENABLE();
+    __HAL_RCC_SYSCFG_CLK_ENABLE();
+    hpcd.State = HAL_PCD_STATE_RESET;
+    HAL_PCD_Init(&hpcd);
+    /* 1.25kbytes */
+    /* min value 16 (= 16 x 4 bytes) */
+    /*  max value 256 (= 1K bytes ) */
+    /*  maximum sum is 0x140 */
+    HAL_PCDEx_SetRxFiFo(&hpcd, (MAXTRANSFER_SIZE/4));
+    /*  bulk/int 64 bytes in FS  */
+    HAL_PCDEx_SetTxFiFo(&hpcd, 0, (MAX_PACKET_SIZE_EP0/4)+1);
+    /*  bulk/int bytes in FS */
+    HAL_PCDEx_SetTxFiFo(&hpcd, 1, (MAX_PACKET_SIZE_EP1/4)+1);
+    HAL_PCDEx_SetTxFiFo(&hpcd, 2, (MAX_PACKET_SIZE_EP2/4));
+    /* ISOchronous */
+    HAL_PCDEx_SetTxFiFo(&hpcd, 3, (MAX_PACKET_SIZE_EP3/4));
+    NVIC_SetVector(USBHAL_IRQn, (uint32_t)&_usbisr);
+    NVIC_SetPriority(USBHAL_IRQn, 1);
+    HAL_PCD_Start(&hpcd);
+}
+#endif
+
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_STM/USBRegs_STM32.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_STM/USBRegs_STM32.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,149 @@
+/**
+  ******************************************************************************
+  * @file    usb_regs.h
+  * @author  MCD Application Team
+  * @version V2.1.0
+  * @date    19-March-2012
+  * @brief   hardware registers
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+#ifndef __USB_OTG_REGS_H__
+#define __USB_OTG_REGS_H__
+
+typedef struct //000h
+{
+  __IO uint32_t GOTGCTL;      /* USB_OTG Control and Status Register    000h*/
+  __IO uint32_t GOTGINT;      /* USB_OTG Interrupt Register             004h*/
+  __IO uint32_t GAHBCFG;      /* Core AHB Configuration Register    008h*/
+  __IO uint32_t GUSBCFG;      /* Core USB Configuration Register    00Ch*/
+  __IO uint32_t GRSTCTL;      /* Core Reset Register                010h*/
+  __IO uint32_t GINTSTS;      /* Core Interrupt Register            014h*/
+  __IO uint32_t GINTMSK;      /* Core Interrupt Mask Register       018h*/
+  __IO uint32_t GRXSTSR;      /* Receive Sts Q Read Register        01Ch*/
+  __IO uint32_t GRXSTSP;      /* Receive Sts Q Read & POP Register  020h*/
+  __IO uint32_t GRXFSIZ;      /* Receive FIFO Size Register         024h*/
+  __IO uint32_t DIEPTXF0_HNPTXFSIZ;   /* EP0 / Non Periodic Tx FIFO Size Register 028h*/
+  __IO uint32_t HNPTXSTS;     /* Non Periodic Tx FIFO/Queue Sts reg 02Ch*/
+  uint32_t Reserved30[2];     /* Reserved                           030h*/
+  __IO uint32_t GCCFG;        /* General Purpose IO Register        038h*/
+  __IO uint32_t CID;          /* User ID Register                   03Ch*/
+  uint32_t  Reserved40[48];   /* Reserved                      040h-0FFh*/
+  __IO uint32_t HPTXFSIZ; /* Host Periodic Tx FIFO Size Reg     100h*/
+  __IO uint32_t DIEPTXF[3];/* dev Periodic Transmit FIFO */
+}
+USB_OTG_GREGS;
+
+typedef struct // 800h
+{
+  __IO uint32_t DCFG;         /* dev Configuration Register   800h*/
+  __IO uint32_t DCTL;         /* dev Control Register         804h*/
+  __IO uint32_t DSTS;         /* dev Status Register (RO)     808h*/
+  uint32_t Reserved0C;           /* Reserved                     80Ch*/
+  __IO uint32_t DIEPMSK;   /* dev IN Endpoint Mask         810h*/
+  __IO uint32_t DOEPMSK;  /* dev OUT Endpoint Mask        814h*/
+  __IO uint32_t DAINT;     /* dev All Endpoints Itr Reg    818h*/
+  __IO uint32_t DAINTMSK; /* dev All Endpoints Itr Mask   81Ch*/
+  uint32_t  Reserved20;          /* Reserved                     820h*/
+  uint32_t Reserved9;       /* Reserved                     824h*/
+  __IO uint32_t DVBUSDIS;    /* dev VBUS discharge Register  828h*/
+  __IO uint32_t DVBUSPULSE;  /* dev VBUS Pulse Register      82Ch*/
+  __IO uint32_t DTHRCTL;     /* dev thr                      830h*/
+  __IO uint32_t DIEPEMPMSK; /* dev empty msk             834h*/
+}
+USB_OTG_DREGS;
+
+typedef struct
+{
+  __IO uint32_t DIEPCTL; /* dev IN Endpoint Control Reg 900h + (ep_num * 20h) + 00h*/
+  uint32_t Reserved04;             /* Reserved                       900h + (ep_num * 20h) + 04h*/
+  __IO uint32_t DIEPINT; /* dev IN Endpoint Itr Reg     900h + (ep_num * 20h) + 08h*/
+  uint32_t Reserved0C;             /* Reserved                       900h + (ep_num * 20h) + 0Ch*/
+  __IO uint32_t DIEPTSIZ; /* IN Endpoint Txfer Size   900h + (ep_num * 20h) + 10h*/
+  uint32_t Reserved14;
+  __IO uint32_t DTXFSTS;/*IN Endpoint Tx FIFO Status Reg 900h + (ep_num * 20h) + 18h*/
+  uint32_t Reserved1C;             /* Reserved  900h+(ep_num*20h)+1Ch-900h+ (ep_num * 20h) + 1Ch*/
+}
+USB_OTG_INEPREGS;
+
+typedef struct
+{
+  __IO uint32_t DOEPCTL;       /* dev OUT Endpoint Control Reg  B00h + (ep_num * 20h) + 00h*/
+  uint32_t Reserved04;         /* Reserved                      B00h + (ep_num * 20h) + 04h*/
+  __IO uint32_t DOEPINT;       /* dev OUT Endpoint Itr Reg      B00h + (ep_num * 20h) + 08h*/
+  uint32_t Reserved0C;         /* Reserved                      B00h + (ep_num * 20h) + 0Ch*/
+  __IO uint32_t DOEPTSIZ;      /* dev OUT Endpoint Txfer Size   B00h + (ep_num * 20h) + 10h*/
+  uint32_t Reserved14[3];
+}
+USB_OTG_OUTEPREGS;
+
+typedef struct
+{
+  __IO uint32_t HCFG;             /* Host Configuration Register    400h*/
+  __IO uint32_t HFIR;      /* Host Frame Interval Register   404h*/
+  __IO uint32_t HFNUM;         /* Host Frame Nbr/Frame Remaining 408h*/
+  uint32_t Reserved40C;                   /* Reserved                       40Ch*/
+  __IO uint32_t HPTXSTS;   /* Host Periodic Tx FIFO/ Queue Status 410h*/
+  __IO uint32_t HAINT;   /* Host All Channels Interrupt Register 414h*/
+  __IO uint32_t HAINTMSK;   /* Host All Channels Interrupt Mask 418h*/
+}
+USB_OTG_HREGS;
+
+typedef struct
+{
+  __IO uint32_t HCCHAR;
+  __IO uint32_t HCSPLT;
+  __IO uint32_t HCINT;
+  __IO uint32_t HCINTMSK;
+  __IO uint32_t HCTSIZ;
+  uint32_t Reserved[3];
+}
+USB_OTG_HC_REGS;
+
+typedef struct
+{
+    USB_OTG_GREGS         GREGS;
+    uint32_t RESERVED0[188];
+    USB_OTG_HREGS         HREGS;
+    uint32_t RESERVED1[9];
+    __IO uint32_t         HPRT;
+    uint32_t RESERVED2[47];
+    USB_OTG_HC_REGS       HC_REGS[8];
+    uint32_t RESERVED3[128];
+    USB_OTG_DREGS         DREGS;
+    uint32_t RESERVED4[50];
+    USB_OTG_INEPREGS      INEP_REGS[4];
+    uint32_t RESERVED5[96];
+    USB_OTG_OUTEPREGS     OUTEP_REGS[4];
+    uint32_t RESERVED6[160];
+    __IO uint32_t         PCGCCTL;
+    uint32_t RESERVED7[127];
+    __IO uint32_t         FIFO[4][1024];
+}
+USB_OTG_CORE_REGS;
+
+
+#define OTG_FS_BASE (AHB2PERIPH_BASE + 0x0000)
+#define OTG_FS ((USB_OTG_CORE_REGS *) OTG_FS_BASE)
+
+#endif //__USB_OTG_REGS_H__
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_Silicon_Labs/USBEndpoints_EFM32.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_Silicon_Labs/USBEndpoints_EFM32.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,65 @@
+
+#ifndef TARGET_EFM32HG_STK3400
+# define NUMBER_OF_LOGICAL_ENDPOINTS   (6)
+#else
+# define NUMBER_OF_LOGICAL_ENDPOINTS   (3)
+#endif
+
+#define NUMBER_OF_PHYSICAL_ENDPOINTS  (NUMBER_OF_LOGICAL_ENDPOINTS * 2)
+#define NUMBER_OF_ENDPOINTS           (NUMBER_OF_PHYSICAL_ENDPOINTS + 2)  /* Includes EP0 */
+
+#define EP0OUT      (0)
+#define EP0IN       (1)
+#define EP1OUT      (2)
+#define EP1IN       (3)
+#define EP2OUT      (4)
+#define EP2IN       (5)
+#define EP3OUT      (6)
+#define EP3IN       (7)
+#ifndef TARGET_EFM32HG_STK3400
+# define EP4OUT     (8)
+# define EP4IN      (9)
+# define EP5OUT     (10)
+# define EP5IN      (11)
+# define EP6OUT     (12)
+# define EP6IN      (13)
+#endif
+
+#define USB_EP_TO_INDEX(ep) (ep)
+#define USB_EP_TO_ADDR(ep)  (((ep)>>1) | (((ep) & 1   ) ? 0x80 : 0x00))
+#define USB_ADDR_TO_EP(ep)  (((ep)<<1) | (((ep) & 0x80) ? 0x01 : 0x00))
+
+/* Maximum Packet sizes */
+
+#define MAX_PACKET_SIZE_EP0   64
+#define MAX_PACKET_SIZE_EP1   64
+#define MAX_PACKET_SIZE_EP2   64
+#define MAX_PACKET_SIZE_EP3   64
+#ifndef TARGET_EFM32HG_STK3400
+# define MAX_PACKET_SIZE_EP4  64
+# define MAX_PACKET_SIZE_EP5  64
+# define MAX_PACKET_SIZE_EP6  64
+#endif
+
+/* Generic endpoints - intended to be portable accross devices */
+/* and be suitable for simple USB devices. */
+
+/* Bulk endpoints */
+#define EPBULK_OUT            EP2OUT
+#define EPBULK_IN             EP2IN
+#define EPBULK_OUT_callback   EP2_OUT_callback
+#define EPBULK_IN_callback    EP2_IN_callback
+/* Interrupt endpoints */
+#define EPINT_OUT             EP1OUT
+#define EPINT_IN              EP1IN
+#define EPINT_OUT_callback    EP1_OUT_callback
+#define EPINT_IN_callback     EP1_IN_callback
+/* Isochronous endpoints */
+#define EPISO_OUT             EP3OUT
+#define EPISO_IN              EP3IN
+#define EPISO_OUT_callback    EP3_OUT_callback
+#define EPISO_IN_callback     EP3_IN_callback
+
+#define MAX_PACKET_SIZE_EPBULK  64
+#define MAX_PACKET_SIZE_EPINT   64
+#define MAX_PACKET_SIZE_EPISO   1023
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_Silicon_Labs/USBHAL_EFM32.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_Silicon_Labs/USBHAL_EFM32.cpp	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,775 @@
+/* Copyright 2015 Silicon Labs, http://www.silabs.com
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined TARGET_EFM32GG_STK3700 || \
+    defined TARGET_EFM32LG_STK3600 || \
+    defined TARGET_EFM32WG_STK3800 || \
+    defined TARGET_EFM32HG_STK3400
+
+#include "USBHAL.h"
+#include "em_usb.h"
+#include "em_usbtypes.h"
+#include "em_usbhal.h"
+#include "em_usbd.h"
+
+#include "sleepmodes.h"
+
+enum USBISRCommand {
+    CMD_HANDLED = 0,
+    CMD_EP0SETUP,
+    CMD_EP0IN,
+    CMD_EP0OUT,
+    CMD_EP_XFER_COMPLETED,
+    CMD_SOF,
+    CMD_BUSRESET,
+    CMD_SUSPEND_STATE_CHANGED,
+    CMD_ENUM_END_MARKER
+};
+
+enum IEPStatus {
+    NOT_CONFIGURED = 0,
+    IDLE = 1,
+    READ_PENDING = 2,
+    WRITE_PENDING = 3,
+    READ_COMPLETE = 4,
+    WRITE_COMPLETE = 5,
+    FAILED_INVALID = 6,
+    FAILED_STALLED = 7
+};
+
+typedef struct {
+    IEPStatus status;
+    uint32_t byte_count;
+    uint32_t max_packet;
+    USB_XferCompleteCb_TypeDef intern_cb;
+    uint8_t *data_buf;
+} ep_state_t;
+
+USBHAL * USBHAL::instance;
+static uint8_t ep0setupdata[8];
+static ep_state_t ep_state[NUMBER_OF_ENDPOINTS];
+#ifdef USB_USE_DYNAMIC_MEMORY
+static uint8_t ep0in_data_buf[MAX_PACKET_SIZE_EP0] __attribute__ ((aligned (4)));
+static uint8_t ep0out_data_buf[MAX_PACKET_SIZE_EP0]; // FIXME: does this need to be this big?
+#else
+static uint8_t ep_data_buf[NUMBER_OF_ENDPOINTS][64] __attribute__ ((aligned (4)));
+#endif
+
+static void run_cmd(USBISRCommand cmd, uint32_t param);
+static void (*isrptr)() = NULL;
+static USBISRCommand usb_isrcmd = CMD_HANDLED;
+static uint32_t usb_isrcmd_param = 0;
+
+extern "C" void usbhal_allow_em2(bool allow_em2);
+
+#ifdef DEBUG_USB_API
+#define TRACE(fmt,...)            printf("USB:   %s: " fmt "\n", __func__, __VA_ARGS__);
+#define TRACE_FUNC_IN             printf("USB: > %s\n",__func__);
+#define TRACE_FUNC_IN_P(fmt, ...) printf("USB: > %s: " fmt "\n", __func__, __VA_ARGS__);
+#else
+#define TRACE(fmt,...)
+#define TRACE_FUNC_IN
+#define TRACE_FUNC_IN_P(fmt, ...)
+#endif
+
+static EP_STATUS internEndpointRead(uint8_t ep, uint32_t maxSize);
+
+static int usbhal_xfer_complete_cb(uint8_t epaddr, USB_Status_TypeDef status,
+                                   uint32_t xferred, uint32_t remaining);
+static void usbhal_free_buffers(void);
+
+/* Internal EP transfer complete callbacks */
+#define EPCB(n) static int usbhal_xfer_complete_cb_##n(USB_Status_TypeDef status,              \
+                                                       uint32_t xferred, uint32_t remaining) { \
+        return usbhal_xfer_complete_cb(n, status, xferred, remaining);                         \
+}
+/*   ------^   */
+EPCB(EP0OUT)
+EPCB(EP0IN)
+EPCB(EP1OUT)
+EPCB(EP1IN)
+EPCB(EP2OUT)
+EPCB(EP2IN)
+EPCB(EP3OUT)
+EPCB(EP3IN)
+#ifndef TARGET_EFM32HG_STK3400
+EPCB(EP4OUT)
+EPCB(EP4IN)
+EPCB(EP5OUT)
+EPCB(EP5IN)
+EPCB(EP6OUT)
+EPCB(EP6IN)
+#endif
+
+static inline bool is_aligned(const void *pointer, size_t byte_count)
+{
+    return ((uintptr_t)pointer % byte_count == 0);
+}
+
+USBHAL::USBHAL(void)
+{
+    TRACE_FUNC_IN;
+
+    isrptr = &USBHAL::_usbisr;
+
+    if (instance) {
+        TRACE("Assert self failed! instance=%p", instance);
+        abort();
+    }
+    instance = this;
+
+    // When USB is active, we can't go below EM1. This block may
+    // be dynamically removed/reinstated to allow deeper sleep.
+    usbhal_allow_em2(false);
+
+    // When in suspend / Vbus off we can go to EM2, but never below
+    // that as long as USB is being used. Despite the name the call here
+    // blocks entering modes _below_ EM2, but allows EM2.
+    blockSleepMode(EM2);
+
+    epCallback[EP0OUT] = NULL;
+    epCallback[EP0IN ] = NULL;
+    epCallback[EP1OUT] = &USBHAL::EP1_OUT_callback;
+    epCallback[EP1IN ] = &USBHAL::EP1_IN_callback;
+    epCallback[EP2OUT] = &USBHAL::EP2_OUT_callback;
+    epCallback[EP2IN ] = &USBHAL::EP2_IN_callback;
+    epCallback[EP3OUT] = &USBHAL::EP3_OUT_callback;
+    epCallback[EP3IN ] = &USBHAL::EP3_IN_callback;
+#ifndef TARGET_EFM32HG_STK3400
+    epCallback[EP4OUT] = &USBHAL::EP4_OUT_callback;
+    epCallback[EP4IN ] = &USBHAL::EP4_IN_callback;
+    epCallback[EP5OUT] = &USBHAL::EP5_OUT_callback;
+    epCallback[EP5IN ] = &USBHAL::EP5_IN_callback;
+    epCallback[EP6OUT] = &USBHAL::EP6_OUT_callback;
+    epCallback[EP6IN ] = &USBHAL::EP6_IN_callback;
+#endif
+
+    memset(ep_state, 0, sizeof(ep_state));
+
+    ep_state[EP0OUT].intern_cb = usbhal_xfer_complete_cb_EP0OUT;
+    ep_state[EP0IN ].intern_cb = usbhal_xfer_complete_cb_EP0IN;
+    ep_state[EP1OUT].intern_cb = usbhal_xfer_complete_cb_EP1OUT;
+    ep_state[EP1IN ].intern_cb = usbhal_xfer_complete_cb_EP1IN;
+    ep_state[EP2OUT].intern_cb = usbhal_xfer_complete_cb_EP2OUT;
+    ep_state[EP2IN ].intern_cb = usbhal_xfer_complete_cb_EP2IN;
+    ep_state[EP3OUT].intern_cb = usbhal_xfer_complete_cb_EP3OUT;
+    ep_state[EP3IN ].intern_cb = usbhal_xfer_complete_cb_EP3IN;
+#ifndef TARGET_EFM32HG_STK3400
+    ep_state[EP4OUT].intern_cb = usbhal_xfer_complete_cb_EP4OUT;
+    ep_state[EP4IN ].intern_cb = usbhal_xfer_complete_cb_EP4IN;
+    ep_state[EP5OUT].intern_cb = usbhal_xfer_complete_cb_EP5OUT;
+    ep_state[EP5IN ].intern_cb = usbhal_xfer_complete_cb_EP5IN;
+    ep_state[EP6OUT].intern_cb = usbhal_xfer_complete_cb_EP6OUT;
+    ep_state[EP6IN ].intern_cb = usbhal_xfer_complete_cb_EP6IN;
+#endif
+
+#ifdef USB_USE_DYNAMIC_MEMORY
+    ep_state[EP0OUT].data_buf = ep0out_data_buf;
+    ep_state[EP0IN].data_buf = ep0in_data_buf;
+#else
+    for (int i=0 ; i<NUMBER_OF_ENDPOINTS ; i++) {
+        ep_state[i].data_buf = ep_data_buf[i];
+    }
+#endif
+}
+
+USBHAL::~USBHAL(void)
+{
+    TRACE_FUNC_IN;
+    USBD_AbortAllTransfers();
+    USBD_Disconnect();
+    usbhal_free_buffers();
+
+    usbhal_allow_em2(true);
+    unblockSleepMode(EM2);
+}
+
+extern "C" void usbhal_allow_em2(bool allow_em2)
+{
+    if (allow_em2) {
+        // unblockSleepMode is safe to call even if we would unblock
+        // an already unblocked mode, so no checks here.
+        unblockSleepMode(EM1);
+    } else {
+        blockSleepMode(EM1);
+    }
+}
+
+static void usbhal_reset_cb(void)
+{
+    TRACE_FUNC_IN;
+    run_cmd(CMD_BUSRESET, 0);
+}
+
+#ifdef DEBUG_USB_API
+static const char *usbstate[] = { "NONE", "ATTACHED", "POWERED", "DEFAULT",
+                                  "ADDRESSED", "CONFIGURED", "SUSPENDED", "???" };
+#endif
+
+static void usbhal_state_change_cb(USBD_State_TypeDef oldState,
+                                   USBD_State_TypeDef newState)
+{
+    TRACE("state changed %s -> %s", usbstate[oldState], usbstate[newState]);
+
+    if (oldState == USBD_STATE_SUSPENDED) {
+        run_cmd(CMD_SUSPEND_STATE_CHANGED, 0);
+    }
+
+    if (newState == USBD_STATE_SUSPENDED) {
+        run_cmd(CMD_SUSPEND_STATE_CHANGED, 1);
+    }
+
+    // Should call connectStateChanged from here as well but there is
+    // no documentation on when to actually do so. (And the implementation
+    // in USBDevice.cpp is a stub)
+
+    // HACK! Since connectStateChanged is not used, indicate the loss
+    // off connection by reporting a bus reset. This causes USBDevice
+    // to realise that at least it's not in CONFIGURED anymore, and
+    // stop trying to read/write in a busyloop.
+    if (newState == USBD_STATE_NONE) {
+        run_cmd(CMD_BUSRESET, 0);
+    }
+}
+
+static int usbhal_setupcmd_cb(const USB_Setup_TypeDef *setup)
+{
+    TRACE_FUNC_IN;
+    if (!setup) {
+        EFM_ASSERT(false);
+        return USB_STATUS_REQ_ERR;
+    }
+
+    memcpy(ep0setupdata, setup, 8);
+    run_cmd(CMD_EP0SETUP, 0);
+
+    return USB_STATUS_OK;
+}
+
+static void usbhal_sof_cb(uint16_t frameNum)
+{
+    run_cmd(CMD_SOF, frameNum);
+}
+
+static void usbhal_free_buffers(void)
+{
+#ifdef USB_USE_DYNAMIC_MEMORY
+    TRACE_FUNC_IN;
+
+    for (int i=EP1OUT ; i<NUMBER_OF_ENDPOINTS ; i++ ) {
+        if (ep_state[i].data_buf) {
+            free(ep_state[i].data_buf);
+            ep_state[i].data_buf = NULL;
+        }
+    }
+#endif
+}
+
+void USBHAL::connect(void)
+{
+    TRACE_FUNC_IN;
+
+    // Init datastructures must be static - driver will use these even after the init function exits!
+
+    static const uint8_t buffer_multiplier[] = { 1 }; // Mult 1 for control EP
+    static const USBD_Callbacks_TypeDef usbd_callbacks = {
+        .usbReset = usbhal_reset_cb,
+        .usbStateChange = usbhal_state_change_cb,
+        .setupCmd = usbhal_setupcmd_cb,
+        .isSelfPowered = NULL,
+        .sofInt = usbhal_sof_cb
+    };
+
+    USBD_Init_TypeDef initdata = {
+        .deviceDescriptor = NULL,
+        .configDescriptor = NULL,
+        .stringDescriptors = NULL,
+        .numberOfStrings = 0,
+        .bufferingMultiplier = buffer_multiplier,
+        .callbacks = &usbd_callbacks,
+        .reserved = 0
+    };
+
+    int ret = USBD_Init(&initdata);
+
+    TRACE("init = %d, devicedesc = %lx, configdesc = %lx", ret,
+          (uint32_t) initdata.deviceDescriptor,
+          (uint32_t) initdata.configDescriptor);
+
+    EFM_ASSERT(ret == USB_STATUS_OK);
+}
+
+void USBHAL::disconnect(void)
+{
+    TRACE_FUNC_IN;
+    USBD_Disconnect();
+}
+
+void USBHAL::configureDevice(void)
+{
+    TRACE_FUNC_IN;
+    USBD_SetUsbState(USBD_STATE_CONFIGURED);
+}
+
+void USBHAL::unconfigureDevice(void)
+{
+    TRACE_FUNC_IN;
+    USBD_SetUsbState(USBD_STATE_DEFAULT);
+    usbhal_free_buffers();
+}
+
+void USBHAL::setAddress(uint8_t address)
+{
+    TRACE_FUNC_IN_P("addr 0x%x", (unsigned)address);
+    USBD_SetAddress(address);
+}
+
+void USBHAL::remoteWakeup(void)
+{
+    TRACE_FUNC_IN;
+    USBD_RemoteWakeup();
+}
+
+void USBHAL::EP0setup(uint8_t *buffer)
+{
+    TRACE_FUNC_IN;
+    EFM_ASSERT(buffer);
+    if (buffer) {
+        memcpy(buffer, ep0setupdata, 8);
+    }
+}
+
+void USBHAL::EP0read(void)
+{
+    TRACE_FUNC_IN;
+    (void)internEndpointRead(0, MAX_PACKET_SIZE_EP0);
+}
+
+void USBHAL::EP0readStage(void)
+{
+    TRACE_FUNC_IN;
+    // Not needed
+}
+
+uint32_t USBHAL::EP0getReadResult(uint8_t *buffer)
+{
+    TRACE_FUNC_IN;
+    EFM_ASSERT(buffer);
+
+    uint32_t read = 0;
+    endpointReadResult(0, buffer, &read);
+    return read;
+}
+
+static int usbhal_xfer_complete_cb(uint8_t ep, USB_Status_TypeDef status,
+                                   uint32_t xferred, uint32_t remaining)
+{
+    TRACE_FUNC_IN_P("ep 0x%x, status %u, xferred %lu, rem %lu",
+                    ep, status, xferred, remaining);
+
+    if (ep >= NUMBER_OF_ENDPOINTS) {
+        EFM_ASSERT(false);
+        return USB_STATUS_REQ_ERR;
+    }
+
+    switch (ep) {
+        case EP0OUT:
+            if (ep_state[EP0OUT].status == READ_PENDING) {
+                ep_state[EP0OUT].status = READ_COMPLETE;
+                ep_state[EP0OUT].byte_count = xferred;
+                // drop zlp
+                if (xferred == 0) {
+                    break;
+                }
+            }
+            run_cmd(CMD_EP0OUT, 0);
+            break;
+
+        case EP0IN:
+            run_cmd(CMD_EP0IN, 0);
+            break;
+
+        default:
+            bool write = ep & 1;
+
+            if (status == USB_STATUS_OK) {
+                if (!write && ep_state[ep].status == READ_PENDING) {
+                    ep_state[ep].status = READ_COMPLETE;
+                    ep_state[ep].byte_count = xferred;
+                } else if (write && ep_state[ep].status == WRITE_PENDING) {
+                    ep_state[ep].status = WRITE_COMPLETE;
+                } else {
+                    ep_state[ep].status = FAILED_INVALID;
+                }
+            } else {
+                ep_state[ep].status = FAILED_INVALID;
+            }
+
+            if (ep_state[ep].status != FAILED_INVALID) {
+                run_cmd(CMD_EP_XFER_COMPLETED, ep);
+            }
+            break;
+    }
+
+    return USB_STATUS_OK;
+}
+
+void USBHAL::EP0write(uint8_t *buffer, uint32_t size)
+{
+    //TRACE_FUNC_IN_P("buffer %lx, size %lu", (uint32_t) buffer, size);
+
+    int ret;
+    USB_XferCompleteCb_TypeDef cb = ep_state[EP0IN].intern_cb;
+
+    EFM_ASSERT((buffer != NULL) || (size == 0));
+    EFM_ASSERT(size <= MAX_PACKET_SIZE_EP0);
+
+    if (!buffer || size == 0) {
+        // No callback after writing EP0 ZLP
+        cb = NULL;
+    }
+
+    if (buffer && !is_aligned(buffer,4)) {
+        // Copy unaligned data to write-buffer before USBD_Write
+        memcpy(ep_state[EP0IN].data_buf, buffer, size);
+        ret = USBD_Write(0, ep_state[EP0IN].data_buf, size, cb);
+    } else {
+        ret = USBD_Write(0, buffer, size, cb);
+    }
+
+    if (ret != USB_STATUS_OK) {
+        TRACE("FAILED - ret %d", ret);
+    }
+}
+
+void USBHAL::EP0stall(void)
+{
+    TRACE_FUNC_IN;
+    USBD_StallEp0();
+}
+
+static EP_STATUS internEndpointRead(uint8_t ep, uint32_t maxSize)
+{
+    //TRACE_FUNC_IN_P("endpoint 0x%x, size %ld, cb %d", (unsigned)ep, maxSize, useCallback);
+
+    if (ep >= NUMBER_OF_ENDPOINTS) {
+        EFM_ASSERT(false);
+        return EP_INVALID;
+    }
+
+    ep_state[ep].status = READ_PENDING;
+
+    int ret = USBD_Read(USB_EP_TO_ADDR(ep), ep_state[ep].data_buf, maxSize,
+                        ep_state[ep].intern_cb);
+
+    if (ret == USB_STATUS_OK) {
+        return EP_PENDING;
+    } else {
+        TRACE("FAILED - ret %d", ret);
+
+        if (ret == USB_STATUS_EP_STALLED) {
+            return EP_STALLED;
+        } else {
+            return EP_INVALID;
+        }
+    }
+}
+
+EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize)
+{
+    return internEndpointRead(endpoint, maximumSize);
+}
+
+EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t *data, uint32_t *bytesRead)
+{
+    TRACE_FUNC_IN;
+
+    if (endpoint >= NUMBER_OF_ENDPOINTS) {
+        EFM_ASSERT(false);
+        return EP_INVALID;
+    }
+
+    EFM_ASSERT(data);
+    EFM_ASSERT(bytesRead);
+    if (!data || !bytesRead) {
+        return EP_INVALID;
+    }
+
+    switch (ep_state[endpoint].status) {
+        case READ_PENDING:
+            return EP_PENDING;
+
+        case READ_COMPLETE:
+            memcpy(data, ep_state[endpoint].data_buf, ep_state[endpoint].byte_count);
+            *bytesRead = ep_state[endpoint].byte_count;
+            ep_state[endpoint].status = IDLE;
+            return EP_COMPLETED;
+
+        case FAILED_STALLED:
+            ep_state[endpoint].status = IDLE;
+            return EP_STALLED;
+
+        default:
+            ep_state[endpoint].status = IDLE;
+            return EP_INVALID;
+    }
+}
+
+EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size)
+{
+    TRACE_FUNC_IN_P("endpoint 0x%x, data 0x%lx, size %lu", (unsigned )endpoint, (uint32_t)data, size);
+
+    EFM_ASSERT(endpoint < NUMBER_OF_ENDPOINTS);
+    EFM_ASSERT(endpoint > EP0IN);
+    EFM_ASSERT(size <= ep_state[endpoint].max_packet);
+    EFM_ASSERT(data);
+
+    uint8_t ep = USB_EP_TO_INDEX(endpoint);
+
+    if (endpoint >= NUMBER_OF_ENDPOINTS || endpoint <= EP0IN) {
+        return EP_INVALID;
+    }
+
+    if (size > ep_state[endpoint].max_packet) {
+        return EP_INVALID;
+    }
+
+    if (!data) {
+        return EP_INVALID;
+    }
+
+    memcpy(ep_state[ep].data_buf, data, size);
+
+    ep_state[ep].status = WRITE_PENDING;
+    int ret = USBD_Write(USB_EP_TO_ADDR(endpoint), ep_state[ep].data_buf, size, ep_state[ep].intern_cb);
+
+    if (ret == USB_STATUS_EP_STALLED) {
+        ep_state[ep].status = IDLE;
+        return EP_STALLED;
+    } else if (ret != USB_STATUS_OK) {
+        ep_state[ep].status = IDLE;
+        return EP_INVALID;
+    }
+
+    return EP_PENDING;
+}
+
+EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint)
+{
+    if (endpoint >= NUMBER_OF_ENDPOINTS) {
+        EFM_ASSERT(false);
+        return EP_INVALID;
+    }
+
+    switch (ep_state[endpoint].status) {
+        case WRITE_PENDING:
+            return EP_PENDING;
+
+        case WRITE_COMPLETE:
+            ep_state[endpoint].status = IDLE;
+            return EP_COMPLETED;
+
+        case FAILED_STALLED:
+            ep_state[endpoint].status = IDLE;
+            return EP_STALLED;
+
+        default:
+            ep_state[endpoint].status = IDLE;
+            return EP_INVALID;
+    }
+}
+
+void USBHAL::stallEndpoint(uint8_t endpoint)
+{
+    TRACE_FUNC_IN;
+
+    EFM_ASSERT(endpoint < NUMBER_OF_ENDPOINTS);
+    EFM_ASSERT((endpoint != EP0OUT) && (endpoint != EP0IN));
+
+    USBD_StallEp(USB_EP_TO_ADDR(endpoint));
+}
+
+void USBHAL::unstallEndpoint(uint8_t endpoint)
+{
+    TRACE_FUNC_IN;
+
+    EFM_ASSERT(endpoint < NUMBER_OF_ENDPOINTS);
+    EFM_ASSERT((endpoint != EP0OUT) && (endpoint != EP0IN));
+
+    USBD_UnStallEp(USB_EP_TO_ADDR(endpoint));
+}
+
+bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t options)
+{
+    TRACE_FUNC_IN_P("endpoint %d, packetsize %ld, options 0x%lx", endpoint,
+                    maxPacket, options);
+
+    int mult = 1; // RX/TX buffer size multiplier
+    int type = USB_EPTYPE_INTR;
+
+    if (endpoint >= NUMBER_OF_ENDPOINTS) {
+        EFM_ASSERT(false);
+        return false;
+    }
+
+    if (endpoint == EP0IN || endpoint == EP0OUT) {
+        EFM_ASSERT(false);
+        return false;
+    }
+
+    ep_state[endpoint].max_packet = 0;
+
+    if (endpoint == EPISO_OUT || endpoint ==  EPISO_IN) {
+        if (maxPacket > MAX_PACKET_SIZE_EPISO) {
+            EFM_ASSERT(false);
+            return false;
+        }
+    } else if ((maxPacket > MAX_PACKET_SIZE_EPBULK) || (maxPacket > MAX_PACKET_SIZE_EPINT)) {
+        EFM_ASSERT(false);
+        return false;
+    }
+
+    // USBDevice performs a read right after creating the endpoints,
+    // before calling configureDevice. The read will fail since
+    // at that point the device state is still ADDRESSED. Workaround
+    // is to force configured state here.
+    //
+    // This relies on USBDevice to not call realiseEndpoint unless
+    // it is transitioning to the CONFIGURED state.
+    USBD_SetUsbState(USBD_STATE_CONFIGURED);
+
+    // Why doesn't this function have a type param? This is silly...
+    switch (endpoint) {
+        case EPBULK_OUT:
+        case EPBULK_IN:
+            type = USB_EPTYPE_BULK;
+            mult = 2;
+            break;
+        case EPINT_OUT:
+        case EPINT_IN:
+            type = USB_EPTYPE_INTR;
+            mult = 1;
+            break;
+        case EPISO_OUT:
+        case EPISO_IN:
+            type = USB_EPTYPE_ISOC;
+            mult = 2; // ?
+            break;
+    }
+
+    // Some options force the endpoint to a specific type
+    if( options & ISOCHRONOUS ) {
+        type = USB_EPTYPE_ISOC;
+        mult = 2; // ?
+    } else if ( options & RATE_FEEDBACK_MODE ) {
+        // No support for whatever rate feedback is, but for interrupt only
+        type = USB_EPTYPE_INTR;
+        mult = 1;
+    }
+
+#ifdef USB_USE_DYNAMIC_MEMORY
+    if (ep_state[endpoint].data_buf) {
+        free(ep_state[endpoint].data_buf);
+    }
+
+    ep_state[endpoint].data_buf = (uint8_t *)malloc(maxPacket);
+
+    if (!ep_state[endpoint].data_buf) {
+        EFM_ASSERT(false);
+        return false;
+    }
+#endif
+
+    int ret = USBD_AddEndpoint(USB_EP_TO_ADDR(endpoint), type, maxPacket, mult);
+
+    if (ret == USB_STATUS_OK) {
+        ep_state[endpoint].status = IDLE;
+        ep_state[endpoint].max_packet = maxPacket;
+        return true;
+    } else {
+        return false;
+    }
+}
+
+bool USBHAL::getEndpointStallState(unsigned char endpoint)
+{
+    TRACE_FUNC_IN;
+    if (endpoint >= NUMBER_OF_ENDPOINTS) {
+        EFM_ASSERT(false);
+        return false;
+    }
+    return USBD_EpIsStalled(USB_EP_TO_ADDR(endpoint));
+}
+
+static void run_cmd(USBISRCommand cmd, uint32_t param)
+{
+    if (usb_isrcmd != CMD_HANDLED || cmd >= CMD_ENUM_END_MARKER) {
+        EFM_ASSERT(false);
+        abort();
+    }
+
+    usb_isrcmd = cmd;
+    usb_isrcmd_param = param;
+    isrptr();
+}
+
+void USBHAL::_usbisr(void)
+{
+    EFM_ASSERT(instance);
+    instance->usbisr();
+}
+
+void USBHAL::usbisr(void)
+{
+    //TRACE_FUNC_IN;
+
+    // This "ISR" is used just to route callbacks from SiL USB driver
+    // callback context (which can not call protected/private USBHAL
+    // methods), to the actual USBHAL.
+
+    EFM_ASSERT(usb_isrcmd != CMD_HANDLED);
+    switch (usb_isrcmd) {
+        case CMD_EP0SETUP:
+            this->EP0setupCallback();
+            break;
+        case CMD_EP0IN:
+            this->EP0in();
+            break;
+        case CMD_EP0OUT:
+            this->EP0out();
+            break;
+        case CMD_BUSRESET:
+            this->busReset();
+            break;
+        case CMD_EP_XFER_COMPLETED:
+            if (epCallback[usb_isrcmd_param] && instance) {
+                (instance->*(epCallback[usb_isrcmd_param]))();
+            }
+            break;
+        case CMD_SOF:
+            this->SOF(usb_isrcmd_param);
+            break;
+        case CMD_SUSPEND_STATE_CHANGED:
+            this->suspendStateChanged(usb_isrcmd_param);
+            break;
+        default:
+            EFM_ASSERT(false);
+            break;
+    }
+    usb_isrcmd = CMD_HANDLED;
+}
+#endif
+
+// End of file
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_Silicon_Labs/inc/em_usb.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_Silicon_Labs/inc/em_usb.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,1011 @@
+/***************************************************************************//**
+ * @file em_usb.h
+ * @brief USB protocol stack library API for EFM32.
+ * @version 3.20.14
+ *******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+
+#ifndef __EM_USB_H
+#define __EM_USB_H
+
+#include "em_device.h"
+#include "em_assert.h"
+#if defined( USB_PRESENT ) && ( USB_COUNT == 1 )
+#include "usbconfig.h"
+#if defined( USB_DEVICE ) || defined( USB_HOST )
+
+#include <string.h>
+#include <stddef.h>
+#include "em_common.h"
+/* Workaround for em_common naming change so that we don't need to rework the
+   entire USB HAL */
+#define EFM32_PACK_START(x)        SL_PACK_START(x)
+#define EFM32_PACK_END()           SL_PACK_END()
+#define EFM32_MIN(a, b)            SL_MIN(a, b)
+#define EFM32_MAX(a, b)            SL_MAX(a, b)
+#define EFM32_ATTRIBUTE_PACKED     SL_ATTRIBUTE_PACKED
+#define EFM32_ATTRIBUTE_ALIGN(X)   SL_ATTRIBUTE_ALIGN(X)
+#define EFM32_ALIGN(X)             SL_ALIGN(X)
+#define EFM32_WEAK                 SL_WEAK
+#define EFM32_ATTRIBUTE_SECTION(X) SL_ATTRIBUTE_SECTION(X)
+
+#include "em_int.h"
+
+#if defined( USB_USE_PRINTF )
+#include <stdio.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __CC_ARM
+#pragma anon_unions
+#endif
+
+/***************************************************************************//**
+ * @addtogroup USB
+ * @brief USB HOST and DEVICE protocol stacks.
+ * @{
+ ******************************************************************************/
+
+/***************************************************************************//**
+ * @addtogroup USB_COMMON
+ * @brief Common parts for both HOST and DEVICE USB stacks, see @ref usb_device
+ *        and @ref usb_host pages for device and host library documentation.
+ * @{
+ ******************************************************************************/
+
+#define SILABS_USB_VID          0x10C4          /**< Silicon Labs Vendor ID, supplied by USB-IF.       */
+
+/* SETUP request, direction of data stage */
+#define USB_SETUP_DIR_OUT       0               /**< Setup request data stage OUT direction value.     */
+#define USB_SETUP_DIR_IN        1               /**< Setup request data stage IN direction value.      */
+#define USB_SETUP_DIR_MASK      0x80            /**< Setup request data stage direction mask.          */
+#define USB_SETUP_DIR_D2H       0x80            /**< Setup request data stage IN direction mask.       */
+#define USB_SETUP_DIR_H2D       0x00            /**< Setup request data stage OUT direction mask.      */
+
+/* SETUP request type */
+#define USB_SETUP_TYPE_STANDARD       0         /**< Standard setup request value.                     */
+#define USB_SETUP_TYPE_CLASS          1         /**< Class setup request value.                        */
+#define USB_SETUP_TYPE_VENDOR         2         /**< Vendor setup request value.                       */
+#define USB_SETUP_TYPE_STANDARD_MASK  0x00      /**< Standard setup request mask.                      */
+#define USB_SETUP_TYPE_CLASS_MASK     0x20      /**< Class setup request mask.                         */
+#define USB_SETUP_TYPE_VENDOR_MASK    0x40      /**< Vendor setup request mask.                        */
+
+/* SETUP request recipient */
+#define USB_SETUP_RECIPIENT_DEVICE    0         /**< Setup request device recipient value.             */
+#define USB_SETUP_RECIPIENT_INTERFACE 1         /**< Setup request interface recipient value.          */
+#define USB_SETUP_RECIPIENT_ENDPOINT  2         /**< Setup request endpoint recipient value.           */
+#define USB_SETUP_RECIPIENT_OTHER     3         /**< Setup request other recipient value.              */
+
+/* SETUP standard request codes for Full Speed devices */
+#define GET_STATUS                0             /**< Standard setup request GET_STATUS.                */
+#define CLEAR_FEATURE             1             /**< Standard setup request CLEAR_FEATURE.             */
+#define SET_FEATURE               3             /**< Standard setup request SET_FEATURE.               */
+#define SET_ADDRESS               5             /**< Standard setup request SET_ADDRESS.               */
+#define GET_DESCRIPTOR            6             /**< Standard setup request GET_DESCRIPTOR.            */
+#define SET_DESCRIPTOR            7             /**< Standard setup request SET_DESCRIPTOR.            */
+#define GET_CONFIGURATION         8             /**< Standard setup request GET_CONFIGURATION.         */
+#define SET_CONFIGURATION         9             /**< Standard setup request SET_CONFIGURATION.         */
+#define GET_INTERFACE             10            /**< Standard setup request GET_INTERFACE.             */
+#define SET_INTERFACE             11            /**< Standard setup request SET_INTERFACE.             */
+#define SYNCH_FRAME               12            /**< Standard setup request SYNCH_FRAME.               */
+
+/* SETUP class request codes */
+#define USB_HID_GET_REPORT        0x01          /**< HID class setup request GET_REPORT.               */
+#define USB_HID_GET_IDLE          0x02          /**< HID class setup request GET_IDLE.                 */
+#define USB_HID_SET_REPORT        0x09          /**< HID class setup request SET_REPORT.               */
+#define USB_HID_SET_IDLE          0x0A          /**< HID class setup request SET_IDLE.                 */
+#define USB_HID_SET_PROTOCOL      0x0B          /**< HID class setup request SET_PROTOCOL.             */
+#define USB_CDC_SETLINECODING     0x20          /**< CDC class setup request SET_LINE_CODING.          */
+#define USB_CDC_GETLINECODING     0x21          /**< CDC class setup request GET_LINE_CODING.          */
+#define USB_CDC_SETCTRLLINESTATE  0x22          /**< CDC class setup request SET_CONTROL_LINE_STATE.   */
+#define USB_MSD_BOTRESET          0xFF          /**< MSD class setup request Bulk only transfer reset. */
+#define USB_MSD_GETMAXLUN         0xFE          /**< MSD class setup request Get Max LUN.              */
+#define USB_AUDIO_GET_CUR         0x81          /**< Audio class setup request GET_CUR.                */
+#define USB_AUDIO_SET_CUR         0x01          /**< Audio class setup request SET_CUR.                */
+#define USB_AUDIO_GET_CUR         0x81          /**< Audio class setup request GET_CUR.                */
+#define USB_AUDIO_SET_MIN         0x02          /**< Audio class setup request SET_MIN.                */
+#define USB_AUDIO_GET_MIN         0x82          /**< Audio class setup request GET_MIN.                */
+#define USB_AUDIO_SET_MAX         0x03          /**< Audio class setup request SET_MAX.                */
+#define USB_AUDIO_GET_MAX         0x83          /**< Audio class setup request GET_MAX.                */
+#define USB_AUDIO_SET_RES         0x04          /**< Audio class setup request SET_RES.                */
+#define USB_AUDIO_GET_RES         0x84          /**< Audio class setup request GET_RES.                */
+#define USB_AUDIO_SET_MEM         0x05          /**< Audio class setup request SET_MEM.                */
+#define USB_AUDIO_GET_MEM         0x85          /**< Audio class setup request GET_MEM.                */
+#define USB_AUDIO_GET_STAT        0xFF          /**< Audio class setup request GET_STAT.               */
+
+/* SETUP command GET/SET_DESCRIPTOR decriptor types */
+#define USB_DEVICE_DESCRIPTOR             1     /**< DEVICE descriptor value.                          */
+#define USB_CONFIG_DESCRIPTOR             2     /**< CONFIGURATION descriptor value.                   */
+#define USB_STRING_DESCRIPTOR             3     /**< STRING descriptor value.                          */
+#define USB_MAX_STRING_DESCRIPTOR_CHARS   126   /**< Maximum STRING descriptor bString length.         */
+#define USB_INTERFACE_DESCRIPTOR          4     /**< INTERFACE descriptor value.                       */
+#define USB_ENDPOINT_DESCRIPTOR           5     /**< ENDPOINT descriptor value.                        */
+#define USB_DEVICE_QUALIFIER_DESCRIPTOR   6     /**< DEVICE_QUALIFIER descriptor value.                */
+#define USB_OTHER_SPEED_CONFIG_DESCRIPTOR 7     /**< OTHER_SPEED_CONFIGURATION descriptor value.       */
+#define USB_INTERFACE_POWER_DESCRIPTOR    8     /**< INTERFACE_POWER descriptor value.                 */
+#define USB_INTERFACE_ASSOCIATION_DESCRIPTOR 11 /**< INTERFACE_ASSOCIATION descriptor value.           */
+#define USB_HID_DESCRIPTOR                0x21  /**< HID descriptor value.                             */
+#define USB_SMARTCARD_DESCRIPTOR          0x21  /**< Smartcard usb-ccid-specific Descriptor Type.      */
+#define USB_HID_REPORT_DESCRIPTOR         0x22  /**< HID REPORT descriptor value.                      */
+#define USB_CS_INTERFACE_DESCRIPTOR       0x24  /**< Audio Class-specific interface Descriptor Type.   */
+#define USB_CS_ENDPOINT_DESCRIPTOR        0x25  /**< Audio Class-specific endpoint Descriptor Type.    */
+#define USB_HUB_DESCRIPTOR                0x29  /**< HUB descriptor value.                             */
+#define USB_CA_HEADER_DESCRIPTOR          1     /**< Audio Class-Specific AC Interface Header descriptor.*/
+#define USB_CA_INPUT_TERMINAL_DESCRIPTOR  2     /**< Audio Class-Specific AC Interface Input Terminal desc. */
+#define USB_CA_OUTPUT_TERMINAL_DESCRIPTOR 3     /**< Audio Class-Specific AC Interface Output Terminal desc.*/
+#define USB_CA_MIXER_UNIT_DESCRIPTOR      4     /**< Audio Class-Specific AC Interface Mixer descriptor.*/
+#define USB_CA_SELECTOR_UNIT_DESCRIPTOR   5     /**< Audio Class-Specific AC Interface Selector desc.  */
+#define USB_CA_FEATURE_UNIT_DESCRIPTOR    6     /**< Audio Class-Specific AC Interface Feature desc.   */
+#define USB_CA_PROCESSING_UNIT_DESCRIPTOR 7     /**< Audio Class-Specific AC Interface Processing desc.*/
+#define USB_CA_EXTENSION_UNIT_DESCRIPTOR  8     /**< Audio Class-Specific AC Interface Extension desc. */
+#define USB_CA_EP_GENERAL_DESCRIPTOR      1     /**< Audio Class-Specific general descriptor subtype code.*/
+#define USB_CA_AS_GENERAL_DESCRIPTOR      1     /**< Audio Class-Specific AS Interface General descriptor.*/
+#define USB_CA_FORMAT_TYPE_DESCRIPTOR     2     /**< Audio Class-Specific AS Interface Format Type desc. */
+
+#define USB_DEVICE_DESCSIZE               18    /**< Device descriptor size.                           */
+#define USB_CONFIG_DESCSIZE               9     /**< Configuration descriptor size.                    */
+#define USB_INTERFACE_DESCSIZE            9     /**< Interface descriptor size.                        */
+#define USB_ENDPOINT_DESCSIZE             7     /**< Endpoint descriptor size.                         */
+#define USB_DEVICE_QUALIFIER_DESCSIZE     10    /**< Device qualifier descriptor size.                 */
+#define USB_OTHER_SPEED_CONFIG_DESCSIZE   9     /**< Device other speed configuration descriptor size. */
+#define USB_INTERFACE_ASSOCIATION_DESCSIZE 8    /**< INTERFACE_ASSOCIATION descriptor size.            */
+#define USB_HID_DESCSIZE                  9     /**< HID descriptor size.                              */
+#define USB_SMARTCARD_DESCSIZE            54    /**< CCID descriptor size.                             */
+#define USB_CDC_HEADER_FND_DESCSIZE       5     /**< CDC Header functional descriptor size.            */
+#define USB_CDC_CALLMNG_FND_DESCSIZE      5     /**< CDC Call Management functional descriptor size.   */
+#define USB_CDC_ACM_FND_DESCSIZE          4     /**< CDC Abstract Control Management functional descriptor size.*/
+#define USB_CA_INPUT_TERMINAL_DESCSIZE    12    /**< Audio Input Terminal descriptor size.             */
+#define USB_CA_OUTPUT_TERMINAL_DESCSIZE   9     /**< Audio Output Terminal descriptor size.            */
+#define USB_CA_EP_GENERAL_DESCSIZE        7     /**< Audio Class-Specific general descriptor subtype size.*/
+#define USB_CA_AS_GENERAL_DESCSIZE        7     /**< Audio Class-Specific AS Interface General desc size.*/
+#define USB_CA_STD_AS_ENDPOINT_DESCSZIE   9     /**< Audio-class standard audio stream descriptor size.*/
+
+/* Misc. USB definitions */
+#define USB_LS_CTRL_EP_MAXSIZE  8               /**< The max size of low speed control endpoints.      */
+#define USB_LS_INTR_EP_MAXSIZE  8               /**< The max size of low speed interrupt endpoints.    */
+#define USB_FS_CTRL_EP_MAXSIZE  64              /**< The max size of full speed control endpoints.     */
+#define USB_FS_INTR_EP_MAXSIZE  64              /**< The max size of full speed interrupt endpoints.   */
+#define USB_FS_BULK_EP_MAXSIZE  64              /**< The max size of full speed bulk endpoints.        */
+#define USB_FS_ISOC_EP_MAXSIZE  1023            /**< The max size of full speed isochronous endpoints. */
+#define USB_EPTYPE_CTRL         0               /**< Endpoint type control.                            */
+#define USB_EPTYPE_ISOC         1               /**< Endpoint type isochron.                           */
+#define USB_EPTYPE_BULK         2               /**< Endpoint type bulk.                               */
+#define USB_EPTYPE_INTR         3               /**< Endpoint type interrupt.                          */
+#define USB_EPSYNC_NO           (0 << 2)        /**< Endpoint synchronization type, none.              */
+#define USB_EPSYNC_ASYNC        (1 << 2)        /**< Endpoint synchronization type, asynchronous.      */
+#define USB_EPSYNC_ADAPTIVE     (2 << 2)        /**< Endpoint synchronization type, adaptive.          */
+#define USB_EPSYNC_SYNC         (3 << 2)        /**< Endpoint synchronization type, synchronous.       */
+#define USB_EP_DIR_IN           0x80            /**< Endpoint direction mask.                          */
+#define USB_SETUP_PKT_SIZE      8               /**< Setup request packet size.                        */
+#define USB_EPNUM_MASK          0x0F            /**< Endpoint number mask.                             */
+#define USB_LANGID_ENUS         0x0409          /**< English-United States language id.                */
+#define USB_MAX_DEVICE_ADDRESS  127             /**< Maximum allowable device address.                 */
+
+#define CONFIG_DESC_BM_REMOTEWAKEUP 0x20        /**< Configuration descriptor attribute macro.         */
+#define CONFIG_DESC_BM_SELFPOWERED  0x40        /**< Configuration descriptor attribute macro.         */
+#define CONFIG_DESC_BM_RESERVED_D7  0x80        /**< Configuration descriptor attribute macro.         */
+#define CONFIG_DESC_BM_TRANSFERTYPE 0x03        /**< Configuration descriptor transfer type bitmask.   */
+#define CONFIG_DESC_MAXPOWER_mA(x)  (((x)+1)/2) /**< Configuration descriptor power macro.             */
+
+#define DEVICE_IS_SELFPOWERED       0x0001      /**< Standard request GET_STATUS bitmask.              */
+#define REMOTE_WAKEUP_ENABLED       0x0002      /**< Standard request GET_STATUS bitmask.              */
+#define USB_FEATURE_ENDPOINT_HALT         0     /**< Standard request CLEAR/SET_FEATURE bitmask.       */
+#define USB_FEATURE_DEVICE_REMOTE_WAKEUP  1     /**< Standard request CLEAR/SET_FEATURE bitmask.       */
+
+#define HUB_FEATURE_PORT_RESET            4     /**< HUB class request CLEAR/SET_PORT_FEATURE feature selector. */
+#define HUB_FEATURE_PORT_POWER            8     /**< HUB class request CLEAR/SET_PORT_FEATURE feature selector. */
+#define HUB_FEATURE_C_PORT_CONNECTION     16    /**< HUB class request CLEAR/SET_PORT_FEATURE feature selector. */
+#define HUB_FEATURE_C_PORT_RESET          20    /**< HUB class request CLEAR/SET_PORT_FEATURE feature selector. */
+#define HUB_FEATURE_PORT_INDICATOR        22    /**< HUB class request CLEAR/SET_PORT_FEATURE feature selector. */
+
+#define USB_CLASS_CDC                     2     /**< CDC device/interface class code.                    */
+#define USB_CLASS_CDC_DATA                0x0A  /**< CDC Data interface class code.                      */
+#define USB_CLASS_CDC_ACM                 2     /**< CDC Abstract Control Model interface subclass code. */
+#define USB_CLASS_CDC_HFN                 0     /**< CDC class Header Functional Descriptor subtype.     */
+#define USB_CLASS_CDC_CMNGFN              1     /**< CDC class Call Management Functional Descriptor subtype.*/
+#define USB_CLASS_CDC_ACMFN               2     /**< CDC class Abstract Control Management Functional Descriptor subtype.*/
+#define USB_CLASS_CDC_UNIONFN             6     /**< CDC class Union Functional Descriptor subtype.      */
+
+#define USB_CLASS_HID                     3     /**< HID device/interface class code.                    */
+#define USB_CLASS_HID_KEYBOARD            1     /**< HID keyboard interface protocol code.               */
+#define USB_CLASS_HID_MOUSE               2     /**< HID mouse interface protocol code.                  */
+
+#define USB_CLASS_HUB                     9     /**< HUB device/interface class code.                    */
+
+#define USB_CLASS_MSD                     8     /**< MSD device/interface class code.                    */
+#define USB_CLASS_MSD_BOT_TRANSPORT       0x50  /**< MSD Bulk Only Transport protocol.                   */
+#define USB_CLASS_MSD_SCSI_CMDSET         6     /**< MSD Subclass SCSI transparent command set.          */
+#define USB_CLASS_MSD_CSW_CMDPASSED       0     /**< MSD BOT Command status wrapper command passed code. */
+#define USB_CLASS_MSD_CSW_CMDFAILED       1     /**< MSD BOT Command status wrapper command failed code. */
+#define USB_CLASS_MSD_CSW_PHASEERROR      2     /**< MSD BOT Command status wrapper cmd phase error code.*/
+
+#define USB_CLASS_AUDIO                   1     /**< Audio interface class code.                         */
+#define USB_CLASS_AUDIO_CONTROL           1     /**< Audio subclass code for control interface.          */
+#define USB_CLASS_AUDIO_STREAMING         2     /**< Audio subclass code for streaming interface.        */
+#define USB_CLASS_AUDIO_MIDISTREAMING     3     /**< Audio subclass code for midi streaming interface.   */
+
+/*** Triplet for the device descriptor of a composite device using IAD descriptors. ***/
+#define USB_CLASS_MISCELLANEOUS           0xEF  /**< MISCELLANEOUS device class code.                    */
+#define USB_CLASS_MISC_COMMON_SUBCLASS    2     /**< MISCELLANEOUS Common sub class code.                */
+#define USB_CLASS_MISC_IAD_PROTOCOL       1     /**< MISCELLANEOUS Interface Association Descriptor protocol code. */
+
+#define PORT_FULL_SPEED                   1     /**< Full speed return value for USBH_GetPortSpeed(). */
+#define PORT_LOW_SPEED                    2     /**< Low speed return value for USBH_GetPortSpeed().  */
+
+#if defined( __GNUC__  )                  /* GCC compilers */
+#if defined( __CHAR16_TYPE__ )
+typedef __CHAR16_TYPE__ char16_t;
+#else
+typedef unsigned short char16_t;
+#endif
+
+#elif defined( __ICCARM__ )               /* IAR compiler */
+#include <uchar.h>
+
+#elif defined( __CC_ARM )                 /* MDK-ARM compiler */
+typedef unsigned short char16_t;
+#endif
+
+/** Macro for creating USB compliant UTF-16LE UNICODE string descriptors.
+ *  @n Example: STATIC_CONST_STRING_DESC( iManufacturer, 'E','n','e','r','g','y',' ','M','i','c','r','o',' ','A','S' );
+ *  @note The size of the resulting struct will be two byte larger than a USB string
+ *        descriptor. This is to accommodate a terminating null char for the string.
+ *        The value assigned to the 'len' member does not take this into account
+ *        and is therefore correct usb wise.
+ */
+#define STATIC_CONST_STRING_DESC( _name, ... )                  \
+EFM32_PACK_START( 1 )                                           \
+typedef struct                                                  \
+{                                                               \
+  uint8_t  len;                                                 \
+  uint8_t  type;                                                \
+  char16_t name[ 1 + sizeof( (char16_t[]){__VA_ARGS__} ) / 2];  \
+} __attribute__ ((packed)) _##_name;                            \
+EFM32_PACK_END()                                                \
+EFM32_ALIGN( 4 )                                                \
+EFM32_PACK_START( 1 )                                           \
+static const _##_name _name __attribute__ ((aligned(4)))=       \
+{                                                               \
+  .len  = sizeof( _##_name ) - 2,                               \
+  .type = USB_STRING_DESCRIPTOR,                                \
+  .name = {__VA_ARGS__},                                        \
+  .name[ ( ( sizeof( _##_name ) - 2 ) / 2 ) - 1 ] = '\0'        \
+}                                                               \
+EFM32_PACK_END()
+
+/** Macro for creating USB compliant language string descriptors.
+ *  @n Example: STATIC_CONST_STRING_DESC_LANGID( langID, 0x04, 0x09 );
+ */
+#define STATIC_CONST_STRING_DESC_LANGID( _name, x, y )      \
+EFM32_PACK_START( 1 )                                       \
+typedef struct                                              \
+{                                                           \
+  uint8_t len;                                              \
+  uint8_t type;                                             \
+  uint8_t name[ 2 ];                                        \
+} __attribute__ ((packed)) _##_name;                        \
+EFM32_PACK_END()                                            \
+EFM32_ALIGN( 4 )                                            \
+EFM32_PACK_START( 1 )                                       \
+static const _##_name _name __attribute__ ((aligned(4)))=   \
+{                                                           \
+  .len = 4,                                                 \
+  .type = USB_STRING_DESCRIPTOR,                            \
+  .name = { y, x }                                          \
+}                                                           \
+EFM32_PACK_END()
+
+/** Macro for creating WORD (4 byte) aligned uint8_t array with size which
+ *  is a multiple of WORD size.
+ *  @n Example: @n UBUF( rxBuffer, 37 );  =>  uint8_t rxBuffer[ 40 ];
+ */
+#if !defined(__GNUC__)
+#define        UBUF( x, y ) EFM32_ALIGN( 4 )        uint8_t x[((y)+3)&~3]
+#define STATIC_UBUF( x, y ) EFM32_ALIGN( 4 ) static uint8_t x[((y)+3)&~3]
+#else
+#define        UBUF( x, y ) uint8_t x[((y)+3)&~3] __attribute__ ((aligned(4)))
+
+/** Macro for creating WORD (4 byte) aligned static uint8_t arrays with size which
+ *  is a multiple of WORD size.
+ *  @n Example: @n STATIC_UBUF( rxBuffer, 37 );  =>  static uint8_t rxBuffer[ 40 ];
+ */
+#define STATIC_UBUF( x, y ) static uint8_t x[((y)+3)&~3] __attribute__ ((aligned(4)))
+#endif
+
+
+/** @brief USB transfer status enumerator. */
+typedef enum
+{
+  /* NOTE: Please keep in sync with table errMsg[] in em_usbhal.c */
+  USB_STATUS_OK              = 0,               /**< No errors detected.                               */
+  USB_STATUS_REQ_ERR         = -1,              /**< Setup request error.                              */
+  USB_STATUS_EP_BUSY         = -2,              /**< Endpoint is busy.                                 */
+  USB_STATUS_REQ_UNHANDLED   = -3,              /**< Setup request not handled.                        */
+  USB_STATUS_ILLEGAL         = -4,              /**< Illegal operation attempted.                      */
+  USB_STATUS_EP_STALLED      = -5,              /**< Endpoint is stalled.                              */
+  USB_STATUS_EP_ABORTED      = -6,              /**< Endpoint transfer was aborted.                    */
+  USB_STATUS_EP_ERROR        = -7,              /**< Endpoint transfer error.                          */
+  USB_STATUS_EP_NAK          = -8,              /**< Endpoint NAK'ed transfer request.                 */
+  USB_STATUS_DEVICE_UNCONFIGURED = -9,          /**< Device is unconfigured.                           */
+  USB_STATUS_DEVICE_SUSPENDED    = -10,         /**< Device is suspended.                              */
+  USB_STATUS_DEVICE_RESET    = -11,             /**< Device is/was reset.                              */
+  USB_STATUS_TIMEOUT         = -12,             /**< Transfer timeout.                                 */
+  USB_STATUS_DEVICE_REMOVED  = -13,             /**< Device was removed.                               */
+  USB_STATUS_HC_BUSY         = -14,             /**< Host channel is busy.                             */
+  USB_STATUS_DEVICE_MALFUNCTION = -15,          /**< Malfunctioning device attached.                   */
+  USB_STATUS_PORT_OVERCURRENT = -16,            /**< VBUS shortcircuit/overcurrent failure.            */
+} USB_Status_TypeDef;
+/** @} (end addtogroup USB_COMMON) */
+
+
+#if defined( USB_DEVICE )
+/***************************************************************************//**
+ * @addtogroup USB_DEVICE
+ * @brief USB DEVICE protocol stack, see @ref usb_device page for detailed documentation.
+ * @{
+ ******************************************************************************/
+
+#define USB_PWRSAVE_MODE_OFF       0 /**< No energy saving mode selected.                       */
+#define USB_PWRSAVE_MODE_ONSUSPEND 1 /**< Enter USB power-save mode on suspend.                 */
+#define USB_PWRSAVE_MODE_ONVBUSOFF 2 /**< Enter USB power-save mode when not attached to host.  */
+#define USB_PWRSAVE_MODE_ENTEREM2  4 /**< Enter EM2 while in power-save mode.                   */
+
+#define USB_USBC_32kHz_CLK_LFXO    0 /**< Use 32kHz LFXO clock while in powersave mode.         */
+#define USB_USBC_32kHz_CLK_LFRCO   1 /**< Use 32kHz LFRCO clock while in powersave mode.        */
+
+/** @brief USB device state enumerator. */
+typedef enum
+{
+  USBD_STATE_NONE       = 0,                    /**< Device state is undefined/unknown.                */
+  USBD_STATE_ATTACHED   = 1,                    /**< Device state is ATTACHED.                         */
+  USBD_STATE_POWERED    = 2,                    /**< Device state is POWERED.                          */
+  USBD_STATE_DEFAULT    = 3,                    /**< Device state is DEFAULT.                          */
+  USBD_STATE_ADDRESSED  = 4,                    /**< Device state is ADDRESSED.                        */
+  USBD_STATE_CONFIGURED = 5,                    /**< Device state is CONFIGURED.                       */
+  USBD_STATE_SUSPENDED  = 6,                    /**< Device state is SUSPENDED.                        */
+  USBD_STATE_LASTMARKER = 7,                    /**< Device state enum end marker.                     */
+} USBD_State_TypeDef;
+/** @} (end addtogroup USB_DEVICE) */
+#endif /* defined( USB_DEVICE ) */
+
+/** @addtogroup USB_COMMON
+ *  @{*/
+
+/** @brief USB Setup request package. */
+EFM32_PACK_START( 1 )
+typedef struct
+{
+  union
+  {
+    struct
+    {
+      union
+      {
+        struct
+        {
+          uint8_t Recipient : 5;                /**< Request recipient (device, interface, endpoint or other).*/
+          uint8_t Type      : 2;                /**< Request type (standard, class or vendor).         */
+          uint8_t Direction : 1;                /**< Transfer direction of SETUP data phase.           */
+        };
+        uint8_t bmRequestType;                  /**< Request characteristics.                          */
+      };
+      uint8_t   bRequest;                       /**< Request code.                                     */
+      uint16_t  wValue;                         /**< Varies according to request.                      */
+      uint16_t  wIndex;                         /**< Index or offset, varies according to request.     */
+      uint16_t  wLength;                        /**< Number of bytes to transfer if there is a data stage.*/
+    };
+  uint32_t  dw[2];
+  };
+} __attribute__ ((packed)) USB_Setup_TypeDef;
+EFM32_PACK_END()
+
+
+/** @brief USB Device Descriptor. */
+EFM32_PACK_START( 1 )
+typedef struct
+{
+  uint8_t  bLength;                             /**< Size of this descriptor in bytes                  */
+  uint8_t  bDescriptorType;                     /**< Constant DEVICE Descriptor Type                   */
+  uint16_t bcdUSB;                              /**< USB Specification Release Number in Binary-Coded
+                                                     Decimal                                           */
+  uint8_t  bDeviceClass;                        /**< Class code (assigned by the USB-IF)               */
+  uint8_t  bDeviceSubClass;                     /**< Subclass code (assigned by the USB-IF)            */
+  uint8_t  bDeviceProtocol;                     /**< Protocol code (assigned by the USB-IF)            */
+  uint8_t  bMaxPacketSize0;                     /**< Maximum packet size for endpoint zero             */
+  uint16_t idVendor;                            /**< Vendor ID (assigned by the USB-IF)                */
+  uint16_t idProduct;                           /**< Product ID (assigned by the manufacturer)         */
+  uint16_t bcdDevice;                           /**< Device release number in binary-coded decimal     */
+  uint8_t  iManufacturer;                       /**< Index of string descriptor describing manufacturer*/
+  uint8_t  iProduct;                            /**< Index of string descriptor describing product     */
+  uint8_t  iSerialNumber;                       /**< Index of string descriptor describing the device
+                                                     serialnumber                                      */
+  uint8_t  bNumConfigurations;                  /**< Number of possible configurations                 */
+} __attribute__ ((packed)) USB_DeviceDescriptor_TypeDef;
+EFM32_PACK_END()
+
+
+/** @brief USB Configuration Descriptor. */
+EFM32_PACK_START( 1 )
+typedef struct
+{
+  uint8_t  bLength;                             /**< Size of this descriptor in bytes                  */
+  uint8_t  bDescriptorType;                     /**< Constant CONFIGURATION Descriptor Type            */
+  uint16_t wTotalLength;                        /**< Total length of data returned for this
+                                                     configuration. Includes the combined length of all
+                                                     descriptors (configuration, interface, endpoint,
+                                                     and class- or vendor-specific) returned for this
+                                                     configuration.                                    */
+  uint8_t  bNumInterfaces;                      /**< Number of interfaces supported by this
+                                                     configuration                                     */
+  uint8_t  bConfigurationValue;                 /**< Value to use as an argument to the
+                                                     SetConfiguration request to select this
+                                                     configuration.                                    */
+  uint8_t  iConfiguration;                      /**< Index of string descriptor describing this
+                                                     configuration.                                    */
+  uint8_t  bmAttributes;                        /**< Configuration characteristics.
+                                                     @n D7: Reserved (set to one)
+                                                     @n D6: Self-powered
+                                                     @n D5: Remote Wakeup
+                                                     @n D4...0: Reserved (reset to zero)               */
+  uint8_t  bMaxPower;                           /**< Maximum power consumption of the USB device, unit
+                                                     is 2mA per LSB                                    */
+} __attribute__ ((packed)) USB_ConfigurationDescriptor_TypeDef;
+EFM32_PACK_END()
+
+
+/** @brief USB Interface Descriptor. */
+EFM32_PACK_START( 1 )
+typedef struct
+{
+  uint8_t bLength;                              /**< Size of this descriptor in bytes.                 */
+  uint8_t bDescriptorType;                      /**< Constant INTERFACE Descriptor Type.               */
+  uint8_t bInterfaceNumber;                     /**< Number of this interface. Zero-based value
+                                                     identifying the index in the array of concurrent
+                                                     interfaces supported by this configuration.       */
+  uint8_t bAlternateSetting;                    /**< Value used to select this alternate setting for
+                                                     the interface identified in the prior field.      */
+  uint8_t bNumEndpoints;                        /**< Number of endpoints used by this interface
+                                                     (excluding endpoint zero). If this value is zero,
+                                                     this interface only uses the Default Control Pipe.*/
+  uint8_t bInterfaceClass;                      /**< Class code (assigned by the USB-IF). A value
+                                                     of zero is reserved for future standardization. If
+                                                     this field is set to FFH, the interface class is
+                                                     vendor-specific. All other values are reserved for
+                                                     assignment by the USB-IF.                         */
+  uint8_t bInterfaceSubClass;                   /**< Subclass code (assigned by the USB-IF). These codes
+                                                     are qualified by the value of the bInterfaceClass
+                                                     field. If the bInterfaceClass field is reset to
+                                                     zero, this field must also be reset to zero. If
+                                                     the bInterfaceClass field is not set to FFH, all
+                                                     values are reserved forassignment by the USB-IF.  */
+  uint8_t bInterfaceProtocol;                   /**< Protocol code (assigned by the USB). These codes
+                                                     are qualified by the value of the bInterfaceClass
+                                                     and the bInterfaceSubClass fields. If an interface
+                                                     supports class-specific requests, this code
+                                                     identifies the protocols that the device uses as
+                                                     defined by the specification of the device class.
+                                                     If this field is reset to zero, the device does
+                                                     not use a class-specific protocol on this
+                                                     interface. If this field is set to FFH, the device
+                                                     uses a vendor-specific protocol for this interface*/
+  uint8_t iInterface;                           /**< Index of string descriptor describing this
+                                                     interface.                                        */
+} __attribute__ ((packed)) USB_InterfaceDescriptor_TypeDef;
+EFM32_PACK_END()
+
+
+/** @brief USB Endpoint Descriptor. */
+EFM32_PACK_START( 1 )
+typedef struct
+{
+  uint8_t   bLength;                            /**< Size of this descriptor in bytes                  */
+  uint8_t   bDescriptorType;                    /**< Constant ENDPOINT Descriptor Type                 */
+  uint8_t   bEndpointAddress;                   /**< The address of the endpoint                       */
+  uint8_t   bmAttributes;                       /**< This field describes the endpoint attributes      */
+  uint16_t  wMaxPacketSize;                     /**< Maximum packet size for the endpoint              */
+  uint8_t   bInterval;                          /**< Interval for polling EP for data transfers        */
+} __attribute__ ((packed)) USB_EndpointDescriptor_TypeDef;
+EFM32_PACK_END()
+
+
+/** @brief USB String Descriptor. */
+EFM32_PACK_START( 1 )
+typedef struct
+{
+  uint8_t len;                                  /**< Size of this descriptor in bytes.                 */
+  uint8_t type;                                 /**< Constant STRING Descriptor Type.                  */
+  char16_t name[];                              /**< The string encoded with UTF-16LE UNICODE charset. */
+} __attribute__ ((packed)) USB_StringDescriptor_TypeDef;
+EFM32_PACK_END()
+
+/** @} (end addtogroup USB_COMMON) */
+
+/*** -------------------- Serial port debug configuration ---------------- ***/
+
+#if defined( DOXY_DOC_ONLY )
+/** @addtogroup USB_COMMON
+ *  @{*/
+
+/***************************************************************************//**
+ * @brief
+ *   Transmit a single char on the debug serial port.
+ *
+ * @note
+ *   This function is enabled with \#define DEBUG_USB_API when configuring the
+ *   protocol stack in "usbconfig.h".
+ *   This is convenient when debugging code, no need to remove use of this
+ *   function when debugging has completed.
+ *
+ * @param[in] c
+ *   Char to transmit.
+ *
+ * @return
+ *   The char transmitted.
+ ******************************************************************************/
+int  USB_PUTCHAR( char c );
+
+/***************************************************************************//**
+ * @brief
+ *   Transmit a zero terminated string on the debug serial port.
+ *
+ * @note
+ *   This function is enabled with \#define DEBUG_USB_API when configuring the
+ *   protocol stack in "usbconfig.h".
+ *   This is convenient when debugging code, no need to remove use of this
+ *   function when debugging has completed.
+ *
+ * @param[in] p
+ *   Pointer to string to transmit.
+ ******************************************************************************/
+void USB_PUTS( const char *p );
+
+/***************************************************************************//**
+ * @brief
+ *   Transmit "printf" formated data on the debug serial port.
+ *
+ * @note
+ *   This function is enabled with \#define USB_USE_PRINTF when configuring the
+ *   protocol stack in "usbconfig.h".
+ *   This is convenient when debugging code, no need to remove use of this
+ *   function when debugging has completed.
+ *
+ * @param[in] format
+ *   Format string (as in printf). No floating point format support.
+ ******************************************************************************/
+int  USB_PRINTF( const char *format, ... );
+
+/** @} (end addtogroup USB_COMMON) */
+#endif /* defined( DOXY_DOC_ONLY ) */
+
+/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
+
+/* Hardware constraint, do not change. */
+#define MAX_NUM_HOSTCHANNELS  14
+
+/* The DMA engine use one FIFO ram word for each host channel. */
+#define MAX_HOST_FIFO_SIZE_INWORDS (512-MAX_NUM_HOSTCHANNELS)/*Unit is 4 bytes*/
+
+#if defined ( USER_PUTCHAR )
+  void USB_Puts( const char *p );
+  #define USB_PUTS( s )            USB_Puts( s )
+  #define USB_PUTCHAR( c )         USER_PUTCHAR( c )
+#else
+  #define USB_PUTS( s )
+  #define USB_PUTCHAR( c )
+#endif
+
+#if defined( USB_USE_PRINTF )
+  /* Use a printf which don't support floating point formatting */
+  #if defined(__ICCARM__) || defined (__CC_ARM) || defined (__CROSSWORKS_ARM)
+    #define USB_PRINTF                  printf
+  #else
+    #define USB_PRINTF                  iprintf
+  #endif
+#else
+  #define USB_PRINTF(...)
+#endif /* defined( USB_USE_PRINTF ) */
+
+#if defined( DEBUG_USB_API )
+  #define DEBUG_USB_API_PUTS( s )       USB_PUTS( s )
+  #define DEBUG_USB_API_PUTCHAR( c )    USB_PUTCHAR( c )
+#else
+  #define DEBUG_USB_API_PUTS( s )
+  #define DEBUG_USB_API_PUTCHAR( c )
+#endif /* defined( DEBUG_USB_API ) */
+
+/** @endcond */
+
+/*** -------------------- Common API definitions ------------------------- ***/
+
+/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
+
+#if defined( USB_HOST )
+  #if defined( NUM_APP_TIMERS )
+    #define NUM_QTIMERS ( NUM_HC_USED + 2 + NUM_APP_TIMERS + 1 )
+  #else
+    #define NUM_QTIMERS ( NUM_HC_USED + 2 + 1 )
+  #endif
+  /* + 2 for default ctrl. host ch. 0 & 1, + 1 for host port timer  */
+#else
+  #if defined( NUM_APP_TIMERS )
+    #define NUM_QTIMERS ( NUM_APP_TIMERS )
+  #else
+    #define NUM_QTIMERS 0
+  #endif
+#endif /* defined( USB_HOST ) */
+/** @endcond */
+
+/** @addtogroup USB_COMMON
+ *  @{*/
+
+/***************************************************************************//**
+ * @brief
+ *  USB transfer callback function.
+ *
+ * @details
+ *  The callback function is called when a transfer has completed. An application
+ *  should check the status, xferred and optionally the remaining parameters
+ *  before deciding if the transfer is usable. In the case where the transfer
+ *  is part of a control request data stage, the callback function should
+ *  return an appropriate @ref USB_Status_TypeDef status.
+ *
+ * @param[in] status
+ *   The transfer status. See @ref USB_Status_TypeDef.
+ *
+ * @param[in] xferred
+ *   Number of bytes actually transferred.
+ *
+ * @param[in] remaining
+ *   Number of bytes not transferred.
+ *
+ * @return
+ *   @ref USB_STATUS_OK on success, else an appropriate error code.
+ ******************************************************************************/
+typedef int  (*USB_XferCompleteCb_TypeDef)( USB_Status_TypeDef status, uint32_t xferred, uint32_t remaining );
+
+/***************************************************************************//**
+ * @brief
+ *  USBTIMER callback function.
+ *
+ * @details
+ *  The callback function is called when an USBTIMER has expired. The callback
+ *  is done with interrupts disabled.
+ ******************************************************************************/
+typedef void (*USBTIMER_Callback_TypeDef)(  void );
+
+char *USB_GetErrorMsgString(            int error );
+
+#if defined( USB_USE_PRINTF )
+  void USB_PrintErrorMsgString(         char *pre, int error );
+#else
+  #define USB_PrintErrorMsgString(      pre, error )
+#endif
+
+void  USBTIMER_DelayMs(                 uint32_t msec );
+void  USBTIMER_DelayUs(                 uint32_t usec );
+void  USBTIMER_Init(                    void );
+
+#if ( NUM_QTIMERS > 0 )
+  void  USBTIMER_Start(                 uint32_t id, uint32_t timeout, USBTIMER_Callback_TypeDef callback );
+  void  USBTIMER_Stop(                  uint32_t id );
+#endif /* ( NUM_QTIMERS > 0 ) */
+/** @} (end addtogroup USB_COMMON) */
+
+#if defined( USB_DEVICE )
+/** @addtogroup USB_DEVICE
+ *  @{*/
+/*** -------------------- DEVICE mode API definitions -------------------- ***/
+
+/***************************************************************************//**
+ * @brief
+ *  USB Reset callback function.
+ * @details
+ *  Called whenever USB reset signalling is detected on the USB port.
+ ******************************************************************************/
+typedef void (*USBD_UsbResetCb_TypeDef)( void );
+
+/***************************************************************************//**
+ * @brief
+ *  USB Start Of Frame (SOF) interrupt callback function.
+ *
+ * @details
+ *  Called at each SOF interrupt (if enabled),
+ *
+ * @param[in] sofNr
+ *   Current frame number. The value rolls over to 0 after 16383 (0x3FFF).
+ ******************************************************************************/
+typedef void (*USBD_SofIntCb_TypeDef)( uint16_t sofNr );
+
+/***************************************************************************//**
+ * @brief
+ *  USB State change callback function.
+ *
+ * @details
+ *  Called whenever the device change state.
+ *
+ * @param[in] oldState
+ *   The device USB state just leaved. See @ref USBD_State_TypeDef.
+ *
+ * @param[in] newState
+ *   New (the current) USB device state. See @ref USBD_State_TypeDef.
+ ******************************************************************************/
+typedef void (*USBD_DeviceStateChangeCb_TypeDef)( USBD_State_TypeDef oldState, USBD_State_TypeDef newState );
+
+/***************************************************************************//**
+ * @brief
+ *  USB power mode callback function.
+ *
+ * @details
+ *  Called whenever the device stack needs to query if the device is currently
+ *  self- or bus-powered. Typically when host has issued an @ref GET_STATUS
+ *  setup command.
+ *
+ * @return
+ *  True if self-powered, false otherwise.
+ ******************************************************************************/
+typedef bool (*USBD_IsSelfPoweredCb_TypeDef)( void );
+
+/***************************************************************************//**
+ * @brief
+ *  USB setup request callback function.
+ *
+ * @details
+ *  Called on each setup request received from host. This gives the application a
+ *  possibility to extend or override standard requests, and to implement class
+ *  or vendor specific requests. Return @ref USB_STATUS_OK if the request is
+ *  handled, return @ref USB_STATUS_REQ_ERR if it is an illegal request or
+ *  return @ref USB_STATUS_REQ_UNHANDLED to pass the request on to the default
+ *  request handler.
+ *
+ * @param[in] setup
+ *  Pointer to an USB setup packet. See @ref USB_Setup_TypeDef.
+ *
+ * @return
+ *  An appropriate status/error code. See @ref USB_Status_TypeDef.
+ ******************************************************************************/
+typedef int  (*USBD_SetupCmdCb_TypeDef)( const USB_Setup_TypeDef *setup );
+
+/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
+struct USBD_Callbacks_TypeDef;
+typedef struct USBD_Callbacks_TypeDef const *USBD_Callbacks_TypeDef_Pointer;
+/** @endcond */
+
+
+/** @brief USB Device stack initialization structure.
+ *  @details This structure is passed to @ref USBD_Init() when starting up
+ *  the device.                                                             */
+typedef struct
+{
+  const USB_DeviceDescriptor_TypeDef      *deviceDescriptor;      /**< Pointer to a device descriptor.                */
+  const uint8_t                           *configDescriptor;      /**< Pointer to a configuration descriptor.         */
+  const void * const                      *stringDescriptors;     /**< Pointer to an array of string descriptor pointers.*/
+  const uint8_t                           numberOfStrings;        /**< Number of strings in string descriptor array.  */
+  const uint8_t                           *bufferingMultiplier;   /**< Pointer to an array defining the size of the
+                                                                       endpoint buffers. The size is given in
+                                                                       multiples of endpoint size. Generally a value
+                                                                       of 1 (single) or 2 (double) buffering should be
+                                                                       used.                                          */
+  USBD_Callbacks_TypeDef_Pointer          callbacks;              /**< Pointer to struct with callbacks
+                                                                       (@ref USBD_Callbacks_TypeDef). These callbacks
+                                                                       are used by the device stack to signal events
+                                                                       to or query the application.                   */
+  const uint32_t                          reserved;               /**< Reserved for future use.                       */
+} USBD_Init_TypeDef;
+
+
+/** @brief USB Device stack callback structure.
+ *  @details Callback functions used by the device stack to signal events or
+ *  query status to/from the application. See @ref USBD_Init_TypeDef. Assign
+ *  members to NULL if your application don't need a specific callback. */
+typedef struct USBD_Callbacks_TypeDef
+{
+  const USBD_UsbResetCb_TypeDef           usbReset;               /**< Called whenever USB reset signalling is detected
+                                                                       on the USB port.                                */
+  const USBD_DeviceStateChangeCb_TypeDef  usbStateChange;         /**< Called whenever the device change state.        */
+  const USBD_SetupCmdCb_TypeDef           setupCmd;               /**< Called on each setup request received from host.*/
+  const USBD_IsSelfPoweredCb_TypeDef      isSelfPowered;          /**< Called whenever the device stack needs to query
+                                                                       if the device is currently self- or bus-powered.
+                                                                       Applies to devices which can operate in both modes.*/
+  const USBD_SofIntCb_TypeDef             sofInt;                 /**< Called at each SOF interrupt. If NULL, the device
+                                                                       stack will not enable the SOF interrupt.        */
+} USBD_Callbacks_TypeDef;
+
+
+/*** -------------------- DEVICE mode API -------------------------------- ***/
+
+void                USBD_AbortAllTransfers( void );
+int                 USBD_AbortTransfer(     int epAddr );
+void                USBD_Connect(           void );
+void                USBD_Disconnect(        void );
+bool                USBD_EpIsBusy(          int epAddr );
+USBD_State_TypeDef  USBD_GetUsbState(       void );
+const char *        USBD_GetUsbStateName(   USBD_State_TypeDef state );
+int                 USBD_Init(              const USBD_Init_TypeDef *p );
+int                 USBD_Read(              int epAddr, void *data, int byteCount, USB_XferCompleteCb_TypeDef callback );
+int                 USBD_RemoteWakeup(      void );
+bool                USBD_SafeToEnterEM2(    void );
+int                 USBD_StallEp(           int epAddr );
+void                USBD_Stop(              void );
+int                 USBD_UnStallEp(         int epAddr );
+int                 USBD_Write(             int epAddr, void *data, int byteCount, USB_XferCompleteCb_TypeDef callback );
+
+#ifdef __MBED__
+int                 USBD_SetAddress(        uint8_t addr );
+int                 USBD_AddEndpoint(       int epAddr, int transferType, int maxPacketSize, int bufferMult );
+int                 USBD_EpIsStalled(       int epAddr );
+void                USBD_StallEp0(          void );
+#endif
+
+/** @} (end addtogroup USB_DEVICE) */
+#endif /* defined( USB_DEVICE ) */
+
+
+#if defined( USB_HOST )
+/***************************************************************************//**
+ * @addtogroup USB_HOST
+ * @brief USB HOST protocol stack, see @ref usb_host page for detailed documentation.
+ * @{
+ ******************************************************************************/
+/*** -------------------- HOST mode API definitions ---------------------- ***/
+
+#define USB_VBUSOVRCUR_PORT_NONE     -1       /**< No overcurrent flag functionality.                   */
+#define USB_VBUSOVRCUR_POLARITY_LOW  0        /**< Overcurrent flag pin polarity is low.                */
+#define USB_VBUSOVRCUR_POLARITY_HIGH 1        /**< Overcurrent flag pin polarity is high.               */
+
+/** USB HOST endpoint status enumerator. */
+typedef enum
+{
+  H_EP_IDLE             = 0,                      /**< The endpoint is idle.                            */
+  H_EP_SETUP            = 1,                      /**< The endpoint is in SETUP stage.                  */
+  H_EP_DATA_IN          = 2,                      /**< The endpoint is in DATA IN stage.                */
+  H_EP_DATA_OUT         = 3,                      /**< The endpoint is in DATA OUT stage.               */
+  H_EP_STATUS_IN        = 4,                      /**< The endpoint is in STATUS IN stage.              */
+  H_EP_STATUS_OUT       = 5,                      /**< The endpoint is in STATUS OUT stage.             */
+} USBH_EpState_TypeDef;
+
+
+/** @brief USB HOST endpoint status data.
+ *  @details A host application should not manipulate the contents of
+ * this struct.                                                             */
+typedef struct
+{
+  USB_Setup_TypeDef               setup;          /**< A SETUP package.                                 */
+  uint8_t                         setupErrCnt;    /**< Error counter for SETUP transfers.               */
+  USB_EndpointDescriptor_TypeDef  epDesc;         /**< Endpoint descriptor.                             */
+  struct USBH_Device_TypeDef      *parentDevice;  /**< The device the endpoint belongs to.              */
+  uint8_t                         type;           /**< Endpoint type.                                   */
+  uint16_t                        packetSize;     /**< Packet size, current transfer.                   */
+  uint8_t                         hcOut;          /**< Host channel number assigned for OUT transfers.  */
+  uint8_t                         hcIn;           /**< Host channel number assigned for IN transfers.   */
+  bool                            in;             /**< Endpoint direction.                              */
+  uint8_t                         toggle;         /**< Endpoint data toggle.                            */
+  USBH_EpState_TypeDef            state;          /**< Endpoint state.                                  */
+  uint8_t                         addr;           /**< Endpoint address.                                */
+  uint8_t                         *buf;           /**< Transfer buffer.                                 */
+  volatile bool                   xferCompleted;  /**< Transfer completion flag.                        */
+  USB_Status_TypeDef              xferStatus;     /**< Transfer status.                                 */
+  USB_XferCompleteCb_TypeDef      xferCompleteCb; /**< Transfer completion callback function.           */
+  uint32_t                        xferred;        /**< Number of bytes transferred.                     */
+  uint32_t                        remaining;      /**< Number of bytes remaining.                       */
+  uint32_t                        timeout;        /**< Transfer timeout.                                */
+} USBH_Ep_TypeDef;
+
+
+/** @brief USB HOST device definition.
+ *  @details A host application should not manipulate the contents of
+ *  this struct.                                                            */
+typedef struct USBH_Device_TypeDef
+{
+  USB_DeviceDescriptor_TypeDef          devDesc;  /**< The device device descriptor.                    */
+  USB_ConfigurationDescriptor_TypeDef   confDesc; /**< The device configuration descriptor.             */
+  USB_InterfaceDescriptor_TypeDef       itfDesc;  /**< The device interface descriptor.                 */
+  USBH_Ep_TypeDef                       ep0;      /**< Endpoint 0 status data.                          */
+  USBH_Ep_TypeDef                       *ep;      /**< Array of endpoint status data.                   */
+  int                                   numEp;    /**< Number of endpoints.                             */
+  uint8_t                               addr;     /**< The device address.                              */
+  uint8_t                               speed;    /**< The device speed (low or full speed).            */
+} USBH_Device_TypeDef;
+
+
+/** @brief USB Host stack initialization structure.
+ *  @details This structure is passed to @ref USBH_Init() when starting up the
+ *  device. Max accumulated FIFO size is 2K bytes.                          */
+typedef struct
+{
+  uint32_t                  rxFifoSize;     /**< Number of FIFO bytes set aside for IN endpoints.            */
+  uint32_t                  nptxFifoSize;   /**< Number of FIFO bytes set aside for OUT CTRL/BULK endoints.  */
+  uint32_t                  ptxFifoSize;    /**< Number of FIFO bytes set aside for OUT INTR/ISO endoints.   */
+  uint32_t                  reserved;       /**< Reserved for future use.                                    */
+} USBH_Init_TypeDef;
+
+
+/** Default @ref USBH_Init_TypeDef values, provides reasonable Tx/Rx FIFO
+ *  partitioning.                                                         */
+/* In DMA mode the total available FIFO space is smaller.       */
+/* The DMA controller use one FIFO word pr. channel for status. */
+/* The unit in the table is byte.                               */
+#define USBH_INIT_DEFAULT                                                    \
+{                                                                            \
+  MAX_HOST_FIFO_SIZE_INWORDS * 2,/* 1024 bytes Rx FIFO size.             */  \
+  MAX_HOST_FIFO_SIZE_INWORDS,    /* 512 bytes non-periodic Tx FIFO size. */  \
+  MAX_HOST_FIFO_SIZE_INWORDS,    /* 512 bytes periodic Tx FIFO size.     */  \
+  0                              /* Reserved.                            */  \
+}
+
+/*** -------------------- HOST mode API ---------------------------------- ***/
+
+int     USBH_AssignHostChannel(            USBH_Ep_TypeDef *ep, uint8_t hcnum );
+int     USBH_ControlMsg(                   USBH_Ep_TypeDef *ep, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, uint16_t wLength, void *data, int timeout, USB_XferCompleteCb_TypeDef callback );
+int     USBH_ControlMsgB(                  USBH_Ep_TypeDef *ep, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, uint16_t wLength, void *data, int timeout );
+bool    USBH_DeviceConnected(              void );
+int     USBH_GetConfigurationDescriptorB(  USBH_Device_TypeDef *device, void *buf, int len, uint8_t configIndex );
+int     USBH_GetDeviceDescriptorB(         USBH_Device_TypeDef *device, void *buf, int len );
+uint8_t USBH_GetPortSpeed(                 void );
+int     USBH_GetStringB(                   USBH_Device_TypeDef *device, uint8_t *buf, int bufLen, uint8_t stringIndex, uint16_t langID );
+int     USBH_Init(                         const USBH_Init_TypeDef *p );
+int     USBH_InitDeviceData(               USBH_Device_TypeDef *device, const uint8_t *buf, USBH_Ep_TypeDef *ep, int numEp, uint8_t deviceSpeed );
+int     USBH_PortReset(                    void );
+int     USBH_PortResume(                   void );
+void    USBH_PortSuspend(                  void );
+void    USBH_PrintString(                  const char *pre, const USB_StringDescriptor_TypeDef *s, const char *post );
+
+#if defined( USB_USE_PRINTF )
+int     USBH_PrintConfigurationDescriptor( const USB_ConfigurationDescriptor_TypeDef *config, int maxLen );
+int     USBH_PrintDeviceDescriptor(        const USB_DeviceDescriptor_TypeDef *device );
+int     USBH_PrintEndpointDescriptor(      const USB_EndpointDescriptor_TypeDef *endpoint );
+int     USBH_PrintInterfaceDescriptor(     const USB_InterfaceDescriptor_TypeDef *interface );
+#else
+#define USBH_PrintConfigurationDescriptor( config, maxLen )
+#define USBH_PrintDeviceDescriptor(        device )
+#define USBH_PrintEndpointDescriptor(      endpoint )
+#define USBH_PrintInterfaceDescriptor(     interface )
+#endif /* defined( USB_USE_PRINTF ) */
+
+int                                  USBH_QueryDeviceB(                uint8_t *buf, size_t bufsize, uint8_t deviceSpeed );
+USB_ConfigurationDescriptor_TypeDef* USBH_QGetConfigurationDescriptor( const uint8_t *buf, int configIndex );
+USB_DeviceDescriptor_TypeDef*        USBH_QGetDeviceDescriptor(        const uint8_t *buf );
+USB_EndpointDescriptor_TypeDef*      USBH_QGetEndpointDescriptor(      const uint8_t *buf, int configIndex, int interfaceIndex, int endpointIndex );
+USB_InterfaceDescriptor_TypeDef*     USBH_QGetInterfaceDescriptor(     const uint8_t *buf, int configIndex, int interfaceIndex );
+
+int     USBH_Read(                         USBH_Ep_TypeDef *ep, void *data, int byteCount, int timeout, USB_XferCompleteCb_TypeDef callback );
+int     USBH_ReadB(                        USBH_Ep_TypeDef *ep, void *data, int byteCount, int timeout );
+int     USBH_SetAddressB(                  USBH_Device_TypeDef *device, uint8_t deviceAddress );
+int     USBH_SetAltInterfaceB(             USBH_Device_TypeDef *device, uint8_t interfaceIndex, uint8_t alternateSetting );
+int     USBH_SetConfigurationB(            USBH_Device_TypeDef *device, uint8_t configValue );
+int     USBH_StallEpB(                     USBH_Ep_TypeDef *ep );
+void    USBH_Stop(                         void );
+int     USBH_UnStallEpB(                   USBH_Ep_TypeDef *ep );
+int     USBH_WaitForDeviceConnectionB(     uint8_t *buf, int timeoutInSeconds );
+int     USBH_Write(                        USBH_Ep_TypeDef *ep, void *data, int byteCount, int timeout, USB_XferCompleteCb_TypeDef callback );
+int     USBH_WriteB(                       USBH_Ep_TypeDef *ep, void *data, int byteCount, int timeout );
+
+/** @} (end addtogroup USB_HOST) */
+#endif /* defined( USB_HOST ) */
+/** @} (end addtogroup USB) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* defined( USB_DEVICE ) || defined( USB_HOST ) */
+#endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */
+#endif /* __EM_USB_H */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_Silicon_Labs/inc/em_usbd.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_Silicon_Labs/inc/em_usbd.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,206 @@
+/***************************************************************************//**
+ * @file em_usbd.h
+ * @brief USB protocol stack library API for EFM32.
+ * @version 3.20.14
+ *******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+
+#ifndef __EM_USBD_H
+#define __EM_USBD_H
+
+#include "em_device.h"
+#if defined( USB_PRESENT ) && ( USB_COUNT == 1 )
+#include "em_usb.h"
+#if defined( USB_DEVICE )
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
+
+#if defined( DEBUG_USB_API )
+#define DEBUG_TRACE_ABORT( x )                                  \
+{                                                               \
+  if ( x == USB_STATUS_EP_STALLED )                             \
+  {  DEBUG_USB_API_PUTS( "\nEP cb(), EP stalled" );           } \
+  else if ( x == USB_STATUS_EP_ABORTED )                        \
+  {  DEBUG_USB_API_PUTS( "\nEP cb(), EP aborted" );           } \
+  else if ( x == USB_STATUS_DEVICE_UNCONFIGURED )               \
+  {  DEBUG_USB_API_PUTS( "\nEP cb(), device unconfigured" );  } \
+  else if ( x == USB_STATUS_DEVICE_SUSPENDED )                  \
+  {  DEBUG_USB_API_PUTS( "\nEP cb(), device suspended" );     } \
+  else /* ( x == USB_STATUS_DEVICE_RESET ) */                   \
+  {  DEBUG_USB_API_PUTS( "\nEP cb(), device reset" );         } \
+}
+#else
+#define DEBUG_TRACE_ABORT( x )
+#endif
+
+extern USBD_Device_TypeDef *dev;
+extern volatile bool USBD_poweredDown;
+
+__STATIC_INLINE void USBD_ArmEp0( USBD_Ep_TypeDef *ep );
+__STATIC_INLINE void USBD_ArmEpN( USBD_Ep_TypeDef *ep );
+__STATIC_INLINE void USBD_AbortEp( USBD_Ep_TypeDef *ep );
+
+void USBD_SetUsbState( USBD_State_TypeDef newState );
+
+int  USBDCH9_SetupCmd( USBD_Device_TypeDef *device );
+
+void USBDEP_Ep0Handler( USBD_Device_TypeDef *device );
+void USBDEP_EpHandler( uint8_t epAddr );
+
+__STATIC_INLINE void USBD_ActivateAllEps( bool forceIdle )
+{
+  int i;
+
+  for ( i = 1; i <= NUM_EP_USED; i++ )
+  {
+    USBDHAL_ActivateEp( &dev->ep[ i ], forceIdle );
+  }
+}
+
+__STATIC_INLINE void USBD_ArmEp( USBD_Ep_TypeDef *ep )
+{
+  if ( ep->num == 0 )
+  {
+    USBD_ArmEp0( ep );
+  }
+  else
+  {
+    USBD_ArmEpN( ep );
+  }
+}
+
+__STATIC_INLINE void USBD_ArmEp0( USBD_Ep_TypeDef *ep )
+{
+  if ( ep->in )
+  {
+    if ( ep->remaining == 0 )       /* Zero Length Packet? */
+    {
+      ep->zlp = 1;
+    }
+
+    USBDHAL_SetEp0InDmaPtr( ep->buf );
+    USBDHAL_StartEp0In( EFM32_MIN( ep->remaining, ep->packetSize ),
+                        dev->ep0MpsCode );
+  }
+  else
+  {
+    USBDHAL_SetEp0OutDmaPtr( ep->buf );
+    USBDHAL_StartEp0Out( ep->packetSize, dev->ep0MpsCode );
+  }
+}
+
+__STATIC_INLINE void USBD_ArmEpN( USBD_Ep_TypeDef *ep )
+{
+  if ( ep->in )
+  {
+    USBDHAL_StartEpIn( ep );
+  }
+  else
+  {
+    USBDHAL_StartEpOut( ep );
+  }
+}
+
+__STATIC_INLINE void USBD_DeactivateAllEps( USB_Status_TypeDef reason )
+{
+  int i;
+  USBD_Ep_TypeDef *ep;
+
+  for ( i = 1; i <= NUM_EP_USED; i++ )
+  {
+    ep = &dev->ep[ i ];
+
+    if ( ep->state == D_EP_IDLE )
+    {
+      USBDHAL_DeactivateEp( ep );
+    }
+  }
+
+  USBDHAL_AbortAllTransfers( reason );
+}
+
+__STATIC_INLINE USBD_Ep_TypeDef *USBD_GetEpFromAddr( uint8_t epAddr )
+{
+  int epIndex;
+  USBD_Ep_TypeDef *ep = NULL;
+
+  if ( epAddr & USB_SETUP_DIR_MASK )
+  {
+    epIndex = dev->inEpAddr2EpIndex[ epAddr & USB_EPNUM_MASK ];
+  }
+  else
+  {
+    epIndex = dev->outEpAddr2EpIndex[ epAddr & USB_EPNUM_MASK ];
+  }
+
+  if ( epIndex )
+  {
+    ep = &dev->ep[ epIndex ];
+  }
+  else if ( ( epAddr & USB_EPNUM_MASK ) == 0 )
+  {
+    ep = &dev->ep[ 0 ];
+  }
+
+  return ep;
+}
+
+__STATIC_INLINE void USBD_ReArmEp0( USBD_Ep_TypeDef *ep )
+{
+  if ( ep->in )
+  {
+    USBDHAL_StartEp0In( EFM32_MIN( ep->remaining, ep->packetSize ),
+                        dev->ep0MpsCode );
+  }
+  else
+  {
+    USBDHAL_StartEp0Out( ep->packetSize, dev->ep0MpsCode );
+  }
+}
+
+__STATIC_INLINE void USBD_AbortEp( USBD_Ep_TypeDef *ep )
+{
+  if ( ep->state == D_EP_IDLE )
+  {
+    return;
+  }
+
+  if ( ep->in )
+  {
+    USBDHAL_AbortEpIn( ep );
+  }
+  else
+  {
+    USBDHAL_AbortEpOut( ep );
+  }
+}
+
+/** @endcond */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* defined( USB_DEVICE ) */
+#endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */
+#endif /* __EM_USBD_H */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_Silicon_Labs/inc/em_usbh.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_Silicon_Labs/inc/em_usbh.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,75 @@
+/***************************************************************************//**
+ * @file em_usbh.h
+ * @brief USB protocol stack library API for EFM32.
+ * @version 3.20.14
+ *******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+
+#ifndef __EM_USBH_H
+#define __EM_USBH_H
+
+#include "em_device.h"
+#if defined( USB_PRESENT ) && ( USB_COUNT == 1 )
+#include "em_usb.h"
+#if defined( USB_HOST )
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
+
+extern USBH_Hc_TypeDef                  hcs[];
+extern int                              USBH_attachRetryCount;
+extern const USBH_AttachTiming_TypeDef  USBH_attachTiming[];
+extern USBH_Init_TypeDef                USBH_initData;
+extern volatile USBH_PortState_TypeDef  USBH_portStatus;
+
+USB_Status_TypeDef USBH_CtlSendSetup(   USBH_Ep_TypeDef *ep );
+USB_Status_TypeDef USBH_CtlSendData(    USBH_Ep_TypeDef *ep, uint16_t length );
+USB_Status_TypeDef USBH_CtlReceiveData( USBH_Ep_TypeDef *ep, uint16_t length );
+
+#if defined( USB_RAW_API )
+int USBH_CtlRxRaw( uint8_t pid, USBH_Ep_TypeDef *ep, void *data, int byteCount );
+int USBH_CtlTxRaw( uint8_t pid, USBH_Ep_TypeDef *ep, void *data, int byteCount );
+#endif
+
+void USBHEP_EpHandler(     USBH_Ep_TypeDef *ep, USB_Status_TypeDef result );
+void USBHEP_CtrlEpHandler( USBH_Ep_TypeDef *ep, USB_Status_TypeDef result );
+void USBHEP_TransferDone(  USBH_Ep_TypeDef *ep, USB_Status_TypeDef result );
+
+__STATIC_INLINE uint16_t USBH_GetFrameNum( void )
+{
+  return USBHHAL_GetFrameNum();
+}
+
+__STATIC_INLINE bool USBH_FrameNumIsEven( void )
+{
+  return ( USBHHAL_GetFrameNum() & 1 ) == 0;
+}
+
+/** @endcond */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* defined( USB_HOST ) */
+#endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */
+#endif /* __EM_USBH_H      */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_Silicon_Labs/inc/em_usbhal.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_Silicon_Labs/inc/em_usbhal.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,757 @@
+/***************************************************************************//**
+ * @file em_usbhal.h
+ * @brief USB protocol stack library, low level USB peripheral access.
+ * @version 3.20.14
+ *******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+
+#ifndef __EM_USBHAL_H
+#define __EM_USBHAL_H
+
+#include "em_device.h"
+#if defined( USB_PRESENT ) && ( USB_COUNT == 1 )
+#include "em_usb.h"
+#if defined( USB_DEVICE ) || defined( USB_HOST )
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
+
+#define USB_PID_DATA0         0
+#define USB_PID_DATA2         1
+#define USB_PID_DATA1         2
+#define USB_PID_SETUP         3
+
+#define HPRT_F_SPEED          ( 1 << _USB_HPRT_PRTSPD_SHIFT )
+#define HPRT_L_SPEED          ( 2 << _USB_HPRT_PRTSPD_SHIFT )
+#define HCFG_PHYCLK_48MHZ     1
+#define HCFG_PHYCLK_6MHZ      2
+
+#define DOEP0_XFERSIZE_PKTCNT_MASK ( _USB_DOEP0TSIZ_XFERSIZE_MASK | \
+                                     _USB_DOEP0TSIZ_PKTCNT_MASK   )
+#define DOEP_XFERSIZE_PKTCNT_MASK  ( _USB_DOEP_TSIZ_XFERSIZE_MASK | \
+                                     _USB_DOEP_TSIZ_PKTCNT_MASK   )
+
+#define DIEP0_XFERSIZE_PKTCNT_MASK ( _USB_DIEP0TSIZ_XFERSIZE_MASK | \
+                                     _USB_DIEP0TSIZ_PKTCNT_MASK   )
+#define DIEP_XFERSIZE_PKTCNT_MASK  ( _USB_DIEP_TSIZ_XFERSIZE_MASK | \
+                                     _USB_DIEP_TSIZ_PKTCNT_MASK   | \
+                                     _USB_DIEP_TSIZ_MC_MASK       )
+
+#define DIEPCTL_EPTYPE_CONTROL (0 << _USB_DIEP_CTL_EPTYPE_SHIFT )
+#define DIEPCTL_EPTYPE_ISOC    (1 << _USB_DIEP_CTL_EPTYPE_SHIFT )
+#define DIEPCTL_EPTYPE_BULK    (2 << _USB_DIEP_CTL_EPTYPE_SHIFT )
+#define DIEPCTL_EPTYPE_INTR    (3 << _USB_DIEP_CTL_EPTYPE_SHIFT )
+
+#define DOEPCTL_EPTYPE_CONTROL (0 << _USB_DOEP_CTL_EPTYPE_SHIFT )
+#define DOEPCTL_EPTYPE_ISOC    (1 << _USB_DOEP_CTL_EPTYPE_SHIFT )
+#define DOEPCTL_EPTYPE_BULK    (2 << _USB_DOEP_CTL_EPTYPE_SHIFT )
+#define DOEPCTL_EPTYPE_INTR    (3 << _USB_DOEP_CTL_EPTYPE_SHIFT )
+
+#define HCCHAR_EPTYPE_CTRL     (0 << _USB_HC_CHAR_EPTYPE_SHIFT )
+#define HCCHAR_EPTYPE_ISOC     (1 << _USB_HC_CHAR_EPTYPE_SHIFT )
+#define HCCHAR_EPTYPE_BULK     (2 << _USB_HC_CHAR_EPTYPE_SHIFT )
+#define HCCHAR_EPTYPE_INTR     (3 << _USB_HC_CHAR_EPTYPE_SHIFT )
+
+#define GRXSTSP_PKTSTS_DEVICE_GOTNAK          ( 1 << _USB_GRXSTSP_PKTSTS_SHIFT )
+#define GRXSTSP_PKTSTS_DEVICE_DATAOUTRECEIVED ( 2 << _USB_GRXSTSP_PKTSTS_SHIFT )
+#define GRXSTSP_PKTSTS_DEVICE_DATAOUTCOMPLETE ( 3 << _USB_GRXSTSP_PKTSTS_SHIFT )
+#define GRXSTSP_PKTSTS_DEVICE_SETUPCOMPLETE   ( 4 << _USB_GRXSTSP_PKTSTS_SHIFT )
+#define GRXSTSP_PKTSTS_DEVICE_SETUPRECEIVED   ( 6 << _USB_GRXSTSP_PKTSTS_SHIFT )
+
+#define GRXSTSP_PKTSTS_HOST_DATAINRECEIVED  ( 2 << _USB_GRXSTSP_PKTSTS_SHIFT )
+#define GRXSTSP_PKTSTS_HOST_DATAINCOMPLETE  ( 3 << _USB_GRXSTSP_PKTSTS_SHIFT )
+#define GRXSTSP_PKTSTS_HOST_DATATOGGLEERROR ( 5 << _USB_GRXSTSP_PKTSTS_SHIFT )
+#define GRXSTSP_PKTSTS_HOST_CHANNELHALTED   ( 7 << _USB_GRXSTSP_PKTSTS_SHIFT )
+
+#define DCTL_WO_BITMASK \
+          ( _USB_DCTL_CGOUTNAK_MASK  | _USB_DCTL_SGOUTNAK_MASK   | \
+            _USB_DCTL_CGNPINNAK_MASK | _USB_DCTL_SGNPINNAK_MASK  )
+#define GUSBCFG_WO_BITMASK ( USB_GUSBCFG_CORRUPTTXPKT )
+#define DEPCTL_WO_BITMASK \
+          ( USB_DIEP_CTL_CNAK       | USB_DIEP_CTL_SNAK        | \
+            USB_DIEP_CTL_SETD0PIDEF | USB_DIEP_CTL_SETD1PIDOF  )
+
+#define HPRT_WC_MASK ( USB_HPRT_PRTCONNDET | USB_HPRT_PRTENA | \
+                       USB_HPRT_PRTENCHNG  | USB_HPRT_PRTOVRCURRCHNG )
+
+typedef __IO uint32_t USB_FIFO_TypeDef[ 0x1000 / sizeof( uint32_t ) ];
+typedef __IO uint32_t USB_DIEPTXF_TypeDef;
+
+#define USB_DINEPS       ((USB_DIEP_TypeDef    *) &USB->DIEP0CTL )
+#define USB_DOUTEPS      ((USB_DOEP_TypeDef    *) &USB->DOEP0CTL )
+#define USB_FIFOS        ((USB_FIFO_TypeDef    *) &USB->FIFO0D   )
+#define USB_DIEPTXFS     ((USB_DIEPTXF_TypeDef *) &USB->DIEPTXF1 )
+
+void USBHAL_CoreReset( void );
+
+#if defined( USB_DEVICE )
+void USBDHAL_AbortAllTransfers( USB_Status_TypeDef reason );
+USB_Status_TypeDef USBDHAL_CoreInit( const uint32_t totalRxFifoSize,
+                                     const uint32_t totalTxFifoSize );
+void USBDHAL_Connect( void );
+void USBDHAL_Disconnect( void );
+void USBDHAL_AbortAllEps( void );
+void USBDHAL_AbortEpIn( USBD_Ep_TypeDef *ep );
+void USBDHAL_AbortEpOut( USBD_Ep_TypeDef *ep );
+
+__STATIC_INLINE USB_Status_TypeDef USBDHAL_GetStallStatusEp(
+                                   USBD_Ep_TypeDef *ep, uint16_t *halt );
+__STATIC_INLINE uint32_t USBDHAL_GetInEpInts( USBD_Ep_TypeDef *ep );
+__STATIC_INLINE uint32_t USBDHAL_GetOutEpInts( USBD_Ep_TypeDef *ep );
+__STATIC_INLINE void USBDHAL_SetEPDISNAK( USBD_Ep_TypeDef *ep );
+#endif /* defined( USB_DEVICE ) */
+
+#if defined( USB_HOST )
+USB_Status_TypeDef USBHHAL_CoreInit( const uint32_t rxFifoSize,
+                                     const uint32_t nptxFifoSize,
+                                     const uint32_t ptxFifoSize );
+void USBHHAL_HCHalt(  int hcnum, uint32_t hcchar );
+void USBHHAL_HCInit(  int hcnum );
+void USBHHAL_HCStart( int hcnum );
+#endif /* defined( USB_HOST ) */
+
+__STATIC_INLINE void USBHAL_DisableGlobalInt( void )
+{
+  USB->GAHBCFG &= ~USB_GAHBCFG_GLBLINTRMSK;
+}
+
+__STATIC_INLINE void USBHAL_DisablePhyPins( void )
+{
+  USB->ROUTE = _USB_ROUTE_RESETVALUE;
+}
+
+__STATIC_INLINE void USBHAL_DisableUsbInt( void )
+{
+  USB->IEN = _USB_IEN_RESETVALUE;
+}
+
+__STATIC_INLINE void USBHAL_EnableGlobalInt( void )
+{
+  USB->GAHBCFG |= USB_GAHBCFG_GLBLINTRMSK;
+}
+
+__STATIC_INLINE void USBHAL_FlushRxFifo( void )
+{
+  USB->GRSTCTL = USB_GRSTCTL_RXFFLSH;
+  while ( USB->GRSTCTL & USB_GRSTCTL_RXFFLSH ) {}
+}
+
+__STATIC_INLINE void USBHAL_FlushTxFifo( uint8_t fifoNum )
+{
+  USB->GRSTCTL = USB_GRSTCTL_TXFFLSH | ( fifoNum << _USB_GRSTCTL_TXFNUM_SHIFT );
+  while ( USB->GRSTCTL & USB_GRSTCTL_TXFFLSH ) {}
+}
+
+__STATIC_INLINE uint32_t USBHAL_GetCoreInts( void )
+{
+  uint32_t retVal;
+
+  retVal  = USB->GINTSTS;
+  retVal &= USB->GINTMSK;
+
+  return retVal;
+}
+
+__STATIC_INLINE bool USBHAL_VbusIsOn( void )
+{
+  return ( USB->STATUS & USB_STATUS_VREGOS ) != 0;
+}
+
+#if defined( USB_DEVICE )
+__STATIC_INLINE void USBDHAL_ActivateEp( USBD_Ep_TypeDef *ep, bool forceIdle )
+{
+#define DIEP_MPS_EPTYPE_TXFNUM_MASK ( _USB_DIEP_CTL_MPS_MASK    | \
+                                      _USB_DIEP_CTL_EPTYPE_MASK | \
+                                      _USB_DIEP_CTL_TXFNUM_MASK )
+#define DOEP_MPS_EPTYPE_MASK        ( _USB_DOEP_CTL_MPS_MASK    | \
+                                      _USB_DOEP_CTL_EPTYPE_MASK )
+  uint32_t daintmask, depctl;
+
+  if ( forceIdle )
+    ep->state = D_EP_IDLE;
+
+  if ( ep->in )
+  {
+    daintmask = ep->mask;
+    depctl = USB_DINEPS[ ep->num ].CTL & ~DEPCTL_WO_BITMASK;
+
+    if ( !( depctl & USB_DIEP_CTL_USBACTEP ) )
+    {
+      depctl = ( depctl                                     &
+                 ~( DIEP_MPS_EPTYPE_TXFNUM_MASK          |
+                    USB_DIEP_CTL_STALL                     )  ) |
+               ( ep->packetSize << _USB_DIEP_CTL_MPS_SHIFT    ) |
+               ( ep->type       << _USB_DIEP_CTL_EPTYPE_SHIFT ) |
+               ( ep->txFifoNum  << _USB_DIEP_CTL_TXFNUM_SHIFT ) |
+               USB_DIEP_CTL_SETD0PIDEF                          |
+               USB_DIEP_CTL_USBACTEP                            |
+               USB_DIEP_CTL_SNAK;
+    }
+    else
+    {
+      depctl |= USB_DIEP_CTL_SETD0PIDEF;
+    }
+    USB_DINEPS[ ep->num ].CTL = depctl;
+  }
+  else
+  {
+    daintmask = ep->mask << _USB_DAINTMSK_OUTEPMSK0_SHIFT;
+    depctl = USB_DOUTEPS[ ep->num ].CTL & ~DEPCTL_WO_BITMASK;
+
+    if ( !( depctl & USB_DOEP_CTL_USBACTEP ) )
+    {
+      depctl = ( depctl                                     &
+                 ~( DOEP_MPS_EPTYPE_MASK                 |
+                    USB_DOEP_CTL_STALL                     )  ) |
+               ( ep->packetSize << _USB_DOEP_CTL_MPS_SHIFT    ) |
+               ( ep->type       << _USB_DOEP_CTL_EPTYPE_SHIFT ) |
+               USB_DOEP_CTL_SETD0PIDEF                          |
+               USB_DOEP_CTL_USBACTEP                            |
+               USB_DOEP_CTL_SNAK;
+    }
+    else
+    {
+      depctl |= USB_DOEP_CTL_SETD0PIDEF;
+    }
+    USB_DOUTEPS[ ep->num ].CTL = depctl;
+  }
+
+  /* Enable interrupt for this EP */
+  USB->DAINTMSK |= daintmask;
+
+#undef DIEP_MPS_EPTYPE_TXFNUM_MASK
+#undef DOEP_MPS_EPTYPE_MASK
+}
+
+__STATIC_INLINE void USBDHAL_ClearRemoteWakeup( void )
+{
+  USB->DCTL &= ~( DCTL_WO_BITMASK | USB_DCTL_RMTWKUPSIG );
+}
+
+__STATIC_INLINE void USBDHAL_DeactivateEp( USBD_Ep_TypeDef *ep )
+{
+  uint32_t daintmask;
+
+  if ( ep->in )
+  {
+    USB_DINEPS[ ep->num ].CTL = 0;
+    daintmask = ep->mask;
+  }
+  else
+  {
+    USB_DOUTEPS[ ep->num ].CTL = 0;
+    daintmask = ep->mask << _USB_DAINTMSK_OUTEPMSK0_SHIFT;
+  }
+
+  /* Disable interrupt for this EP */
+  USB->DAINTMSK &= ~daintmask;
+}
+
+__STATIC_INLINE void USBDHAL_EnableInts( USBD_Device_TypeDef *dev )
+{
+  uint32_t mask;
+
+  /* Disable all interrupts. */
+  USB->GINTMSK = 0;
+
+  /* Clear pending interrupts */
+  USB->GINTSTS = 0xFFFFFFFF;
+
+  mask = USB_GINTMSK_USBSUSPMSK     |
+         USB_GINTMSK_USBRSTMSK      |
+         USB_GINTMSK_ENUMDONEMSK    |
+         USB_GINTMSK_IEPINTMSK      |
+         USB_GINTMSK_OEPINTMSK      |
+         USB_GINTMSK_WKUPINTMSK;
+
+  if ( dev->callbacks->sofInt )
+  {
+    mask |= USB_GINTMSK_SOFMSK;
+  }
+
+  USB->GINTMSK = mask;
+}
+
+__STATIC_INLINE void USBDHAL_EnableUsbResetAndSuspendInt( void )
+{
+  /* Disable all interrupts. */
+  USB->GINTMSK = 0;
+
+  USB->GINTMSK = USB_GINTMSK_USBRSTMSK | USB_GINTMSK_USBSUSPMSK;
+}
+
+__STATIC_INLINE void USBDHAL_Ep0Activate( uint32_t ep0mps )
+{
+  USB->DCTL = ( USB->DCTL & ~DCTL_WO_BITMASK ) | USB_DCTL_CGNPINNAK;
+
+  USB->DOEP0CTL = ( USB->DOEP0CTL & ~DEPCTL_WO_BITMASK )
+                  | USB_DOEP0CTL_CNAK | USB_DOEP0CTL_EPENA
+                  | ep0mps;
+}
+
+__STATIC_INLINE bool USBDHAL_EpIsStalled( USBD_Ep_TypeDef *ep )
+{
+  bool retVal = false;
+  uint16_t stallStatus;
+
+  if ( USBDHAL_GetStallStatusEp( ep, &stallStatus ) == USB_STATUS_OK )
+  {
+    retVal = stallStatus & 1 ? true : false;
+  }
+  return retVal;
+}
+
+__STATIC_INLINE uint32_t USBDHAL_GetAllInEpInts( void )
+{
+  uint32_t retVal;
+
+  retVal  = USB->DAINT;
+  retVal &= USB->DAINTMSK;
+  return retVal & 0xFFFF;
+}
+
+__STATIC_INLINE uint32_t USBDHAL_GetAllOutEpInts( void )
+{
+  uint32_t retVal;
+
+  retVal  = USB->DAINT;
+  retVal &= USB->DAINTMSK;
+  return retVal >> 16;
+}
+
+__STATIC_INLINE uint32_t USBDHAL_GetInEpInts( USBD_Ep_TypeDef *ep )
+{
+  uint32_t retVal, msk;
+
+  msk    = USB->DIEPMSK;
+  retVal = USB_DINEPS[ ep->num ].INT;
+
+  return retVal & msk;
+}
+
+__STATIC_INLINE uint32_t USBDHAL_GetOutEpInts( USBD_Ep_TypeDef *ep )
+{
+  uint32_t retVal;
+
+  retVal  = USB_DOUTEPS[ ep->num ].INT;
+#if defined( USB_DOEP0INT_STUPPKTRCVD )
+  retVal &= USB->DOEPMSK | USB_DOEP0INT_STUPPKTRCVD;
+#else
+  retVal &= USB->DOEPMSK;
+#endif
+
+  return retVal;
+}
+
+__STATIC_INLINE USB_Status_TypeDef USBDHAL_GetStallStatusEp(
+                                   USBD_Ep_TypeDef *ep, uint16_t *halt )
+{
+  uint32_t depctl, eptype;
+  USB_Status_TypeDef retVal = USB_STATUS_REQ_ERR;
+
+  if ( ep->in == true )
+  {
+    depctl = USB_DINEPS[ ep->num ].CTL;
+    eptype = depctl & _USB_DIEP_CTL_EPTYPE_MASK;
+
+    if (( eptype == DIEPCTL_EPTYPE_INTR ) || ( eptype == DIEPCTL_EPTYPE_BULK ))
+    {
+      *halt = depctl & USB_DIEP_CTL_STALL ? 1 : 0;
+      retVal = USB_STATUS_OK;
+    }
+  }
+  else
+  {
+    depctl = USB_DOUTEPS[ ep->num ].CTL;
+    eptype = depctl & _USB_DOEP_CTL_EPTYPE_MASK;
+
+    if (( eptype == DOEPCTL_EPTYPE_INTR ) || ( eptype == DOEPCTL_EPTYPE_BULK ))
+    {
+      *halt = depctl & USB_DOEP_CTL_STALL ? 1 : 0;
+      retVal = USB_STATUS_OK;
+    }
+  }
+
+  return retVal;
+}
+
+__STATIC_INLINE void USBDHAL_ReenableEp0Setup( USBD_Device_TypeDef *dev )
+
+{
+  USB->DOEP0DMAADDR = (uint32_t)dev->setupPkt;
+  USB->DOEP0CTL = ( USB->DOEP0CTL & ~DEPCTL_WO_BITMASK )
+                  | USB_DOEP0CTL_EPENA
+                  | dev->ep0MpsCode;
+}
+
+__STATIC_INLINE void USBDHAL_SetAddr( uint8_t addr )
+{
+  USB->DCFG = ( USB->DCFG                    &
+                ~_USB_DCFG_DEVADDR_MASK        ) |
+              (addr << _USB_DCFG_DEVADDR_SHIFT );
+}
+
+__STATIC_INLINE void USBDHAL_SetEp0InDmaPtr( uint8_t* addr )
+{
+  USB->DIEP0DMAADDR = (uint32_t)addr;
+}
+
+__STATIC_INLINE void USBDHAL_SetEp0OutDmaPtr( uint8_t* addr )
+{
+  USB->DOEP0DMAADDR = (uint32_t)addr;
+}
+
+__STATIC_INLINE void USBDHAL_SetEPDISNAK( USBD_Ep_TypeDef *ep )
+{
+  if ( ep->in )
+  {
+    USB_DINEPS[ ep->num ].CTL = ( USB_DINEPS[ ep->num ].CTL   &
+                                  ~DEPCTL_WO_BITMASK            ) |
+                                USB_DIEP_CTL_SNAK                 |
+                                USB_DIEP_CTL_EPDIS;
+  }
+  else
+  {
+    USB_DOUTEPS[ ep->num ].CTL = ( USB_DOUTEPS[ ep->num ].CTL   &
+                                   ~DEPCTL_WO_BITMASK             ) |
+                                 USB_DOEP_CTL_EPENA;
+
+    USB_DOUTEPS[ ep->num ].CTL = ( USB_DOUTEPS[ ep->num ].CTL   &
+                                   ~DEPCTL_WO_BITMASK             ) |
+                                 USB_DOEP_CTL_SNAK                  |
+                                 USB_DOEP_CTL_EPDIS;
+  }
+}
+
+__STATIC_INLINE void USBDHAL_SetRemoteWakeup( void )
+{
+  USB->DCTL = ( USB->DCTL & ~DCTL_WO_BITMASK ) | USB_DCTL_RMTWKUPSIG;
+}
+
+__STATIC_INLINE USB_Status_TypeDef USBDHAL_StallEp( USBD_Ep_TypeDef *ep )
+{
+  uint32_t depctl, eptype;
+  USB_Status_TypeDef retVal = USB_STATUS_REQ_ERR;
+
+  if ( ep->in == true )
+  {
+    depctl = USB_DINEPS[ ep->num ].CTL & ~DEPCTL_WO_BITMASK;
+    eptype = depctl & _USB_DIEP_CTL_EPTYPE_MASK;
+
+    if ( eptype != DIEPCTL_EPTYPE_ISOC )
+    {
+      if ( depctl & USB_DIEP_CTL_EPENA )
+      {
+        depctl |= USB_DIEP_CTL_EPDIS;
+      }
+      USB_DINEPS[ ep->num ].CTL = depctl | USB_DIEP_CTL_STALL;
+      retVal = USB_STATUS_OK;
+    }
+  }
+  else
+  {
+    depctl = USB_DOUTEPS[ ep->num ].CTL & ~DEPCTL_WO_BITMASK;
+    eptype = depctl & _USB_DOEP_CTL_EPTYPE_MASK;
+
+    if ( eptype != DIEPCTL_EPTYPE_ISOC )
+    {
+      USB_DOUTEPS[ ep->num ].CTL = depctl | USB_DOEP_CTL_STALL;
+      retVal = USB_STATUS_OK;
+    }
+  }
+
+  return retVal;
+}
+
+__STATIC_INLINE void USBDHAL_StartEp0In( uint32_t len, uint32_t ep0mps )
+{
+  USB->DIEP0TSIZ = ( len << _USB_DIEP0TSIZ_XFERSIZE_SHIFT   ) |
+                   ( 1   << _USB_DIEP0TSIZ_PKTCNT_SHIFT     );
+
+  USB->DIEP0CTL = ( USB->DIEP0CTL & ~DEPCTL_WO_BITMASK )
+                  | USB_DIEP0CTL_CNAK | USB_DIEP0CTL_EPENA
+                  | ep0mps;
+}
+
+__STATIC_INLINE void USBDHAL_StartEp0Out( uint32_t len, uint32_t ep0mps )
+{
+  USB->DOEP0TSIZ = ( len << _USB_DOEP0TSIZ_XFERSIZE_SHIFT ) |
+                   ( 1   << _USB_DOEP0TSIZ_PKTCNT_SHIFT   );
+
+  USB->DOEP0CTL = ( USB->DOEP0CTL & ~DEPCTL_WO_BITMASK )
+                  | USB_DOEP0CTL_CNAK | USB_DOEP0CTL_EPENA
+                  | ep0mps;
+}
+
+__STATIC_INLINE void USBDHAL_StartEp0Setup( USBD_Device_TypeDef *dev )
+{
+  dev->ep[ 0 ].in = false;
+
+#if defined( USB_DOEP0INT_STUPPKTRCVD )
+  USB->DOEP0TSIZ = ( 8*3 << _USB_DOEP0TSIZ_XFERSIZE_SHIFT ) |
+                   ( 1   << _USB_DOEP0TSIZ_PKTCNT_SHIFT   ) |
+                   ( 3   << _USB_DOEP0TSIZ_SUPCNT_SHIFT   );
+#else
+  USB->DOEP0TSIZ = 3 << _USB_DOEP0TSIZ_SUPCNT_SHIFT;
+#endif
+
+  dev->setup = dev->setupPkt;
+  USB->DOEP0DMAADDR = (uint32_t)dev->setup;
+
+#if defined( USB_DOEP0INT_STUPPKTRCVD )
+  USB->DOEP0CTL = ( USB->DOEP0CTL & ~DEPCTL_WO_BITMASK )
+                  | USB_DOEP0CTL_EPENA
+                  | dev->ep0MpsCode;
+#else
+  USB->DOEP0CTL = ( USB->DOEP0CTL & ~DEPCTL_WO_BITMASK )
+                  | USB_DOEP0CTL_CNAK | USB_DOEP0CTL_EPENA
+                  | dev->ep0MpsCode;
+#endif
+}
+
+__STATIC_INLINE void USBDHAL_StartEpIn( USBD_Ep_TypeDef *ep )
+{
+  uint32_t pktcnt, xfersize;
+
+  if ( ep->remaining == 0 )     /* ZLP ? */
+  {
+    pktcnt = 1;
+    xfersize = 0;
+  }
+  else
+  {
+    pktcnt = ( ep->remaining - 1 + ep->packetSize ) / ep->packetSize;
+    xfersize = ep->remaining;
+  }
+
+  USB_DINEPS[ ep->num ].TSIZ =
+                ( USB_DINEPS[ ep->num ].TSIZ                &
+                  ~DIEP_XFERSIZE_PKTCNT_MASK                  ) |
+                ( xfersize << _USB_DIEP_TSIZ_XFERSIZE_SHIFT   ) |
+                ( pktcnt   << _USB_DIEP_TSIZ_PKTCNT_SHIFT     );
+
+  USB_DINEPS[ ep->num ].DMAADDR = (uint32_t)ep->buf;
+  USB_DINEPS[ ep->num ].CTL =
+                  ( USB_DINEPS[ ep->num ].CTL & ~DEPCTL_WO_BITMASK ) |
+                  USB_DIEP_CTL_CNAK                                  |
+                  USB_DIEP_CTL_EPENA;
+}
+
+__STATIC_INLINE void USBDHAL_StartEpOut( USBD_Ep_TypeDef *ep )
+{
+  uint32_t pktcnt, xfersize;
+
+  if ( ep->remaining == 0 )     /* ZLP ? */
+  {
+    pktcnt = 1;
+    xfersize = ep->packetSize;
+  }
+  else
+  {
+    pktcnt = ( ep->remaining - 1 + ep->packetSize ) / ep->packetSize;
+    xfersize = pktcnt * ep->packetSize;
+  }
+
+  USB_DOUTEPS[ ep->num ].TSIZ =
+                  ( USB_DOUTEPS[ ep->num ].TSIZ               &
+                    ~DOEP_XFERSIZE_PKTCNT_MASK                  ) |
+                  ( xfersize << _USB_DOEP_TSIZ_XFERSIZE_SHIFT   ) |
+                  ( pktcnt   << _USB_DOEP_TSIZ_PKTCNT_SHIFT     );
+
+  ep->hwXferSize = xfersize;
+  USB_DOUTEPS[ ep->num ].DMAADDR = (uint32_t)ep->buf;
+  USB_DOUTEPS[ ep->num ].CTL =
+                          ( USB_DOUTEPS[ ep->num ].CTL  &
+                            ~DEPCTL_WO_BITMASK             ) |
+                          USB_DOEP_CTL_CNAK                  |
+                          USB_DOEP_CTL_EPENA;
+}
+
+__STATIC_INLINE USB_Status_TypeDef USBDHAL_UnStallEp( USBD_Ep_TypeDef *ep )
+{
+  uint32_t depctl, eptype;
+  USB_Status_TypeDef retVal = USB_STATUS_REQ_ERR;
+
+  if ( ep->in == true )
+  {
+    depctl = USB_DINEPS[ ep->num ].CTL & ~DEPCTL_WO_BITMASK;
+    eptype = depctl & _USB_DIEP_CTL_EPTYPE_MASK;
+
+    if (( eptype == DIEPCTL_EPTYPE_INTR ) || ( eptype == DIEPCTL_EPTYPE_BULK ))
+    {
+      depctl |=  USB_DIEP_CTL_SETD0PIDEF;
+      depctl &= ~USB_DIEP_CTL_STALL;
+      USB_DINEPS[ ep->num ].CTL = depctl;
+      retVal = USB_STATUS_OK;
+    }
+  }
+  else
+  {
+    depctl = USB_DOUTEPS[ ep->num ].CTL & ~DEPCTL_WO_BITMASK;
+    eptype = depctl & _USB_DOEP_CTL_EPTYPE_MASK;
+
+    if (( eptype == DIEPCTL_EPTYPE_INTR ) || ( eptype == DIEPCTL_EPTYPE_BULK ))
+    {
+      depctl |=  USB_DOEP_CTL_SETD0PIDEF;
+      depctl &= ~USB_DOEP_CTL_STALL;
+      USB_DOUTEPS[ ep->num ].CTL = depctl;
+      retVal = USB_STATUS_OK;
+    }
+  }
+
+  return retVal;
+}
+#endif /* defined( USB_DEVICE ) */
+
+#if defined( USB_HOST )
+__STATIC_INLINE void USBHHAL_HCActivate( int hcnum, uint32_t hcchar, bool intep )
+{
+  uint32_t oddframe;
+
+  if ( intep )
+  {
+    oddframe = USB->HFNUM & 1;
+
+    USB->HC[ hcnum ].CHAR =
+                    ( hcchar &
+                      ~( USB_HC_CHAR_CHDIS | _USB_HC_CHAR_ODDFRM_MASK ) ) |
+
+                    /* Schedule INT transfers to start in next frame. */
+                    ( oddframe & 1 ? 0 : USB_HC_CHAR_ODDFRM             ) |
+
+                    USB_HC_CHAR_CHENA;
+  }
+  else
+  {
+    USB->HC[ hcnum ].CHAR = ( hcchar & ~USB_HC_CHAR_CHDIS ) |
+                              USB_HC_CHAR_CHENA;
+  }
+}
+
+__STATIC_INLINE bool USBHHAL_InitializedAndPowered( void )
+{
+  if ( ( USB->ROUTE & USB_ROUTE_PHYPEN ) &&
+       ( USB->HPRT  & USB_HPRT_PRTPWR  )    )
+    return true;
+  return false;
+}
+
+__STATIC_INLINE void USBHHAL_EnableInts( void )
+{
+  /* Disable all interrupts. */
+  USB->GINTMSK = 0;
+
+  /* Clear pending OTG interrupts */
+  USB->GOTGINT = 0xFFFFFFFF;
+
+  /* Clear pending interrupts */
+  USB->GINTSTS = 0xFFFFFFFF;
+
+  USB->GINTMSK = USB_GINTMSK_PRTINTMSK     |
+                 USB_GINTMSK_HCHINTMSK     |
+                 USB_GINTMSK_DISCONNINTMSK;
+}
+
+__STATIC_INLINE uint16_t USBHHAL_GetFrameNum( void )
+{
+  return USB->HFNUM;
+}
+
+__STATIC_INLINE uint32_t USBHHAL_GetHcChar( uint8_t hcnum )
+{
+  return USB->HC[ hcnum ].CHAR;
+}
+
+__STATIC_INLINE uint32_t USBHHAL_GetHcInts( uint8_t hcnum )
+{
+  uint32_t retVal;
+
+  retVal  = USB->HC[ hcnum ].INT;
+  return retVal;
+}
+
+__STATIC_INLINE uint32_t USBHHAL_GetHostChannelInts( void )
+{
+  return USB->HAINT;
+}
+
+__STATIC_INLINE uint8_t USBHHAL_GetPortSpeed( void )
+{
+  return ( USB->HPRT & _USB_HPRT_PRTSPD_MASK ) >> _USB_HPRT_PRTSPD_SHIFT;
+}
+
+__STATIC_INLINE void USBHHAL_PortReset( bool on )
+{
+  if ( on )
+  {
+    DEBUG_USB_INT_LO_PUTCHAR( '+' );
+    USB->HPRT = ( USB->HPRT & ~HPRT_WC_MASK ) | USB_HPRT_PRTRST;
+  }
+  else
+  {
+    DEBUG_USB_INT_LO_PUTCHAR( '-' );
+    USB->HPRT &= ~( HPRT_WC_MASK | USB_HPRT_PRTRST );
+  }
+}
+
+__STATIC_INLINE void USBHHAL_PortResume( bool on )
+{
+  if ( on )
+  {
+    USB->HPRT = ( USB->HPRT & ~( HPRT_WC_MASK | USB_HPRT_PRTSUSP ) ) |
+                USB_HPRT_PRTRES;
+  }
+  else
+  {
+    USB->HPRT &= ~( HPRT_WC_MASK | USB_HPRT_PRTSUSP | USB_HPRT_PRTRES );
+  }
+}
+
+__STATIC_INLINE void USBHHAL_PortSuspend( void )
+{
+  USB->HPRT = ( USB->HPRT & ~HPRT_WC_MASK ) | USB_HPRT_PRTSUSP;
+}
+
+__STATIC_INLINE void USBHHAL_VbusOn( bool on )
+{
+  if ( on )
+  {
+    USB->HPRT = ( USB->HPRT & ~HPRT_WC_MASK ) | USB_HPRT_PRTPWR;
+    DEBUG_USB_INT_LO_PUTCHAR( '/' );
+  }
+  else
+  {
+    USB->HPRT &= ~( HPRT_WC_MASK | USB_HPRT_PRTPWR );
+    DEBUG_USB_INT_LO_PUTCHAR( '\\' );
+  }
+}
+#endif /* defined( USB_HOST ) */
+
+/** @endcond */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* defined( USB_DEVICE ) || defined( USB_HOST ) */
+#endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */
+#endif /* __EM_USBHAL_H */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_Silicon_Labs/inc/em_usbtypes.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_Silicon_Labs/inc/em_usbtypes.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,230 @@
+/***************************************************************************//**
+ * @file em_usbtypes.h
+ * @brief USB protocol stack library, internal type definitions.
+ * @version 3.20.14
+ *******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+
+#ifndef __EM_USBTYPES_H
+#define __EM_USBTYPES_H
+
+#include "em_device.h"
+#if defined( USB_PRESENT ) && ( USB_COUNT == 1 )
+#include "em_usb.h"
+#if defined( USB_DEVICE ) || defined( USB_HOST )
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
+
+/* Limits imposed by the USB peripheral */
+#define NP_RX_QUE_DEPTH       8
+#define HP_RX_QUE_DEPTH       8
+#define MAX_XFER_LEN          524287L         /* 2^19 - 1 bytes             */
+#define MAX_PACKETS_PR_XFER   1023            /* 2^10 - 1 packets           */
+#if defined( _USB_DIEPTXF6_MASK )
+  #define MAX_NUM_TX_FIFOS      6             /* In addition to EP0 Tx FIFO */
+  #define MAX_NUM_IN_EPS        6             /* In addition to EP0         */
+  #define MAX_NUM_OUT_EPS       6             /* In addition to EP0         */
+  #define MAX_DEVICE_FIFO_SIZE_INWORDS 512U
+#else
+  #define MAX_NUM_TX_FIFOS      3             /* In addition to EP0 Tx FIFO */
+  #define MAX_NUM_IN_EPS        3             /* In addition to EP0         */
+  #define MAX_NUM_OUT_EPS       3             /* In addition to EP0         */
+  #define MAX_DEVICE_FIFO_SIZE_INWORDS 384U
+#endif
+#define MIN_EP_FIFO_SIZE_INWORDS  16U         /* Unit is words (32bit)      */
+#define MIN_EP_FIFO_SIZE_INBYTES  64U         /* Unit is bytes (8bit)       */
+
+/* For MCU's without USB host capability. */
+#if !defined( USB_ROUTE_VBUSENPEN )
+#define USB_VBUS_SWITCH_NOT_PRESENT
+#endif
+
+/* Limit imposed by the USB standard */
+#define MAX_USB_EP_NUM      15
+
+#if defined( USB_DEVICE )
+  /* Check power saving modes. */
+  #ifndef USB_PWRSAVE_MODE
+    /* Default powersave-mode is OFF. */
+    #define USB_PWRSAVE_MODE  USB_PWRSAVE_MODE_OFF
+  #else
+    #if ( USB_PWRSAVE_MODE                                               &  \
+          ~( USB_PWRSAVE_MODE_ONSUSPEND | USB_PWRSAVE_MODE_ONVBUSOFF |      \
+             USB_PWRSAVE_MODE_ENTEREM2                                 )    )
+      #error "Illegal USB powersave mode."
+    #endif
+  #endif /* ifndef USB_PWRSAVE_MODE */
+
+  /* Check power saving low frequency clock selection. */
+  #ifndef USB_USBC_32kHz_CLK
+    /* Default clock source is LFXO. */
+    #define USB_USBC_32kHz_CLK USB_USBC_32kHz_CLK_LFXO
+  #else
+    #if ( ( USB_USBC_32kHz_CLK != USB_USBC_32kHz_CLK_LFXO  ) &&  \
+          ( USB_USBC_32kHz_CLK != USB_USBC_32kHz_CLK_LFRCO )     )
+      #error "Illegal USB 32kHz powersave clock selection."
+    #endif
+  #endif /* ifndef USB_USBC_32kHz_CLK */
+#endif /* defined( USB_DEVICE ) */
+
+#if defined( USB_HOST )
+  /* Check VBUS overcurrent definitions. */
+  #ifndef USB_VBUSOVRCUR_PORT
+    #define USB_VBUSOVRCUR_PORT       gpioPortE
+    #define USB_VBUSOVRCUR_PIN        2
+    #define USB_VBUSOVRCUR_POLARITY   USB_VBUSOVRCUR_POLARITY_LOW
+  #endif
+#endif
+
+/* Developer mode debugging macro's */
+#if defined( DEBUG_USB_INT_LO )
+  #define DEBUG_USB_INT_LO_PUTS( s )    USB_PUTS( s )
+  #define DEBUG_USB_INT_LO_PUTCHAR( c ) USB_PUTCHAR( c )
+#else
+  #define DEBUG_USB_INT_LO_PUTS( s )
+  #define DEBUG_USB_INT_LO_PUTCHAR( c )
+#endif /* defined( DEBUG_USB_INT_LO ) */
+
+#if defined( DEBUG_USB_INT_HI )
+  #define DEBUG_USB_INT_HI_PUTS( s )    USB_PUTS( s )
+  #define DEBUG_USB_INT_HI_PUTCHAR( c ) USB_PUTCHAR( c )
+#else
+  #define DEBUG_USB_INT_HI_PUTS( s )
+  #define DEBUG_USB_INT_HI_PUTCHAR( c )
+#endif /* defined( DEBUG_USB_INT_HI ) */
+
+#if defined( USB_HOST )
+  #if defined( NUM_APP_TIMERS )
+    #define HOSTPORT_TIMER_INDEX  (NUM_APP_TIMERS)
+  #else
+    #define HOSTPORT_TIMER_INDEX  (0)
+  #endif
+  #define HOSTCH_TIMER_INDEX      (HOSTPORT_TIMER_INDEX + 1 )
+#endif
+
+/* Macros for selecting a hardware timer. */
+#define USB_TIMER0 0
+#define USB_TIMER1 1
+#define USB_TIMER2 2
+#define USB_TIMER3 3
+
+#if defined( USB_HOST )
+#define HCS_NAK       0x01
+#define HCS_STALL     0x02
+#define HCS_XACT      0x04
+#define HCS_TGLERR    0x08
+#define HCS_BABBLE    0x10
+#define HCS_TIMEOUT   0x20
+#define HCS_COMPLETED 0x40
+#define HCS_RETRY     0x80
+#endif
+
+#if defined( USB_DEVICE )
+typedef enum
+{
+  D_EP_IDLE          = 0,
+  D_EP_TRANSMITTING  = 1,
+  D_EP_RECEIVING     = 2,
+  D_EP0_IN_STATUS    = 3,
+  D_EP0_OUT_STATUS   = 4
+} USBD_EpState_TypeDef;
+
+typedef struct
+{
+  bool                        in;
+  uint8_t                     zlp;
+  uint8_t                     num;
+  uint8_t                     addr;
+  uint8_t                     type;
+  uint8_t                     txFifoNum;
+  uint8_t                     *buf;
+  uint16_t                    packetSize;
+  uint16_t                    mask;
+  uint32_t                    remaining;
+  uint32_t                    xferred;
+  uint32_t                    hwXferSize;
+  uint32_t                    fifoSize;
+  USBD_EpState_TypeDef        state;
+  USB_XferCompleteCb_TypeDef  xferCompleteCb;
+} USBD_Ep_TypeDef;
+
+typedef struct
+{
+  USB_Setup_TypeDef                     *setup;
+  USB_Setup_TypeDef                     setupPkt[3];
+  uint8_t                               configurationValue; /* Must be DWORD aligned */
+  bool                                  remoteWakeupEnabled;
+  uint8_t                               numberOfStrings;
+  uint8_t                               numberOfInterfaces;
+  USBD_State_TypeDef                    state;
+  USBD_State_TypeDef                    savedState;
+  USBD_State_TypeDef                    lastState;
+  const USB_DeviceDescriptor_TypeDef    *deviceDescriptor;
+  const USB_ConfigurationDescriptor_TypeDef *configDescriptor;
+  const void * const                    *stringDescriptors;
+  const USBD_Callbacks_TypeDef          *callbacks;
+  USBD_Ep_TypeDef                       ep[ NUM_EP_USED + 1 ];
+  uint8_t                               inEpAddr2EpIndex[  MAX_USB_EP_NUM + 1 ];
+  uint8_t                               outEpAddr2EpIndex[ MAX_USB_EP_NUM + 1 ];
+  uint32_t                              ep0MpsCode;
+} USBD_Device_TypeDef;
+#endif /* defined( USB_DEVICE ) */
+
+#if defined( USB_HOST )
+typedef enum
+{
+  H_PORT_DISCONNECTED         = 0,
+  H_PORT_CONNECTED_DEBOUNCING = 1,
+  H_PORT_CONNECTED_RESETTING  = 2,
+  H_PORT_CONNECTED            = 3,
+  H_PORT_OVERCURRENT          = 4
+} USBH_PortState_TypeDef;
+
+typedef struct
+{
+  int   debounceTime;
+  int   resetTime;
+} USBH_AttachTiming_TypeDef;
+
+typedef struct
+{
+  uint8_t                 *buf;
+  int                     errorCnt;
+  uint32_t                remaining;
+  uint32_t                xferred;
+  uint32_t                hwXferSize;
+  uint8_t                 status;
+  bool                    idle;
+  USBH_Ep_TypeDef         *ep;
+} USBH_Hc_TypeDef;
+#endif /* defined( USB_HOST ) */
+
+/** @endcond */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* defined( USB_DEVICE ) || defined( USB_HOST ) */
+#endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */
+#endif /* __EM_USBTYPES_H */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_Silicon_Labs/inc/usbconfig.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_Silicon_Labs/inc/usbconfig.h	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,88 @@
+/***************************************************************************//**
+ * @file usbconfig.h
+ * @brief USB protocol stack library, application supplied configuration options.
+ * @version 3.20.12
+ *******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+
+#ifndef __USBCONFIG_H
+#define __USBCONFIG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Compile stack for device mode. */
+#define USB_DEVICE
+
+/* Maximum number of endpoint used, EP0 excluded. If you change this, you must
+   also change USBEndpoints_EFM32.h to match. */
+#define NUM_EP_USED 6
+
+/* Power management modes. The following can be or'd toghether. See comments in
+   em_usbd.c under "Energy-saving modes" for more details.
+
+   USB_PWRSAVE_MODE_ONSUSPEND  Set USB peripheral in low power mode on suspend
+
+   USB_PWRSAVE_MODE_ONVBUSOFF  Set USB peripheral in low power mode when not
+   attached to a host. While this mode assumes that the internal voltage regulator
+   is used and that the VREGI pin of the chip is connected to VBUS it should
+   be safe to use given that VREGOSEN is always enabled. If you disable VREGOSEN
+   you must turn this off.
+
+   USB_PWRSAVE_MODE_ENTEREM2  Enter EM2 when USB peripheral is in low power mode.
+   On Mbed this allows the sleep() and deepsleep() calls to enter EM2, but
+   does not automatically enter any sleep states. Entering EM1 is always allowed.
+
+   Note for Happy Gecko, errata USB_E111: Entering EM2 when both the system clock
+   (HFCLK) and the USB core clock (USBCCLK) is running on USHFRCO will result in
+   a lock-up.
+*/
+#define USB_PWRSAVE_MODE  (USB_PWRSAVE_MODE_ONSUSPEND|USB_PWRSAVE_MODE_ONVBUSOFF|USB_PWRSAVE_MODE_ENTEREM2)
+
+/* Use dynamic memory to allocate rx/tx buffers in the HAL. Saves memory
+   as buffers are only allocated for used endpoints. The system malloc
+   must return memory that is aligned by 4.
+
+   Note: if you disable this, using isochronous endpoints with packet
+   sizes that are larger than the maximum for other EP types (64) will
+   not work. */
+#define USB_USE_DYNAMIC_MEMORY
+
+/* When the USB peripheral is set in low power mode, it must be clocked by a 32kHz
+   clock. Both LFXO and LFRCO can be used, but only LFXO guarantee USB specification
+   compliance. */
+#define USB_USBC_32kHz_CLK   USB_USBC_32kHz_CLK_LFXO
+
+/* Uncomment to get some debugging information. Default value for USER_PUTCHAR
+   should work for SiLabs Gecko boards. Printf requires a working retarget
+   implementation for write(). */
+//#define DEBUG_USB_API
+//#define USB_USE_PRINTF
+//#define USER_PUTCHAR   ITM_SendChar
+//#define DEBUG_USB_INT_HI
+//#define DEBUG_USB_INT_LO
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __USBCONFIG_H */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_Silicon_Labs/src/em_usbd.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_Silicon_Labs/src/em_usbd.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,1438 @@
+/**************************************************************************//**
+ * @file em_usbd.c
+ * @brief USB protocol stack library, device API.
+ * @version 3.20.14
+ ******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+
+#include "em_device.h"
+#if defined( USB_PRESENT ) && ( USB_COUNT == 1 )
+#include "em_usb.h"
+#if defined( USB_DEVICE )
+
+#include "em_cmu.h"
+#include "em_usbtypes.h"
+#include "em_usbhal.h"
+#include "em_usbd.h"
+
+/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
+
+static USBD_Device_TypeDef device;
+USBD_Device_TypeDef *dev = &device;
+
+static uint32_t totalRxFifoSize = 0, totalTxFifoSize = 0;
+static int numEps = 0;
+static int txFifoNum = 1;
+
+static void USBD_ResetEndpoints(void);
+extern USB_Status_TypeDef USBDHAL_ReconfigureFifos( uint32_t totalRxFifoSize,
+                                                    uint32_t totalTxFifoSize );
+#ifndef __MBED__
+static const char *stateNames[] =
+{
+  [ USBD_STATE_NONE       ] = "NONE      ",
+  [ USBD_STATE_ATTACHED   ] = "ATTACHED  ",
+  [ USBD_STATE_POWERED    ] = "POWERED   ",
+  [ USBD_STATE_DEFAULT    ] = "DEFAULT   ",
+  [ USBD_STATE_ADDRESSED  ] = "ADDRESSED ",
+  [ USBD_STATE_CONFIGURED ] = "CONFIGURED",
+  [ USBD_STATE_SUSPENDED  ] = "SUSPENDED ",
+  [ USBD_STATE_LASTMARKER ] = "UNDEFINED "
+};
+#endif
+
+/** @endcond */
+
+/***************************************************************************//**
+ * @brief
+ *   Abort all pending transfers.
+ *
+ * @details
+ *   Aborts transfers for all endpoints currently in use. Pending
+ *   transfers on the default endpoint (EP0) are not aborted.
+ ******************************************************************************/
+void USBD_AbortAllTransfers( void )
+{
+  INT_Disable();
+  USBDHAL_AbortAllTransfers( USB_STATUS_EP_ABORTED );
+  INT_Enable();
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Abort a pending transfer on a specific endpoint.
+ *
+ * @param[in] epAddr
+ *   The address of the endpoint to abort.
+ ******************************************************************************/
+int USBD_AbortTransfer( int epAddr )
+{
+  USB_XferCompleteCb_TypeDef callback;
+  USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
+
+  if ( ep == NULL )
+  {
+    DEBUG_USB_API_PUTS( "\nUSBD_AbortTransfer(), Illegal endpoint" );
+    EFM_ASSERT( false );
+    return USB_STATUS_ILLEGAL;
+  }
+
+  if ( ep->num == 0 )
+  {
+    DEBUG_USB_API_PUTS( "\nUSBD_AbortTransfer(), Illegal endpoint" );
+    EFM_ASSERT( false );
+    return USB_STATUS_ILLEGAL;
+  }
+
+  INT_Disable();
+  if ( ep->state == D_EP_IDLE )
+  {
+    INT_Enable();
+    return USB_STATUS_OK;
+  }
+
+  USBD_AbortEp( ep );
+
+  ep->state = D_EP_IDLE;
+  if ( ep->xferCompleteCb )
+  {
+    callback = ep->xferCompleteCb;
+    ep->xferCompleteCb = NULL;
+
+    if ( ( dev->lastState == USBD_STATE_CONFIGURED ) &&
+         ( dev->state     == USBD_STATE_ADDRESSED  )    )
+    {
+      USBDHAL_DeactivateEp( ep );
+    }
+
+    DEBUG_TRACE_ABORT( USB_STATUS_EP_ABORTED );
+    callback( USB_STATUS_EP_ABORTED, ep->xferred, ep->remaining );
+  }
+
+  INT_Enable();
+  return USB_STATUS_OK;
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Start USB device operation.
+ *
+ * @details
+ *   Device operation is started by connecting a pullup resistor on the
+ *   appropriate USB data line.
+ ******************************************************************************/
+void USBD_Connect( void )
+{
+  INT_Disable();
+  USBDHAL_Connect();
+  INT_Enable();
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Stop USB device operation.
+ *
+ * @details
+ *   Device operation is stopped by disconnecting the pullup resistor from the
+ *   appropriate USB data line. Often referred to as a "soft" disconnect.
+ ******************************************************************************/
+void USBD_Disconnect( void )
+{
+  INT_Disable();
+  USBDHAL_Disconnect();
+  INT_Enable();
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Check if an endpoint is busy doing a transfer.
+ *
+ * @param[in] epAddr
+ *   The address of the endpoint to check.
+ *
+ * @return
+ *   True if endpoint is busy, false otherwise.
+ ******************************************************************************/
+bool USBD_EpIsBusy( int epAddr )
+{
+  USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
+
+  if ( ep == NULL )
+  {
+    DEBUG_USB_API_PUTS( "\nUSBD_EpIsBusy(), Illegal endpoint" );
+    EFM_ASSERT( false );
+    return USB_STATUS_ILLEGAL;
+  }
+
+  if ( ep->state == D_EP_IDLE )
+    return false;
+
+  return true;
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Get current USB device state.
+ *
+ * @return
+ *   Device USB state. See @ref USBD_State_TypeDef.
+ ******************************************************************************/
+USBD_State_TypeDef USBD_GetUsbState( void )
+{
+  return dev->state;
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Get a string naming a device USB state.
+ *
+ * @param[in] state
+ *   Device USB state. See @ref USBD_State_TypeDef.
+ *
+ * @return
+ *   State name string pointer.
+ ******************************************************************************/
+const char *USBD_GetUsbStateName( USBD_State_TypeDef state )
+{
+  if ( state > USBD_STATE_LASTMARKER )
+    state = USBD_STATE_LASTMARKER;
+
+#ifndef __MBED__
+  return stateNames[ state ];
+#else
+  return NULL;
+#endif
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Initializes USB device hardware and internal protocol stack data structures,
+ *   then connects the data-line (D+ or D-) pullup resistor to signal host that
+ *   enumeration can begin.
+ *
+ * @note
+ *   You may later use @ref USBD_Disconnect() and @ref USBD_Connect() to force
+ *   reenumeration.
+ *
+ * @param[in] p
+ *   Pointer to device initialization struct. See @ref USBD_Init_TypeDef.
+ *
+ * @return
+ *   @ref USB_STATUS_OK on success, else an appropriate error code.
+ ******************************************************************************/
+int USBD_Init( const USBD_Init_TypeDef *p )
+{
+  USBD_Ep_TypeDef *ep;
+
+#if !defined( USB_CORECLK_HFRCO ) || !defined( CMU_OSCENCMD_USHFRCOEN )
+  /* Devices supporting crystal-less USB can use HFRCO or HFXO as core clock. */
+  /* All other devices must use HFXO as core clock.                           */
+  if ( CMU_ClockSelectGet( cmuClock_HF ) != cmuSelect_HFXO )
+  {
+    CMU_ClockSelectSet( cmuClock_HF, cmuSelect_HFXO );
+  }
+#endif
+
+#if !defined( CMU_OSCENCMD_USHFRCOEN )
+#if ( USB_USBC_32kHz_CLK == USB_USBC_32kHz_CLK_LFXO )
+  CMU_OscillatorEnable(cmuOsc_LFXO, true, false);
+#else
+  CMU_OscillatorEnable(cmuOsc_LFRCO, true, false);
+#endif
+
+#else
+  CMU_ClockEnable(cmuClock_CORELE, true);
+  /* LFC clock is needed to detect USB suspend when LEMIDLE is activated. */
+#if ( USB_USBC_32kHz_CLK == USB_USBC_32kHz_CLK_LFXO )
+  CMU_ClockSelectSet(cmuClock_LFC, cmuSelect_LFXO);
+#else
+  CMU_ClockSelectSet(cmuClock_LFC, cmuSelect_LFRCO);
+#endif
+  CMU_ClockEnable(cmuClock_USBLE, true);
+#endif
+
+  USBTIMER_Init();
+
+  memset( dev, 0, sizeof( USBD_Device_TypeDef ) );
+
+  dev->setup                = dev->setupPkt;
+  dev->state                = USBD_STATE_LASTMARKER;
+  dev->savedState           = USBD_STATE_NONE;
+  dev->lastState            = USBD_STATE_NONE;
+  dev->callbacks            = p->callbacks;
+  dev->remoteWakeupEnabled  = false;
+
+  /* Initialize EP0 */
+
+  ep                 = &dev->ep[ 0 ];
+  ep->in             = false;
+  ep->buf            = NULL;
+  ep->num            = 0;
+  ep->mask           = 1;
+  ep->addr           = 0;
+  ep->type           = USB_EPTYPE_CTRL;
+  ep->txFifoNum      = 0;
+
+  /* FIXME! */
+  ep->packetSize     = 64;
+  dev->ep0MpsCode = _USB_DOEP0CTL_MPS_64B;
+
+  ep->remaining      = 0;
+  ep->xferred        = 0;
+  ep->state          = D_EP_IDLE;
+  ep->xferCompleteCb = NULL;
+  ep->fifoSize       = ep->packetSize / 4;
+
+  totalTxFifoSize = ep->fifoSize * p->bufferingMultiplier[ 0 ];
+  totalRxFifoSize = (ep->fifoSize + 1) * p->bufferingMultiplier[ 0 ];
+
+  /* Rx-FIFO size: SETUP packets : 4*n + 6    n=#CTRL EP's
+   *               GOTNAK        : 1
+   *               Status info   : 2*n        n=#OUT EP's (EP0 included) in HW
+   */
+  totalRxFifoSize += 10 + 1 + ( 2 * (MAX_NUM_OUT_EPS + 1) );
+
+  INT_Disable();
+
+  /* Enable USB clock */
+  CMU->HFCORECLKEN0 |= CMU_HFCORECLKEN0_USB | CMU_HFCORECLKEN0_USBC;
+
+#if defined( CMU_OSCENCMD_USHFRCOEN )
+  CMU->USHFRCOCONF = CMU_USHFRCOCONF_BAND_48MHZ;
+  CMU_ClockSelectSet( cmuClock_USBC, cmuSelect_USHFRCO );
+
+  /* Enable USHFRCO Clock Recovery mode. */
+  CMU->USBCRCTRL |= CMU_USBCRCTRL_EN;
+
+  /* Turn on Low Energy Mode (LEM) features. */
+  USB->CTRL = USB_CTRL_LEMOSCCTRL_GATE
+              | USB_CTRL_LEMIDLEEN
+              | USB_CTRL_LEMPHYCTRL;
+#else
+  CMU_ClockSelectSet( cmuClock_USBC, cmuSelect_HFCLK );
+#endif
+
+  USBHAL_DisableGlobalInt();
+
+  if ( USBDHAL_CoreInit( totalRxFifoSize, totalTxFifoSize ) == USB_STATUS_OK )
+  {
+    USBDHAL_EnableUsbResetAndSuspendInt();
+    USBHAL_EnableGlobalInt();
+    NVIC_ClearPendingIRQ( USB_IRQn );
+    NVIC_EnableIRQ( USB_IRQn );
+  }
+  else
+  {
+    INT_Enable();
+    DEBUG_USB_API_PUTS( "\nUSBD_Init(), FIFO setup error" );
+    EFM_ASSERT( false );
+    return USB_STATUS_ILLEGAL;
+  }
+
+#if ( USB_PWRSAVE_MODE & USB_PWRSAVE_MODE_ONVBUSOFF )
+  if ( USBHAL_VbusIsOn() )
+  {
+    USBD_SetUsbState( USBD_STATE_POWERED );
+  }
+  else
+#endif
+  {
+    USBD_SetUsbState( USBD_STATE_NONE );
+  }
+
+  INT_Enable();
+  return USB_STATUS_OK;
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Start a read (OUT) transfer on an endpoint.
+ *
+ * @note
+ *   The transfer buffer length must be a multiple of 4 bytes in length and
+ *   WORD (4 byte) aligned. When allocating the buffer, round buffer length up.
+ *   If it is possible that the host will send more data than your device
+ *   expects, round buffer size up to the next multiple of maxpacket size.
+ *
+ * @param[in] epAddr
+ *   Endpoint address.
+ *
+ * @param[in] data
+ *   Pointer to transfer data buffer.
+ *
+ * @param[in] byteCount
+ *   Transfer length.
+ *
+ * @param[in] callback
+ *   Function to be called on transfer completion. Supply NULL if no callback
+ *   is needed. See @ref USB_XferCompleteCb_TypeDef.
+ *
+ * @return
+ *   @ref USB_STATUS_OK on success, else an appropriate error code.
+ ******************************************************************************/
+int USBD_Read( int epAddr, void *data, int byteCount,
+               USB_XferCompleteCb_TypeDef callback )
+{
+  USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
+
+  USB_PRINTF("USBD: Read addr %x, data %p, size %d, cb 0x%lx\n",
+             epAddr, data, byteCount, (uint32_t)callback);
+
+  if ( ep == NULL )
+  {
+    DEBUG_USB_API_PUTS( "\nUSBD_Read(), Illegal endpoint" );
+    EFM_ASSERT( false );
+    return USB_STATUS_ILLEGAL;
+  }
+
+  if ( (   byteCount > MAX_XFER_LEN                           ) ||
+       ( ( byteCount / ep->packetSize ) > MAX_PACKETS_PR_XFER )    )
+  {
+    DEBUG_USB_API_PUTS( "\nUSBD_Read(), Illegal transfer size" );
+    EFM_ASSERT( false );
+    return USB_STATUS_ILLEGAL;
+  }
+
+  if ( (uint32_t)data & 3 )
+  {
+    DEBUG_USB_API_PUTS( "\nUSBD_Read(), Misaligned data buffer" );
+    EFM_ASSERT( false );
+    return USB_STATUS_ILLEGAL;
+  }
+
+  INT_Disable();
+  if ( USBDHAL_EpIsStalled( ep ) )
+  {
+    INT_Enable();
+    DEBUG_USB_API_PUTS( "\nUSBD_Read(), Endpoint is halted" );
+    return USB_STATUS_EP_STALLED;
+  }
+
+  if ( ep->state != D_EP_IDLE )
+  {
+    INT_Enable();
+    DEBUG_USB_API_PUTS( "\nUSBD_Read(), Endpoint is busy" );
+    return USB_STATUS_EP_BUSY;
+  }
+
+  if ( ( ep->num > 0 ) && ( USBD_GetUsbState() != USBD_STATE_CONFIGURED ) )
+  {
+    INT_Enable();
+    DEBUG_USB_API_PUTS( "\nUSBD_Read(), Device not configured" );
+    return USB_STATUS_DEVICE_UNCONFIGURED;
+  }
+
+  ep->buf       = (uint8_t*)data;
+  ep->remaining = byteCount;
+  ep->xferred   = 0;
+
+  if ( ep->num == 0 )
+  {
+    ep->in = false;
+  }
+  else if ( ep->in != false )
+  {
+    INT_Enable();
+    DEBUG_USB_API_PUTS( "\nUSBD_Read(), Illegal EP direction" );
+    EFM_ASSERT( false );
+    return USB_STATUS_ILLEGAL;
+  }
+
+  ep->state          = D_EP_RECEIVING;
+  ep->xferCompleteCb = callback;
+
+  USBD_ArmEp( ep );
+  INT_Enable();
+  return USB_STATUS_OK;
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Perform a remote wakeup signalling sequence.
+ *
+ * @note
+ *   It is the responsibility of the application to ensure that remote wakeup
+ *   is not attempted before the device has been suspended for at least 5
+ *   miliseconds. This function should not be called from within an interrupt
+ *   handler.
+ *
+ * @return
+ *   @ref USB_STATUS_OK on success, else an appropriate error code.
+ ******************************************************************************/
+int USBD_RemoteWakeup( void )
+{
+  INT_Disable();
+
+  if ( ( dev->state != USBD_STATE_SUSPENDED ) ||
+       ( dev->remoteWakeupEnabled == false  )    )
+  {
+    INT_Enable();
+    DEBUG_USB_API_PUTS( "\nUSBD_RemoteWakeup(), Illegal remote wakeup" );
+    return USB_STATUS_ILLEGAL;
+  }
+
+  USBDHAL_SetRemoteWakeup();
+  INT_Enable();
+  USBTIMER_DelayMs( 10 );
+  INT_Disable();
+  USBDHAL_ClearRemoteWakeup();
+  INT_Enable();
+  return USB_STATUS_OK;
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Check if it is ok to enter energy mode EM2.
+ *
+ * @note
+ *   Before entering EM2 both the USB hardware and the USB stack must be in a
+ *   certain state, this function checks if all conditions for entering EM2
+ *   is met.
+ *   Refer to the @ref usb_device_powersave section for more information.
+ *
+ * @return
+ *   True if ok to enter EM2, false otherwise.
+ ******************************************************************************/
+bool USBD_SafeToEnterEM2( void )
+{
+#if ( USB_PWRSAVE_MODE )
+  return USBD_poweredDown ? true : false;
+#else
+  return false;
+#endif
+}
+
+/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
+
+void USBD_SetUsbState( USBD_State_TypeDef newState )
+{
+  USBD_State_TypeDef currentState;
+
+  currentState = dev->state;
+  if ( newState == USBD_STATE_SUSPENDED )
+  {
+    dev->savedState = currentState;
+  }
+
+  dev->lastState = dev->state;
+  dev->state = newState;
+
+  if ( ( dev->callbacks->usbStateChange ) &&
+       ( currentState != newState       )    )
+  {
+    /* When we transition to a state "lower" than CONFIGURED
+     * we must reset the endpoint data
+     */
+    if ( (dev->lastState == USBD_STATE_CONFIGURED ||
+          dev->lastState == USBD_STATE_SUSPENDED ) &&
+         dev->state < USBD_STATE_CONFIGURED )
+    {
+      USBD_ResetEndpoints();
+    }
+
+    dev->callbacks->usbStateChange( currentState, newState );
+  }
+}
+
+/** @endcond */
+
+/***************************************************************************//**
+ * @brief
+ *   Set an endpoint in the stalled (halted) state.
+ *
+ * @param[in] epAddr
+ *   The address of the endpoint to stall.
+ *
+ * @return
+ *   @ref USB_STATUS_OK on success, else an appropriate error code.
+ ******************************************************************************/
+int USBD_StallEp( int epAddr )
+{
+  USB_Status_TypeDef retVal;
+  USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
+
+  if ( ep == NULL )
+  {
+    DEBUG_USB_API_PUTS( "\nUSBD_StallEp(), Illegal request" );
+    EFM_ASSERT( false );
+    return USB_STATUS_ILLEGAL;
+  }
+
+  if ( ep->num == 0 )
+  {
+    DEBUG_USB_API_PUTS( "\nUSBD_StallEp(), Illegal endpoint" );
+    EFM_ASSERT( false );
+    return USB_STATUS_ILLEGAL;
+  }
+
+  INT_Disable();
+  retVal = USBDHAL_StallEp( ep );
+  INT_Enable();
+
+  if ( retVal != USB_STATUS_OK )
+  {
+    retVal = USB_STATUS_ILLEGAL;
+  }
+
+  return retVal;
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Stop USB device stack operation.
+ *
+ * @details
+ *   The data-line pullup resistor is turned off, USB interrupts are disabled,
+ *   and finally the USB pins are disabled.
+ ******************************************************************************/
+void USBD_Stop( void )
+{
+  USBD_Disconnect();
+  NVIC_DisableIRQ( USB_IRQn );
+  USBHAL_DisableGlobalInt();
+  USBHAL_DisableUsbInt();
+  USBHAL_DisablePhyPins();
+  USBD_SetUsbState( USBD_STATE_NONE );
+  /* Turn off USB clocks. */
+  CMU->HFCORECLKEN0 &= ~(CMU_HFCORECLKEN0_USB | CMU_HFCORECLKEN0_USBC);
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Reset stall state on a stalled (halted) endpoint.
+ *
+ * @param[in] epAddr
+ *   The address of the endpoint to un-stall.
+ *
+ * @return
+ *   @ref USB_STATUS_OK on success, else an appropriate error code.
+ ******************************************************************************/
+int USBD_UnStallEp( int epAddr )
+{
+  USB_Status_TypeDef retVal;
+  USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
+
+  if ( ep == NULL )
+  {
+    DEBUG_USB_API_PUTS( "\nUSBD_UnStallEp(), Illegal request" );
+    EFM_ASSERT( false );
+    return USB_STATUS_ILLEGAL;
+  }
+
+  if ( ep->num == 0 )
+  {
+    DEBUG_USB_API_PUTS( "\nUSBD_UnStallEp(), Illegal endpoint" );
+    EFM_ASSERT( false );
+    return USB_STATUS_ILLEGAL;
+  }
+
+  INT_Disable();
+  retVal = USBDHAL_UnStallEp( ep );
+  INT_Enable();
+
+  if ( retVal != USB_STATUS_OK )
+  {
+    retVal = USB_STATUS_ILLEGAL;
+  }
+
+  return retVal;
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Start a write (IN) transfer on an endpoint.
+ *
+ * @param[in] epAddr
+ *   Endpoint address.
+ *
+ * @param[in] data
+ *   Pointer to transfer data buffer. This buffer must be WORD (4 byte) aligned.
+ *
+ * @param[in] byteCount
+ *   Transfer length.
+ *
+ * @param[in] callback
+ *   Function to be called on transfer completion. Supply NULL if no callback
+ *   is needed. See @ref USB_XferCompleteCb_TypeDef.
+ *
+ * @return
+ *   @ref USB_STATUS_OK on success, else an appropriate error code.
+ ******************************************************************************/
+int USBD_Write( int epAddr, void *data, int byteCount,
+                USB_XferCompleteCb_TypeDef callback )
+{
+  USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
+
+  USB_PRINTF("USBD: Write addr %x, data %p, size %d, cb 0x%lx\n",
+             epAddr, data, byteCount, (uint32_t)callback);
+
+  if ( ep == NULL )
+  {
+    DEBUG_USB_API_PUTS( "\nUSBD_Write(), Illegal endpoint" );
+    EFM_ASSERT( false );
+    return USB_STATUS_ILLEGAL;
+  }
+
+  if ( (   byteCount > MAX_XFER_LEN                           ) ||
+       ( ( byteCount / ep->packetSize ) > MAX_PACKETS_PR_XFER )    )
+  {
+    DEBUG_USB_API_PUTS( "\nUSBD_Write(), Illegal transfer size" );
+    EFM_ASSERT( false );
+    return USB_STATUS_ILLEGAL;
+  }
+
+  if ( (uint32_t)data & 3 )
+  {
+    DEBUG_USB_API_PUTS( "\nUSBD_Write(), Misaligned data buffer" );
+    EFM_ASSERT( false );
+    return USB_STATUS_ILLEGAL;
+  }
+
+  INT_Disable();
+  if ( USBDHAL_EpIsStalled( ep ) )
+  {
+    INT_Enable();
+    DEBUG_USB_API_PUTS( "\nUSBD_Write(), Endpoint is halted" );
+    return USB_STATUS_EP_STALLED;
+  }
+
+  if ( ep->state != D_EP_IDLE )
+  {
+    INT_Enable();
+    DEBUG_USB_API_PUTS( "\nUSBD_Write(), Endpoint is busy" );
+    return USB_STATUS_EP_BUSY;
+  }
+
+  if ( ( ep->num > 0 ) && ( USBD_GetUsbState() != USBD_STATE_CONFIGURED ) )
+  {
+    INT_Enable();
+    DEBUG_USB_API_PUTS( "\nUSBD_Write(), Device not configured" );
+    return USB_STATUS_DEVICE_UNCONFIGURED;
+  }
+
+  ep->buf       = (uint8_t*)data;
+  ep->remaining = byteCount;
+  ep->xferred   = 0;
+
+  if ( ep->num == 0 )
+  {
+    ep->in = true;
+  }
+  else if ( ep->in != true )
+  {
+    INT_Enable();
+    DEBUG_USB_API_PUTS( "\nUSBD_Write(), Illegal EP direction" );
+    EFM_ASSERT( false );
+    return USB_STATUS_ILLEGAL;
+  }
+
+  ep->state          = D_EP_TRANSMITTING;
+  ep->xferCompleteCb = callback;
+
+  USBD_ArmEp( ep );
+  INT_Enable();
+  return USB_STATUS_OK;
+}
+
+int USBD_SetAddress(uint8_t addr)
+{
+  int retVal = USB_STATUS_REQ_ERR;
+
+  if ( dev->state == USBD_STATE_DEFAULT )
+  {
+    if ( addr != 0 )
+    {
+      USBD_SetUsbState( USBD_STATE_ADDRESSED );
+    }
+    USBDHAL_SetAddr( addr );
+    retVal = USB_STATUS_OK;
+  }
+  else if ( dev->state == USBD_STATE_ADDRESSED )
+  {
+    if ( addr == 0 )
+    {
+      USBD_SetUsbState( USBD_STATE_DEFAULT );
+    }
+    USBDHAL_SetAddr( addr );
+    retVal = USB_STATUS_OK;
+  }
+
+  return retVal;
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Query the stall state of an endpoint
+ *
+ * @param[in] epAddr
+ *   The address of the endpoint to query.
+ *
+ * @return
+ *   True if endpoint is stalled, false otherwise
+ ******************************************************************************/
+int USBD_EpIsStalled(int epAddr)
+{
+  USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
+
+  if( !ep )
+  {
+    return false;
+  }
+
+  return USBDHAL_EpIsStalled(ep);
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Reset (remove) all client endpoints
+ *
+ * @details
+ *   Removes client endpoints, and resets the RX/TX fifos. No endpoints
+ *   other than EP0 can be used until added with @ref USBD_AddEndpoint.
+ ******************************************************************************/
+static void USBD_ResetEndpoints(void)
+{
+  USBD_Ep_TypeDef *ep = &dev->ep[0];
+
+  numEps = 0;
+  txFifoNum = 1;
+
+  totalTxFifoSize  = ep->fifoSize * 1;
+  totalRxFifoSize  = (ep->fifoSize + 1) * 1;
+  totalRxFifoSize += 10 + 1 + ( 2 * (MAX_NUM_OUT_EPS + 1) );
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Add a new endpoint
+ *
+ * @param[in] epAddr
+ *   Endpoint address
+ *
+ * @param[in] transferType
+ *   Endpoint type, one of @ref USB_EPTYPE_BULK, @ref USB_EPTYPE_INTR or
+ *   @ref USB_EPTYPE_ISOC.
+ *
+ * @param[in] maxPacketSize
+ *   Maximum packet size of the new endpoint, in bytes
+ *
+ * @param[in] bufferMult
+ *   FIFO buffer size multiplier
+ *
+ * @return
+ *   @ref USB_STATUS_OK on success, else an appropriate error code.
+ ******************************************************************************/
+int USBD_AddEndpoint(int epAddr, int transferType,
+                     int maxPacketSize, int bufferMult)
+{
+  USBD_Ep_TypeDef *ep;
+
+  numEps++;
+
+  ep                 = &dev->ep[ numEps ];
+  ep->in             = ( epAddr & USB_SETUP_DIR_MASK ) != 0;
+  ep->buf            = NULL;
+  ep->addr           = epAddr;
+  ep->num            = ep->addr & USB_EPNUM_MASK;
+  ep->mask           = 1 << ep->num;
+  ep->type           = transferType;
+  ep->packetSize     = maxPacketSize;
+  ep->remaining      = 0;
+  ep->xferred        = 0;
+  ep->state          = D_EP_IDLE;
+  ep->xferCompleteCb = NULL;
+
+  if ( ep->in )
+  {
+    ep->txFifoNum = txFifoNum++;
+    ep->fifoSize = ( ( ep->packetSize + 3 ) / 4 ) * bufferMult;
+    dev->inEpAddr2EpIndex[ ep->num ] = numEps;
+    totalTxFifoSize += ep->fifoSize;
+
+    if ( ep->num > MAX_NUM_IN_EPS )
+    {
+      DEBUG_USB_API_PUTS( "\nUSBD_AddEndpoint(), Illegal IN EP address" );
+      EFM_ASSERT( false );
+      return USB_STATUS_ILLEGAL;
+    }
+  }
+  else
+  {
+    ep->fifoSize = ( ( ( ep->packetSize + 3 ) / 4 ) + 1 ) * bufferMult;
+    dev->outEpAddr2EpIndex[ ep->num ] = numEps;
+    totalRxFifoSize += ep->fifoSize;
+
+    if ( ep->num > MAX_NUM_OUT_EPS )
+    {
+      DEBUG_USB_API_PUTS( "\nUSBD_AddEndpoint(), Illegal OUT EP address" );
+      EFM_ASSERT( false );
+      return USB_STATUS_ILLEGAL;
+    }
+  }
+
+  USB_PRINTF("USBD: Added endpoint %d to slot %d, in %d, addr 0x%x, type %d, ps %d, fifo %ld (total tx %ld, rx %ld)\n",
+             ep->num, numEps, ep->in, ep->addr, ep->type, ep->packetSize, ep->fifoSize,
+             totalTxFifoSize, totalRxFifoSize);
+
+  INT_Disable();
+#if defined( CMU_OSCENCMD_USHFRCOEN )
+  /* Happy Gecko workaround: disable LEM GATE mode if using ISOC endpoints. */
+  if ( transferType == USB_EPTYPE_ISOC )
+  {
+      USB->CTRL = (USB->CTRL & ~_USB_CTRL_LEMOSCCTRL_MASK) | USB_CTRL_LEMOSCCTRL_NONE;
+  }
+#endif
+
+  int ret = USBDHAL_ReconfigureFifos(totalRxFifoSize, totalTxFifoSize);
+  INT_Enable();
+
+  if( ret != USB_STATUS_OK ) {
+    return ret;
+  }
+
+  USBDHAL_ActivateEp(ep, false);
+
+  return USB_STATUS_OK;
+}
+
+
+/***************************************************************************//**
+ * @brief
+ *   Set an endpoint0 in the stalled (halted) state.
+ *
+ * @details
+ *   Temporarily stalls endpoint 0. Used to signal a failure to respond to
+ *   the host's setup packet.
+ ******************************************************************************/
+void USBD_StallEp0()
+{
+    int const epAddr = 0;
+    USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
+    ep->in = true;
+    USBDHAL_StallEp( ep ); /* Stall Ep0 IN */
+    ep->in = false; /* OUT for next SETUP */
+    USBDHAL_StallEp( ep ); /* Stall Ep0 OUT */
+#if !defined( USB_DOEP0INT_STUPPKTRCVD )
+    USBDHAL_ReenableEp0Setup( dev ); /* Prepare for next SETUP pkt. */
+#else
+    USBDHAL_StartEp0Setup( dev );
+#endif
+    ep->state = D_EP_IDLE;
+}
+
+/******** THE REST OF THE FILE IS DOCUMENTATION ONLY !**********************//**
+ * @{
+
+@page usb_device USB device stack library
+
+  The source files for the USB device stack resides in the usb directory
+  and follows the naming convention: em_usbd<em>nnn</em>.c/h.
+
+  @li @ref usb_device_intro
+  @li @ref usb_device_api
+  @li @ref usb_device_conf
+  @li @ref usb_device_powersave
+  @li @ref usb_device_example1
+
+
+@n @section usb_device_intro Introduction
+
+  The USB device protocol stack provides an API which makes it possible to
+  create USB devices with a minimum of effort. The device stack supports control,
+  bulk and interrupt transfers.
+
+  The stack is highly configurable to suit various needs, it does also contain
+  useful debugging features together with several demonstration projects to
+  get you started fast.
+
+  We recommend that you read through this documentation, then proceed to build
+  and test a few example projects before you start designing your own device.
+
+@n @section usb_device_api The device stack API
+
+  This section contains brief descriptions of the functions in the API. You will
+  find detailed information on input and output parameters and return values by
+  clicking on the hyperlinked function names. It is also a good idea to study
+  the code in the USB demonstration projects.
+
+  Your application code must include one header file: @em em_usb.h.
+
+  All functions defined in the API can be called from within interrupt handlers.
+
+  The USB stack use a hardware timer to keep track of time. TIMER0 is the
+  default choice, refer to @ref usb_device_conf for other possibilities.
+  Your application must not use the selected timer.
+
+  <b>Pitfalls:</b>@n
+    The USB peripheral will fill your receive buffers in quantities of WORD's
+    (4 bytes). Transmit and receive buffers must be WORD aligned, in
+    addition when allocating storage for receive buffers, round size up to
+    next WORD boundary. If it is possible that the host will send more data
+    than your device expects, round buffer size up to the next multiple of
+    maxpacket size for the relevant endpoint to avoid data corruption.
+
+    Transmit buffers passed to @htmlonly USBD_Write() @endhtmlonly must be
+    statically allocated because @htmlonly USBD_Write() @endhtmlonly only
+    initiates the transfer. When the host decide to actually perform the
+    transfer, your data must be available.
+
+  @n @ref USBD_Init() @n
+    This function is called to register your device and all its properties with
+    the device stack. The application must fill in a @ref USBD_Init_TypeDef
+    structure prior to calling. Refer to @ref DeviceInitCallbacks for the
+    optional callback functions defined within this structure. When this
+    function has been called your device is ready to be enumerated by the USB
+    host.
+
+  @ref USBD_Read(), @ref USBD_Write() @n
+    These functions initiate data transfers.
+    @n @htmlonly USBD_Read() @endhtmlonly initiate a transfer of data @em
+    from host @em to device (an @em OUT transfer in USB terminology).
+    @n @htmlonly USBD_Write() @endhtmlonly initiate a transfer of data @em from
+    device @em to host (an @em IN transfer).
+
+    When the USB host actually performs the transfer, your application will be
+    notified by means of a callback function which you provide (optionally).
+    Refer to @ref TransferCallback for details of the callback functionality.
+
+  @ref USBD_AbortTransfer(), @ref USBD_AbortAllTransfers() @n
+    These functions terminate transfers that are initiated, but has not yet
+    taken place. If a transfer is initiated with @htmlonly USBD_Read()
+    or USBD_Write(), @endhtmlonly but the USB host never actually peform
+    the transfers, these functions will deactivate the transfer setup to make
+    the USB device endpoint hardware ready for new (and potentially) different
+    transfers.
+
+  @ref USBD_Connect(), @ref USBD_Disconnect() @n
+    These functions turns the data-line (D+ or D-) pullup on or off. They can be
+    used to force reenumeration. It's good practice to delay at least one second
+    between @htmlonly USBD_Disconnect() and USBD_Connect() @endhtmlonly
+    to allow the USB host to unload the currently active device driver.
+
+  @ref USBD_EpIsBusy() @n
+    Check if an endpoint is busy.
+
+  @ref USBD_StallEp(), @ref USBD_UnStallEp() @n
+    These functions stalls or un-stalls an endpoint. This functionality may not
+    be needed by your application, but the USB device stack use them in response
+    to standard setup commands SET_FEATURE and CLEAR_FEATURE. They may be useful
+    when implementing some USB classes, e.g. a mass storage device use them
+    extensively.
+
+  @ref USBD_RemoteWakeup() @n
+    Used in SUSPENDED state (see @ref USB_Status_TypeDef) to signal resume to
+    host. It's the applications responsibility to adhere to the USB standard
+    which states that a device can not signal resume before it has been
+    SUSPENDED for at least 5 ms. The function will also check the configuration
+    descriptor defined by the application to see if it is legal for the device
+    to signal resume.
+
+  @ref USBD_GetUsbState() @n
+    Returns the device USB state (see @ref USBD_State_TypeDef). Refer to
+    Figure 9-1. "Device State Diagram" in the USB revision 2.0 specification.
+
+  @ref USBD_GetUsbStateName() @n
+    Returns a text string naming a given USB device state.
+
+  @ref USBD_SafeToEnterEM2() @n
+    Check if it is ok to enter energy mode EM2. Refer to the
+    @ref usb_device_powersave section for more information.
+
+  @n @anchor TransferCallback <b>The transfer complete callback function:</b> @n
+    @n USB_XferCompleteCb_TypeDef() is called when a transfer completes. It is
+    called with three parameters, the status of the transfer, the number of
+    bytes transferred and the number of bytes remaining. It may not always be
+    needed to have a callback on transfer completion, but you should keep in
+    mind that a transfer may be aborted when you least expect it. A transfer
+    will be aborted if host stalls the endpoint, if host resets your device, if
+    host unconfigures your device or if you unplug your device cable and the
+    device is selfpowered.
+    @htmlonly USB_XferCompleteCb_TypeDef() @endhtmlonly is also called if your
+    application use @htmlonly USBD_AbortTransfer() or USBD_AbortAllTransfers()
+    @endhtmlonly calls.
+    @note This callback is called from within an interrupt handler with
+          interrupts disabled.
+
+  @n @anchor DeviceInitCallbacks <b>Optional callbacks passed to the stack via
+    the @ref USBD_Init() function:</b> @n
+    @n These callbacks are all optional, and it is up to the application
+    programmer to decide if the application needs the functionality they
+    provide.
+    @note These callbacks are all called from within an interrupt handler
+          with interrupts disabled.
+
+  USBD_UsbResetCb_TypeDef() is called each time reset signalling is sensed on
+    the USB wire.
+
+  @n USBD_SofIntCb_TypeDef() is called with framenumber as a parameter on
+    each SOF interrupt.
+
+  @n USBD_DeviceStateChangeCb_TypeDef() is called whenever the device state
+    change. Useful for detecting e.g. SUSPENDED state change in order to reduce
+    current consumption of buspowered devices. The USB HID keyboard example
+    project has a good example on how to use this callback.
+
+  @n USBD_IsSelfPoweredCb_TypeDef() is called by the device stack when host
+    queries the device with a standard setup GET_STATUS command to check if the
+    device is currently selfpowered or buspowered. This feature is only
+    applicable on selfpowered devices which also works when only buspower is
+    available.
+
+  @n USBD_SetupCmdCb_TypeDef() is called each time a setup command is
+    received from host. Use this callback to override or extend the default
+    handling of standard setup commands, and to implement class or vendor
+    specific setup commands. The USB HID keyboard example project has a good
+    example on how to use this callback.
+
+  @n <b>Utility functions:</b> @n
+    @n    USB_PUTCHAR() Transmit a single char on the debug serial port.
+    @n @n USB_PUTS() Transmit a zero terminated string on the debug serial port.
+    @n @n USB_PRINTF() Transmit "printf" formated data on the debug serial port.
+    @n @n USB_GetErrorMsgString() Return an error message string for a given
+          error code.
+    @n @n USB_PrintErrorMsgString() Format and print a text string given an
+          error code, prepends an optional user supplied leader string.
+    @n @n USBTIMER_DelayMs() Active wait millisecond delay function. Can also be
+          used inside interrupt handlers.
+    @n @n USBTIMER_DelayUs() Active wait microsecond delay function. Can also be
+          used inside interrupt handlers.
+    @n @n USBTIMER_Init() Initialize the timer system. Called by @htmlonly
+          USBD_Init(), @endhtmlonly but your application must call it again to
+          reinitialize whenever you change the HFPERCLK frequency.
+    @n @n USBTIMER_Start() Start a timer. You can configure the USB device stack
+          to provide any number of timers. The timers have 1 ms resolution, your
+          application is notified of timeout by means of a callback.
+    @n @n USBTIMER_Stop() Stop a timer.
+
+@n @section usb_device_conf Configuring the device stack
+
+  Your application must provide a header file named @em usbconfig.h. This file
+  must contain the following \#define's:@n @n
+  @verbatim
+#define USB_DEVICE       // Compile the stack for device mode.
+#define NUM_EP_USED n    // Your application use 'n' endpoints in
+                         // addition to endpoint 0. @endverbatim
+
+  @n @em usbconfig.h may define the following items: @n @n
+  @verbatim
+#define NUM_APP_TIMERS n // Your application needs 'n' timers
+
+#define DEBUG_USB_API    // Turn on API debug diagnostics.
+
+// Some utility functions in the API needs printf. These
+// functions have "print" in their name. This macro enables
+// these functions.
+#define USB_USE_PRINTF   // Enable utility print functions.
+
+// Define a function for transmitting a single char on the serial port.
+extern int RETARGET_WriteChar(char c);
+#define USER_PUTCHAR  RETARGET_WriteChar
+
+#define USB_TIMER USB_TIMERn  // Select which hardware timer the USB stack
+                              // is allowed to use. Valid values are n=0,1,2...
+                              // corresponding to TIMER0, TIMER1, ...
+                              // If not specified, TIMER0 is used
+
+#define USB_VBUS_SWITCH_NOT_PRESENT  // Hardware does not have a VBUS switch
+
+#define USB_CORECLK_HFRCO   // Devices supporting crystal-less USB can use
+                            // HFRCO as core clock, default is HFXO
+@endverbatim
+
+  @n You are strongly encouraged to start application development with DEBUG_USB_API
+  turned on. When DEBUG_USB_API is turned on and USER_PUTCHAR is defined, useful
+  debugging information will be output on the development kit serial port.
+  Compiling with the DEBUG_EFM_USER flag will also enable all asserts
+  in both @em emlib and in the USB stack. If asserts are enabled and
+  USER_PUTCHAR defined, assert texts will be output on the serial port.
+
+  You application must include @em retargetserial.c if DEBUG_USB_API is defined
+  and @em retargetio.c if USB_USE_PRINTF is defined.
+  These files reside in the @em drivers
+  directory in the software package for your development board. Refer to
+  @ref usb_device_powersave for energy-saving mode configurations.
+
+@n @section usb_device_powersave Energy-saving modes
+
+  The device stack provides two energy saving levels. The first level is to
+  set the USB peripheral in energy saving mode, the next level is to enter
+  Energy Mode 2 (EM2). These energy saving modes can be applied when the device
+  is suspended by the USB host, or when when the device is not connected to a
+  USB host.
+  In addition to this an application can use energy modes EM1 and EM2. There
+  are no restrictions on when EM1 can be entered, EM2 can only be entered
+  when the USB device is suspended or detached from host.
+
+  Energy-saving modes are selected with a \#define in @em usbconfig.h, default
+  selection is to not use any energy saving modes.@n @n
+  @verbatim
+#define USB_PWRSAVE_MODE (USB_PWRSAVE_MODE_ONSUSPEND | USB_PWRSAVE_MODE_ENTEREM2)@endverbatim
+
+  There are three flags available, the flags can be or'ed together as shown above.
+
+  <b>\#define USB_PWRSAVE_MODE_ONSUSPEND</b>@n Set USB peripheral in low power
+  mode on suspend.
+
+  <b>\#define USB_PWRSAVE_MODE_ONVBUSOFF</b>@n Set USB peripheral in low power
+  mode when not attached to a host. This mode assumes that the internal voltage
+  regulator is used and that the VREGI pin of the chip is connected to VBUS.
+  This option can not be used with bus-powered devices.
+
+  <b>\#define USB_PWRSAVE_MODE_ENTEREM2</b>@n Enter EM2 when USB peripheral is
+  in low power mode.
+
+  When the USB peripheral is set in low power mode, it must be clocked by a 32kHz
+  clock. Both LFXO and LFRCO can be used, but only LFXO guarantee USB specification
+  compliance. Selection is done with a \#define in @em usbconfig.h.@n @n
+  @verbatim
+#define USB_USBC_32kHz_CLK   USB_USBC_32kHz_CLK_LFXO @endverbatim
+  Two flags are available, <b>USB_USBC_32kHz_CLK_LFXO</b> and
+  <b>USB_USBC_32kHz_CLK_LFRCO</b>. <b>USB_USBC_32kHz_CLK_LFXO</b> is selected
+  by default.
+
+  The USB HID keyboard and Mass Storage device example projects demonstrate
+  different energy-saving modes.
+
+  <b>Example 1:</b>
+  Leave all energy saving to the stack, the device enters EM2 on suspend and
+  when detached from host. @n
+  @verbatim
+In usbconfig.h:
+
+#define USB_PWRSAVE_MODE (USB_PWRSAVE_MODE_ONSUSPEND | USB_PWRSAVE_MODE_ONVBUSOFF | USB_PWRSAVE_MODE_ENTEREM2)
+  @endverbatim
+
+  @n <b>Example 2:</b>
+  Let the stack control energy saving in the USB periheral but let your
+  application control energy modes EM1 and EM2. @n
+  @verbatim
+In usbconfig.h:
+
+#define USB_PWRSAVE_MODE (USB_PWRSAVE_MODE_ONSUSPEND | USB_PWRSAVE_MODE_ONVBUSOFF)
+
+In application code:
+
+if ( USBD_SafeToEnterEM2() )
+  EMU_EnterEM2(true);
+else
+  EMU_EnterEM1(); @endverbatim
+
+@n @section usb_device_example1 Vendor unique device example application
+
+  This example represents the most simple USB device imaginable. It's purpose
+  is to turn user LED's on or off under control of vendor unique setup commands.
+  The device will rely on @em libusb device driver on the host, a host
+  application @em EFM32-LedApp.exe is bundled with the example.
+
+  The main() is really simple ! @n @n
+  @verbatim
+#include "em_usb.h"
+
+#include "descriptors.h"
+
+int main( void )
+{
+  BSP_Init(BSP_INIT_DEFAULT); // Initialize DK board register access
+  CMU_ClockSelectSet( cmuClock_HF, cmuSelect_HFXO );
+  BSP_LedsSet(0);             // Turn off all LED's
+
+  ConsoleDebugInit();         // Initialize UART for debug diagnostics
+
+  USB_PUTS( "\nEFM32 USB LED Vendor Unique Device example\n" );
+
+  USBD_Init( &initstruct );   // GO !
+
+  //When using a debugger it is pratical to uncomment the following three
+  //lines to force host to re-enumerate the device.
+
+  //USBD_Disconnect();
+  //USBTIMER_DelayMs( 1000 );
+  //USBD_Connect();
+
+  for (;;) {}
+} @endverbatim
+
+  @n Configure the device stack in <em>usbconfig.h</em>: @n @n
+  @verbatim
+#define USB_DEVICE                        // Compile stack for device mode.
+
+// **************************************************************************
+**                                                                         **
+** Specify number of endpoints used (in addition to EP0).                  **
+**                                                                         **
+*****************************************************************************
+#define NUM_EP_USED 0                     // EP0 is the only endpoint used.
+
+// **************************************************************************
+**                                                                         **
+** Configure serial port debug output.                                     **
+**                                                                         **
+*****************************************************************************
+// Prototype a function for transmitting a single char on the serial port.
+extern int RETARGET_WriteChar(char c);
+#define USER_PUTCHAR RETARGET_WriteChar
+
+// Enable debug diagnostics from API functions (illegal input params etc.)
+#define DEBUG_USB_API @endverbatim
+
+  @n Define device properties and fill in USB initstruct in
+  <em>descriptors.h</em>: @n @n
+  @verbatim
+EFM32_ALIGN(4)
+static const USB_DeviceDescriptor_TypeDef deviceDesc __attribute__ ((aligned(4))) =
+{
+  .bLength            = USB_DEVICE_DESCSIZE,
+  .bDescriptorType    = USB_DEVICE_DESCRIPTOR,
+  .bcdUSB             = 0x0200,
+  .bDeviceClass       = 0xFF,
+  .bDeviceSubClass    = 0,
+  .bDeviceProtocol    = 0,
+  .bMaxPacketSize0    = USB_FS_CTRL_EP_MAXSIZE,
+  .idVendor           = 0x10C4,
+  .idProduct          = 0x0001,
+  .bcdDevice          = 0x0000,
+  .iManufacturer      = 1,
+  .iProduct           = 2,
+  .iSerialNumber      = 3,
+  .bNumConfigurations = 1
+};
+
+EFM32_ALIGN(4)
+static const uint8_t configDesc[] __attribute__ ((aligned(4)))=
+{
+  // *** Configuration descriptor ***
+  USB_CONFIG_DESCSIZE,            // bLength
+  USB_CONFIG_DESCRIPTOR,          // bDescriptorType
+  USB_CONFIG_DESCSIZE +           // wTotalLength (LSB)
+  USB_INTERFACE_DESCSIZE,
+  (USB_CONFIG_DESCSIZE +          // wTotalLength (MSB)
+  USB_INTERFACE_DESCSIZE)>>8,
+  1,                              // bNumInterfaces
+  1,                              // bConfigurationValue
+  0,                              // iConfiguration
+  CONFIG_DESC_BM_RESERVED_D7 |    // bmAttrib: Self powered
+  CONFIG_DESC_BM_SELFPOWERED,
+  CONFIG_DESC_MAXPOWER_mA( 100 ), // bMaxPower: 100 mA
+
+  // *** Interface descriptor ***
+  USB_INTERFACE_DESCSIZE,         // bLength
+  USB_INTERFACE_DESCRIPTOR,       // bDescriptorType
+  0,                              // bInterfaceNumber
+  0,                              // bAlternateSetting
+  NUM_EP_USED,                    // bNumEndpoints
+  0xFF,                           // bInterfaceClass
+  0,                              // bInterfaceSubClass
+  0,                              // bInterfaceProtocol
+  0,                              // iInterface
+};
+
+STATIC_CONST_STRING_DESC_LANGID( langID, 0x04, 0x09 );
+STATIC_CONST_STRING_DESC( iManufacturer, 'E','n','e','r','g','y',' ',       \
+                                         'M','i','c','r','o',' ','A','S' );
+STATIC_CONST_STRING_DESC( iProduct     , 'V','e','n','d','o','r',' ',       \
+                                         'U','n','i','q','u','e',' ',       \
+                                         'L','E','D',' ',                   \
+                                         'D','e','v','i','c','e' );
+STATIC_CONST_STRING_DESC( iSerialNumber, '0','0','0','0','0','0',           \
+                                         '0','0','1','2','3','4' );
+
+static const void * const strings[] =
+{
+  &langID,
+  &iManufacturer,
+  &iProduct,
+  &iSerialNumber
+};
+
+// Endpoint buffer sizes
+// 1 = single buffer, 2 = double buffering, 3 = tripple buffering ...
+static const uint8_t bufferingMultiplier[ NUM_EP_USED + 1 ] = { 1 };
+
+static const USBD_Callbacks_TypeDef callbacks =
+{
+  .usbReset        = NULL,
+  .usbStateChange  = NULL,
+  .setupCmd        = SetupCmd,
+  .isSelfPowered   = NULL,
+  .sofInt          = NULL
+};
+
+static const USBD_Init_TypeDef initstruct =
+{
+  .deviceDescriptor    = &deviceDesc,
+  .configDescriptor    = configDesc,
+  .stringDescriptors   = strings,
+  .numberOfStrings     = sizeof(strings)/sizeof(void*),
+  .callbacks           = &callbacks,
+  .bufferingMultiplier = bufferingMultiplier
+};  @endverbatim
+
+  @n Now we have to implement vendor unique USB setup commands to control the
+  LED's (see callbacks variable above). Notice that the buffer variable below is
+  statically allocated because @htmlonly USBD_Write() @endhtmlonly only
+  initiates the transfer. When the host actually performs the transfer, the
+  SetupCmd() function will have returned ! @n @n
+
+  @verbatim
+#define VND_GET_LEDS 0x10
+#define VND_SET_LED  0x11
+
+static int SetupCmd( const USB_Setup_TypeDef *setup )
+{
+  int retVal;
+  uint16_t leds;
+  static uint32_t buffer;
+  uint8_t *pBuffer = (uint8_t*)&buffer;
+
+  retVal = USB_STATUS_REQ_UNHANDLED;
+
+  if ( setup->Type == USB_SETUP_TYPE_VENDOR )
+  {
+    switch ( setup->bRequest )
+    {
+      case VND_GET_LEDS:
+      // ********************
+        *pBuffer = BSP_LedsGet() & 0x1F;
+        retVal = USBD_Write( 0, pBuffer, setup->wLength, NULL );
+        break;
+
+      case VND_SET_LED:
+      // ********************
+        leds = DVK_getLEDs() & 0x1F;
+        if ( setup->wValue )
+        {
+          leds |= LED0 << setup->wIndex;
+        }
+        else
+        {
+          leds &= ~( LED0 << setup->wIndex );
+        }
+        BSP_LedsSet( leds );
+        retVal = USB_STATUS_OK;
+        break;
+    }
+  }
+
+  return retVal;
+}@endverbatim
+
+ * @}**************************************************************************/
+
+#endif /* defined( USB_DEVICE ) */
+#endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_Silicon_Labs/src/em_usbdep.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_Silicon_Labs/src/em_usbdep.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,446 @@
+/**************************************************************************//**
+ * @file em_usbdep.c
+ * @brief USB protocol stack library, USB device endpoint handlers.
+ * @version 3.20.14
+ ******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+
+#include "em_device.h"
+#if defined( USB_PRESENT ) && ( USB_COUNT == 1 )
+#include "em_usb.h"
+#if defined( USB_DEVICE )
+
+#include "em_usbtypes.h"
+#include "em_usbhal.h"
+#include "em_usbd.h"
+
+#ifdef USB_USE_PRINTF
+static const char *epStatusStr[] = {
+    "IDLE","TRANS","RECV","IN_S","OUT_S"
+};
+#endif
+
+/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
+
+/*
+ * USBDEP_Ep0Handler() is called each time a packet has been transmitted
+ * or recieved on the default endpoint.
+ * A state machine navigate us through the phases of a control transfer
+ * according to "chapter 9" in the USB spec.
+ */
+#if !defined( USB_DOEP0INT_STUPPKTRCVD )
+void USBDEP_Ep0Handler( USBD_Device_TypeDef *device )
+{
+  int status;
+  USBD_Ep_TypeDef *ep;
+  static bool statusIn;
+  static uint32_t xferred;
+  static USB_XferCompleteCb_TypeDef callback;
+
+  ep = &device->ep[ 0 ];
+
+#ifdef __MBED__
+
+  (void)xferred;
+  (void)statusIn;
+  (void)status;
+
+  USB_PRINTF("USBDEP: ep0 %s, rem %ld, z %d\n", epStatusStr[ep->state], ep->remaining, ep->zlp);
+
+  if ( ( ep->state == D_EP_TRANSMITTING ) || ( ep->state == D_EP_RECEIVING ) )
+  {
+    ep->state = D_EP_IDLE;
+
+    if ( ep->xferCompleteCb )
+    {
+      callback = ep->xferCompleteCb;
+      ep->xferCompleteCb = NULL;
+      callback( USB_STATUS_OK, ep->xferred, ep->remaining );
+    }
+
+    USBDHAL_ReenableEp0Setup(device);
+  }
+  else
+  {
+    device->callbacks->setupCmd(device->setup);
+  }
+
+#else /* not __MBED__ */
+
+  switch ( ep->state )
+  {
+    case D_EP_IDLE:
+      ep->remaining = 0;
+      ep->zlp = 0;
+      callback = NULL;
+      statusIn = false;
+
+      status = USBDCH9_SetupCmd( device );
+
+      if ( status == USB_STATUS_REQ_ERR )
+      {
+        ep->in = true;
+        USBDHAL_StallEp( ep );              /* Stall Ep0 IN                 */
+        ep->in = false;                     /* OUT for next SETUP           */
+        USBDHAL_StallEp( ep );              /* Stall Ep0 OUT                */
+        USBDHAL_ReenableEp0Setup( device ); /* Prepare for next SETUP packet*/
+      }
+      else /* ( Status == USB_STATUS_OK ) */
+      {
+        if ( (ep->state == D_EP_RECEIVING) || (ep->state == D_EP_TRANSMITTING) )
+        {
+          callback = ep->xferCompleteCb;
+        }
+
+        if ( ep->state != D_EP_RECEIVING )
+        {
+          if ( ep->remaining )
+          {
+            /* Data will be sent to host, check if a ZLP must be appended */
+            if ( ( ep->remaining < device->setup->wLength ) &&
+                 ( ep->remaining % ep->packetSize == 0    )    )
+            {
+              ep->zlp = 1;
+            }
+          }
+          else
+          {
+            /* Prepare for next SETUP packet*/
+            USBDHAL_ReenableEp0Setup( device );
+
+            /* No data stage, a ZLP may have been sent. If not, send one */
+
+            xferred = 0;
+            if ( ep->zlp == 0 )
+            {
+              USBD_Write( 0, NULL, 0, NULL );             /* ACK to host */
+              ep->state = D_EP0_IN_STATUS;
+            }
+            else
+            {
+              ep->state = D_EP_IDLE;
+              ep->in = false;                      /* OUT for next SETUP */
+            }
+          }
+        }
+      }
+      break;
+
+    case D_EP_RECEIVING:
+      if ( ep->remaining )
+      {
+        /* There is more data to receive */
+        USBD_ReArmEp0( ep );
+      }
+      else
+      {
+        status = USB_STATUS_OK;
+        if ( callback != NULL )
+        {
+          status = callback( USB_STATUS_OK, ep->xferred, 0 );
+          callback = NULL;
+        }
+
+        if ( status != USB_STATUS_OK )
+        {
+          ep->in = true;
+          USBDHAL_StallEp( ep );              /* Stall Ep0 IN                */
+          ep->in = false;                     /* OUT for next SETUP           */
+          USBDHAL_StallEp( ep );              /* Stall Ep0 OUT                */
+          USBDHAL_ReenableEp0Setup( device ); /* Prepare for next SETUP pkt. */
+          ep->state = D_EP_IDLE;
+        }
+        else /* Everything OK, send a ZLP (ACK) to host */
+        {
+          USBDHAL_ReenableEp0Setup( device );/* Prepare for next SETUP packet*/
+
+          ep->state = D_EP_IDLE;              /* USBD_Write() sets state back*/
+                                              /* to EP_TRANSMITTING          */
+          USBD_Write( 0, NULL, 0, NULL );
+          ep->state = D_EP0_IN_STATUS;
+        }
+      }
+      break;
+
+    case D_EP_TRANSMITTING:
+      if ( ep->remaining )
+      {
+        /* There is more data to transmit */
+        USBD_ReArmEp0( ep );
+      }
+      else
+      {
+        /* All data transferred, is a ZLP packet needed ? */
+        if ( ep->zlp == 1 )
+        {
+          xferred   = ep->xferred;
+          ep->state = D_EP_IDLE;          /* USBD_Write() sets state back */
+                                          /* to EP_TRANSMITTING           */
+          USBD_Write( 0, NULL, 0, NULL ); /* Send ZLP                     */
+          ep->zlp = 2;
+        }
+        else
+        {
+          if ( ep->zlp == 0 )
+          {
+            xferred = ep->xferred;
+          }
+
+          ep->state = D_EP_IDLE;
+          USBD_Read( 0, NULL, 0, NULL );  /* Get ZLP packet (ACK) from host */
+          statusIn = true;
+          ep->state = D_EP0_OUT_STATUS;
+        }
+      }
+      break;
+
+    case D_EP0_IN_STATUS:
+    case D_EP0_OUT_STATUS:
+      if ( statusIn )
+      {
+        USBDHAL_ReenableEp0Setup( device );
+      }
+
+      if ( callback != NULL )
+      {
+        callback( USB_STATUS_OK, xferred, 0 );
+      }
+
+      ep->state = D_EP_IDLE;
+      ep->in = false;                     /* OUT for next SETUP */
+      break;
+
+    default:
+      EFM_ASSERT( false );
+      break;
+  }
+#endif /* __MBED__ */
+}
+#endif
+
+#if defined( USB_DOEP0INT_STUPPKTRCVD )
+void USBDEP_Ep0Handler( USBD_Device_TypeDef *device )
+{
+  int status;
+  USBD_Ep_TypeDef *ep;
+  static uint32_t xferred;
+  static USB_XferCompleteCb_TypeDef callback;
+
+#ifdef __MBED__
+
+  (void)xferred;
+  (void)status;
+
+  ep = &device->ep[ 0 ];
+
+  if ( ( ep->state == D_EP_TRANSMITTING ) || ( ep->state == D_EP_RECEIVING ) )
+  {
+    ep->state = D_EP_IDLE;
+
+    if ( ep->xferCompleteCb )
+    {
+      callback = ep->xferCompleteCb;
+      ep->xferCompleteCb = NULL;
+      callback( USB_STATUS_OK, ep->xferred, ep->remaining );
+    }
+
+    USBDHAL_StartEp0Setup( dev );
+  }
+  else
+  {
+    device->callbacks->setupCmd(device->setup);
+  }
+
+#else
+
+  ep = &device->ep[ 0 ];
+
+  switch ( ep->state )
+  {
+    case D_EP_IDLE:
+      ep->zlp       = 0;
+      ep->remaining = 0;
+      callback      = NULL;
+
+      status = USBDCH9_SetupCmd( device );
+
+      if ( status == USB_STATUS_REQ_ERR )
+      {
+        ep->in = true;
+        USBDHAL_StallEp( ep );              /* Stall Ep0 IN                 */
+        ep->in = false;                     /* OUT for next SETUP           */
+        USBDHAL_StallEp( ep );              /* Stall Ep0 OUT                */
+        USBDHAL_StartEp0Setup( dev );       /* Prepare for next SETUP packet*/
+      }
+      else /* ( Status == USB_STATUS_OK ) */
+      {
+        if ( (ep->state == D_EP_RECEIVING) || (ep->state == D_EP_TRANSMITTING) )
+        {
+          callback = ep->xferCompleteCb;
+        }
+
+        if ( ep->state != D_EP_RECEIVING )
+        {
+          if ( ep->remaining )
+          {
+            /* Data will be sent to host, check if a ZLP must be appended */
+            if ( ( ep->remaining < device->setup->wLength ) &&
+                 ( ep->remaining % ep->packetSize == 0    )    )
+            {
+              ep->zlp = 1;
+            }
+          }
+          else
+          {
+            /* No data stage, a ZLP may have been sent. If not, send one */
+            xferred = 0;
+            if ( ep->zlp == 0 )
+            {
+              ep->state = D_EP_IDLE;
+              USBD_Write( 0, NULL, 0, NULL );             /* ACK to host */
+              ep->state = D_EP0_IN_STATUS;
+            }
+          }
+        }
+      }
+      break;
+
+    case D_EP_RECEIVING:
+      if ( ep->remaining )
+      {
+        ep->in = false;
+        USBD_ReArmEp0( ep );
+      }
+      else
+      {
+        status = USB_STATUS_OK;
+        if ( callback != NULL )
+        {
+          status = callback( USB_STATUS_OK, ep->xferred, 0 );
+          callback = NULL;
+        }
+
+        if ( status != USB_STATUS_OK )
+        {
+          ep->in = true;
+          USBDHAL_StallEp( ep );              /* Stall Ep0 IN                */
+          ep->in = false;                     /* OUT for next SETUP          */
+          USBDHAL_StallEp( ep );              /* Stall Ep0 OUT               */
+          USBDHAL_StartEp0Setup( dev );       /* Prepare for next SETUP pkt. */
+          ep->state = D_EP_IDLE;
+        }
+        else
+        {
+
+          USBDHAL_StartEp0Setup( dev );      /* Prepare for next SETUP packet*/
+          ep->state = D_EP_IDLE;             /* USBD_Write() sets state back */
+                                             /* to EP_TRANSMITTING           */
+          USBD_Write( 0, NULL, 0, NULL );
+          ep->state = D_EP0_IN_STATUS;
+        }
+      }
+      break;
+
+    case D_EP_TRANSMITTING:
+      if ( ep->remaining )
+      {
+        ep->in = true;
+        USBD_ReArmEp0( ep );
+      }
+      else
+      {
+        if ( ep->zlp == 1 )
+        {
+          xferred   = ep->xferred;
+          ep->state = D_EP_IDLE;          /* USBD_Write() sets state back */
+                                          /* to EP_TRANSMITTING           */
+          USBD_Write( 0, NULL, 0, NULL ); /* Send ZLP                     */
+          ep->zlp = 2;
+        }
+        else
+        {
+          if ( ep->zlp == 0 )
+          {
+            xferred = ep->xferred;
+          }
+
+          ep->state = D_EP_IDLE;
+          USBD_Read( 0, NULL, 0, NULL );  /* Get ZLP packet (ACK) from host */
+          ep->state = D_EP0_OUT_STATUS;
+        }
+      }
+      break;
+
+    case D_EP0_IN_STATUS:
+      if ( ( USB->DOEP0CTL & USB_DOEP0CTL_EPENA ) == 0 )
+      {
+        /* Prepare for more SETUP Packets */
+        USBDHAL_StartEp0Setup( dev );
+      }
+      if ( callback != NULL )
+      {
+        callback( USB_STATUS_OK, xferred, 0 );
+      }
+      ep->state = D_EP_IDLE;
+      ep->in = false;                     /* OUT for next SETUP */
+      break;
+
+    case D_EP0_OUT_STATUS:
+      USBDHAL_StartEp0Setup( dev );       /* Prepare for more SETUP Packets */
+      if ( callback != NULL )
+      {
+        callback( USB_STATUS_OK, xferred, 0 );
+      }
+      ep->state = D_EP_IDLE;
+      ep->in = false;                     /* OUT for next SETUP */
+      break;
+  }
+#endif /* __MBED__ */
+}
+#endif
+
+/*
+ * USBDEP_EpHandler() is called each time a packet has been transmitted
+ * or recieved on an endpoint other than the default endpoint.
+ */
+void USBDEP_EpHandler( uint8_t epAddr )
+{
+  USB_XferCompleteCb_TypeDef callback;
+  USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
+
+  if ( ( ep->state == D_EP_TRANSMITTING ) || ( ep->state == D_EP_RECEIVING ) )
+  {
+    ep->state = D_EP_IDLE;
+    if ( ep->xferCompleteCb )
+    {
+      callback = ep->xferCompleteCb;
+      ep->xferCompleteCb = NULL;
+      callback( USB_STATUS_OK, ep->xferred, ep->remaining );
+    }
+  }
+  else
+  {
+    EFM_ASSERT( false );
+  }
+}
+
+/** @endcond */
+
+#endif /* defined( USB_DEVICE ) */
+#endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_Silicon_Labs/src/em_usbdint.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_Silicon_Labs/src/em_usbdint.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,946 @@
+/**************************************************************************//**
+ * @file em_usbdint.c
+ * @brief USB protocol stack library, USB device peripheral interrupt handlers.
+ * @version 3.20.14
+ ******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+
+#include "em_device.h"
+#if defined( USB_PRESENT ) && ( USB_COUNT == 1 )
+#include "em_usb.h"
+#if defined( USB_DEVICE )
+
+#include "em_cmu.h"
+#include "em_usbtypes.h"
+#include "em_usbhal.h"
+#include "em_usbd.h"
+
+#ifdef __MBED__
+extern void usbhal_allow_em2(bool em2_allow);
+#endif
+
+/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
+
+#define HANDLE_INT( x ) if ( status & x ) { Handle_##x(); status &= ~x; }
+
+static void Handle_USB_GINTSTS_ENUMDONE  ( void );
+static void Handle_USB_GINTSTS_IEPINT    ( void );
+static void Handle_USB_GINTSTS_OEPINT    ( void );
+static void Handle_USB_GINTSTS_RESETDET  ( void );
+static void Handle_USB_GINTSTS_SOF       ( void );
+static void Handle_USB_GINTSTS_USBRST    ( void );
+static void Handle_USB_GINTSTS_USBSUSP   ( void );
+static void Handle_USB_GINTSTS_WKUPINT   ( void );
+#if defined( USB_DOEP0INT_STUPPKTRCVD )
+static void HandleOutEpIntr( uint32_t status, USBD_Ep_TypeDef *ep );
+#else
+static void ProcessSetup                 ( void );
+static void ProcessOepData               ( USBD_Ep_TypeDef *ep );
+#endif
+
+#if ( USB_PWRSAVE_MODE )
+/* Variables and prototypes for USB powerdown (suspend) functionality. */
+static bool UsbPowerDown( void );
+static bool UsbPowerUp( void );
+
+volatile bool USBD_poweredDown = false;
+
+/* Storage for backing up USB core registers. */
+static uint32_t  x_USB_GINTMSK;
+#if defined(_USB_GOTGCTL_MASK)
+static uint32_t  x_USB_GOTGCTL;
+#endif
+static uint32_t  x_USB_GAHBCFG;
+static uint32_t  x_USB_GUSBCFG;
+static uint32_t  x_USB_GRXFSIZ;
+static uint32_t  x_USB_GNPTXFSIZ;
+static uint32_t  x_USB_DCFG;
+static uint32_t  x_USB_DCTL;
+static uint32_t  x_USB_DAINTMSK;
+static uint32_t  x_USB_DIEPMSK;
+static uint32_t  x_USB_DOEPMSK;
+static uint32_t  x_USB_PCGCCTL;
+
+#if ( NUM_EP_USED > 0 )
+static uint32_t  x_USB_EP_CTL[ NUM_EP_USED ];
+static uint32_t  x_USB_EP_TSIZ[ NUM_EP_USED ];
+static uint32_t  x_USB_EP_DMAADDR[ NUM_EP_USED ];
+#endif
+
+#if ( NUM_EP_USED > MAX_NUM_TX_FIFOS )
+#define FIFO_CNT MAX_NUM_TX_FIFOS
+#else
+#define FIFO_CNT NUM_EP_USED
+#endif
+
+#if ( FIFO_CNT > 0 )
+static uint32_t  x_USB_DIEPTXFS[ FIFO_CNT ];
+#endif
+
+#if ( USB_PWRSAVE_MODE )
+static uint32_t cmuStatus = 0;
+#endif
+
+#endif /* if ( USB_PWRSAVE_MODE ) */
+
+/*
+ * USB_IRQHandler() is the first level handler for the USB peripheral interrupt.
+ */
+void USB_IRQHandler( void )
+{
+  uint32_t status;
+  bool servedVbusInterrupt = false;
+
+  INT_Disable();
+
+#if ( USB_PWRSAVE_MODE )
+  if ( USBD_poweredDown )
+  {
+    /* Switch USBC clock from 32kHz to a 48MHz clock to be able to  */
+    /* read USB peripheral registers.                               */
+    /* If we woke up from EM2, HFCLK is now HFRCO.                  */
+
+    /* Restore clock oscillators.*/
+#if defined( CMU_OSCENCMD_USHFRCOEN )
+    if ( ( CMU->STATUS & CMU_STATUS_USHFRCOENS ) == 0 )/*Wakeup from EM2 ?*/
+    {
+      CMU->OSCENCMD = ( cmuStatus
+                        & ( CMU_STATUS_AUXHFRCOENS | CMU_STATUS_HFXOENS ) )
+                      | CMU_OSCENCMD_USHFRCOEN;
+    }
+#else
+    if ( ( CMU->STATUS & CMU_STATUS_HFXOENS ) == 0 ) /* Wakeup from EM2 ? */
+    {
+      CMU->OSCENCMD = cmuStatus
+                      & ( CMU_STATUS_AUXHFRCOENS | CMU_STATUS_HFXOENS );
+    }
+#endif
+
+    /* Select correct USBC clock.*/
+#if defined( CMU_OSCENCMD_USHFRCOEN )
+    CMU->CMD = CMU_CMD_USBCCLKSEL_USHFRCO;
+    while ( ( CMU->STATUS & CMU_STATUS_USBCUSHFRCOSEL ) == 0 ){}
+#else
+    CMU->CMD = CMU_CMD_USBCCLKSEL_HFCLKNODIV;
+    while ( ( CMU->STATUS & CMU_STATUS_USBCHFCLKSEL ) == 0 ){}
+#endif
+  }
+#endif /* if ( USB_PWRSAVE_MODE ) */
+
+  if ( USB->IF && ( USB->CTRL & USB_CTRL_VREGOSEN ) )
+  {
+    if ( USB->IF & USB_IF_VREGOSH )
+    {
+      USB->IFC = USB_IFC_VREGOSH;
+
+      if ( USB->STATUS & USB_STATUS_VREGOS )
+      {
+        servedVbusInterrupt = true;
+        DEBUG_USB_INT_LO_PUTS( "\nVboN" );
+
+#if ( USB_PWRSAVE_MODE )
+        if ( UsbPowerUp() )
+        {
+          USBDHAL_EnableUsbResetAndSuspendInt();
+        }
+        USBD_SetUsbState( USBD_STATE_POWERED );
+#endif
+      }
+    }
+
+    if ( USB->IF & USB_IF_VREGOSL )
+    {
+      USB->IFC = USB_IFC_VREGOSL;
+
+      if ( ( USB->STATUS & USB_STATUS_VREGOS ) == 0 )
+      {
+        servedVbusInterrupt = true;
+        DEBUG_USB_INT_LO_PUTS( "\nVboF" );
+
+#if ( USB_PWRSAVE_MODE )
+#if ( USB_PWRSAVE_MODE & USB_PWRSAVE_MODE_ONVBUSOFF )
+        if ( !USBD_poweredDown )
+        {
+          USB->GINTMSK = 0;
+          USB->GINTSTS = 0xFFFFFFFF;
+        }
+
+        UsbPowerDown();
+#endif
+        USBD_SetUsbState( USBD_STATE_NONE );
+#endif
+      }
+    }
+  }
+
+  status = USBHAL_GetCoreInts();
+  if ( status == 0 )
+  {
+    INT_Enable();
+    if ( !servedVbusInterrupt )
+    {
+      DEBUG_USB_INT_LO_PUTS( "\nSinT" );
+    }
+    return;
+  }
+
+  HANDLE_INT( USB_GINTSTS_RESETDET   )
+  HANDLE_INT( USB_GINTSTS_WKUPINT    )
+  HANDLE_INT( USB_GINTSTS_USBSUSP    )
+  HANDLE_INT( USB_GINTSTS_SOF        )
+  HANDLE_INT( USB_GINTSTS_ENUMDONE   )
+  HANDLE_INT( USB_GINTSTS_USBRST     )
+  HANDLE_INT( USB_GINTSTS_IEPINT     )
+  HANDLE_INT( USB_GINTSTS_OEPINT     )
+
+  INT_Enable();
+
+  if ( status != 0 )
+  {
+    DEBUG_USB_INT_LO_PUTS( "\nUinT" );
+  }
+}
+
+/*
+ * Handle port enumeration interrupt. This has nothing to do with normal
+ * device enumeration.
+ */
+static void Handle_USB_GINTSTS_ENUMDONE( void )
+{
+#if ( USB_PWRSAVE_MODE )
+  UsbPowerUp();
+#endif
+
+  USBDHAL_Ep0Activate( dev->ep0MpsCode );
+  dev->ep[ 0 ].state = D_EP_IDLE;
+  USBDHAL_EnableInts( dev );
+  DEBUG_USB_INT_LO_PUTS( "EnumD" );
+}
+
+/*
+ * Handle IN endpoint transfer interrupt.
+ */
+static void Handle_USB_GINTSTS_IEPINT( void )
+{
+  int epnum;
+  uint16_t epint;
+  uint16_t epmask;
+  uint32_t status;
+  USBD_Ep_TypeDef *ep;
+
+  DEBUG_USB_INT_HI_PUTCHAR( 'i' );
+
+  epint = USBDHAL_GetAllInEpInts();
+  for ( epnum = 0,                epmask = 1;
+        epnum <= MAX_NUM_IN_EPS;
+        epnum++,                  epmask <<= 1 )
+  {
+    if ( epint & epmask )
+    {
+      ep = USBD_GetEpFromAddr( USB_SETUP_DIR_MASK | epnum );
+      status = USBDHAL_GetInEpInts( ep );
+
+      if ( status & USB_DIEP_INT_XFERCOMPL )
+      {
+        USB_DINEPS[ epnum ].INT = USB_DIEP_INT_XFERCOMPL;
+
+        DEBUG_USB_INT_HI_PUTCHAR( 'c' );
+
+        if ( epnum == 0 )
+        {
+          if ( ep->remaining > ep->packetSize )
+          {
+            ep->remaining -= ep->packetSize;
+            ep->xferred += ep->packetSize;
+          }
+          else
+          {
+            ep->xferred += ep->remaining;
+            ep->remaining = 0;
+          }
+          USBDEP_Ep0Handler( dev );
+        }
+        else
+        {
+          ep->xferred = ep->remaining -
+                        ( ( USB_DINEPS[ epnum ].TSIZ      &
+                            _USB_DIEP_TSIZ_XFERSIZE_MASK    ) >>
+                          _USB_DIEP_TSIZ_XFERSIZE_SHIFT          );
+          ep->remaining -= ep->xferred;
+
+          USBDEP_EpHandler( ep->addr );
+#if defined( USB_DOEP0INT_STUPPKTRCVD )
+          if ( USB_DINEPS[ ep->num ].INT & USB_DIEP_INT_NAKINTRPT )
+          {
+            USB_DINEPS[ ep->num ].INT = USB_DIEP_INT_NAKINTRPT;
+          }
+#endif
+        }
+      }
+    }
+  }
+}
+
+/*
+ * Handle OUT endpoint transfer interrupt.
+ */
+static void Handle_USB_GINTSTS_OEPINT( void )
+{
+  int epnum;
+  uint16_t epint;
+  uint16_t epmask;
+  uint32_t status;
+  USBD_Ep_TypeDef *ep;
+
+  DEBUG_USB_INT_HI_PUTCHAR( 'o' );
+
+  epint = USBDHAL_GetAllOutEpInts();
+  for ( epnum = 0,                epmask = 1;
+        epnum <= MAX_NUM_OUT_EPS;
+        epnum++,                  epmask <<= 1 )
+  {
+    if ( epint & epmask )
+    {
+      ep = USBD_GetEpFromAddr( epnum );
+      status = USBDHAL_GetOutEpInts( ep );
+
+#if defined( USB_DOEP0INT_STUPPKTRCVD )
+      HandleOutEpIntr( status, ep );
+#else
+      if ( status & USB_DOEP_INT_XFERCOMPL )
+      {
+        USB_DOUTEPS[ epnum ].INT = USB_DOEP_INT_XFERCOMPL;
+        DEBUG_USB_INT_HI_PUTCHAR( 'c' );
+        ProcessOepData( ep );
+      }
+
+      /* Setup Phase Done */
+      if ( status & USB_DOEP0INT_SETUP )
+      {
+        ProcessSetup();
+      }
+#endif
+    }
+  }
+}
+
+#if !defined( USB_DOEP0INT_STUPPKTRCVD )
+static void ProcessOepData( USBD_Ep_TypeDef *ep )
+{
+  if ( ep->num == 0 )
+  {
+
+#ifdef __MBED__
+    int xfer_size = ep->packetSize - (( USB->DOEP0TSIZ & _USB_DOEP0TSIZ_XFERSIZE_MASK )
+                                      >> _USB_DOEP0TSIZ_XFERSIZE_SHIFT);
+    int setup_pkt_received = USBDHAL_GetOutEpInts( ep ) & USB_DOEP0INT_SETUP;
+
+    if ( (!setup_pkt_received && xfer_size == 0) ||
+         (setup_pkt_received && xfer_size == 8) )
+    {
+      /* Higher levels need to see the correct transfer amount for ZLPs */
+      ep->remaining = 0;
+      ep->xferred = 0;
+    }
+    else
+    {
+      /* FIXME - does not work if actual read size > 56 */
+      if ( setup_pkt_received ) xfer_size -= 8;
+
+      ep->xferred = xfer_size;
+      ep->remaining -= xfer_size;
+    }
+#else
+    if ( ep->remaining > ep->packetSize )
+    {
+      ep->remaining -= ep->packetSize;
+      ep->xferred += ep->packetSize;
+    }
+    else
+    {
+      ep->xferred += ep->remaining;
+      ep->remaining = 0;
+    }
+#endif
+
+    USBDEP_Ep0Handler( dev );
+  }
+  else
+  {
+    ep->xferred = ep->hwXferSize -
+        ( ( USB_DOUTEPS[ ep->num ].TSIZ & _USB_DOEP_TSIZ_XFERSIZE_MASK )>>
+          _USB_DOEP_TSIZ_XFERSIZE_SHIFT );
+    ep->remaining -= ep->xferred;
+    USBDEP_EpHandler( ep->addr );
+  }
+}
+#endif
+
+#if !defined( USB_DOEP0INT_STUPPKTRCVD )
+static void ProcessSetup( void )
+{
+  DEBUG_USB_INT_LO_PUTS( "\nS" );
+
+  if ( USB->DOEP0INT & USB_DOEP0INT_BACK2BACKSETUP )
+  {                           /* Back to back setup packets received */
+    USB->DOEP0INT = USB_DOEP0INT_BACK2BACKSETUP;
+    DEBUG_USB_INT_LO_PUTS( "B2B" );
+
+    dev->setup = (USB_Setup_TypeDef*)( USB->DOEP0DMAADDR - USB_SETUP_PKT_SIZE );
+  }
+  else
+  {
+    /* Read SETUP packet counter from hw. */
+    int supCnt = ( USB->DOEP0TSIZ & _USB_DOEP0TSIZ_SUPCNT_MASK )
+                 >> _USB_DOEP0TSIZ_SUPCNT_SHIFT;
+
+    if ( supCnt == 3 )
+      supCnt = 2;
+
+    dev->setup = &dev->setupPkt[ 2 - supCnt ];
+  }
+  USB->DOEP0TSIZ |= 3 << _USB_DOEP0TSIZ_SUPCNT_SHIFT;
+  USB->DOEP0DMAADDR = (uint32_t)dev->setupPkt;
+  USB->DOEP0INT = USB_DOEP0INT_SETUP;
+
+  USBDEP_Ep0Handler( dev );   /* Call the SETUP handler for EP0 */
+}
+#endif
+
+/*
+ * Handle USB reset detected interrupt in suspend mode.
+ */
+static void Handle_USB_GINTSTS_RESETDET  ( void )
+{
+#if ( USB_PWRSAVE_MODE )
+  if ( ! USBD_poweredDown )
+  {
+    USB->GINTSTS = USB_GINTSTS_RESETDET;
+  }
+
+  if ( UsbPowerUp() )
+  {
+    USB->GINTSTS = USB_GINTSTS_RESETDET;
+  }
+
+#if ( USB_PWRSAVE_MODE & USB_PWRSAVE_MODE_ONVBUSOFF )
+  /* Power down immediately if VBUS is off. */
+  if ( ! ( USB->STATUS & USB_STATUS_VREGOS ) )
+  {
+    UsbPowerDown();
+  }
+#endif
+
+#else
+  USB->GINTSTS = USB_GINTSTS_RESETDET;
+#endif /* if ( USB_PWRSAVE_MODE ) */
+
+  if ( USB->STATUS & USB_STATUS_VREGOS )
+  {
+    USBD_SetUsbState( USBD_STATE_DEFAULT );
+  }
+  else
+  {
+    USBD_SetUsbState( USBD_STATE_NONE );
+  }
+  DEBUG_USB_INT_LO_PUTS( "RsuP\n" );
+}
+
+/*
+ * Handle Start Of Frame (SOF) interrupt.
+ */
+static void Handle_USB_GINTSTS_SOF( void )
+{
+  USB->GINTSTS = USB_GINTSTS_SOF;
+
+  if ( dev->callbacks->sofInt )
+  {
+    dev->callbacks->sofInt(
+      ( USB->DSTS & _USB_DSTS_SOFFN_MASK ) >> _USB_DSTS_SOFFN_SHIFT );
+  }
+}
+
+/*
+ * Handle USB port reset interrupt.
+ */
+static void Handle_USB_GINTSTS_USBRST( void )
+{
+  int i;
+
+  DEBUG_USB_INT_LO_PUTS( "ReseT" );
+
+  /* Clear Remote Wakeup Signalling */
+  USB->DCTL &= ~( DCTL_WO_BITMASK | USB_DCTL_RMTWKUPSIG );
+  USBHAL_FlushTxFifo( 0 );
+
+  /* Clear pending interrupts */
+  for ( i = 0; i <= MAX_NUM_IN_EPS; i++ )
+  {
+    USB_DINEPS[ i ].INT = 0xFFFFFFFF;
+  }
+
+  for ( i = 0; i <= MAX_NUM_OUT_EPS; i++ )
+  {
+    USB_DOUTEPS[ i ].INT = 0xFFFFFFFF;
+  }
+
+  USB->DAINTMSK = USB_DAINTMSK_INEPMSK0 | USB_DAINTMSK_OUTEPMSK0;
+#if defined( USB_DOEPMSK_STSPHSERCVDMSK )
+  USB->DOEPMSK  = USB_DOEPMSK_SETUPMSK  | USB_DOEPMSK_XFERCOMPLMSK
+                  | USB_DOEPMSK_STSPHSERCVDMSK;
+#else
+  USB->DOEPMSK  = USB_DOEPMSK_SETUPMSK  | USB_DOEPMSK_XFERCOMPLMSK;
+#endif
+  USB->DIEPMSK  = USB_DIEPMSK_XFERCOMPLMSK;
+
+  /* Reset Device Address */
+  USB->DCFG &= ~_USB_DCFG_DEVADDR_MASK;
+
+  /* Setup EP0 to receive SETUP packets */
+  USBDHAL_StartEp0Setup( dev );
+  USBDHAL_EnableInts( dev );
+
+  if ( dev->callbacks->usbReset )
+  {
+    dev->callbacks->usbReset();
+  }
+
+  USBD_SetUsbState( USBD_STATE_DEFAULT );
+  USBDHAL_AbortAllTransfers( USB_STATUS_DEVICE_RESET );
+}
+
+/*
+ * Handle USB port suspend interrupt.
+ */
+static void Handle_USB_GINTSTS_USBSUSP( void )
+{
+  USBD_State_TypeDef state;
+
+  USB->GINTSTS = USB_GINTSTS_USBSUSP;
+  USBDHAL_AbortAllTransfers( USB_STATUS_DEVICE_SUSPENDED );
+  DEBUG_USB_INT_LO_PUTS( "\nSusP" );
+
+  if ( USBD_GetUsbState() == USBD_STATE_NONE )
+  {
+    USBD_SetUsbState( USBD_STATE_POWERED );
+  }
+
+  state = USBD_GetUsbState();
+  if ( ( state == USBD_STATE_POWERED    ) ||
+       ( state == USBD_STATE_DEFAULT    ) ||
+       ( state == USBD_STATE_ADDRESSED  ) ||
+       ( state == USBD_STATE_CONFIGURED )    )
+  {
+#if ( USB_PWRSAVE_MODE )
+    UsbPowerDown();
+#endif
+    USBD_SetUsbState( USBD_STATE_SUSPENDED );
+  }
+}
+
+/*
+ * Handle USB port wakeup interrupt.
+ */
+static void Handle_USB_GINTSTS_WKUPINT( void )
+{
+#if ( USB_PWRSAVE_MODE )
+  if ( ! USBD_poweredDown )
+  {
+    USB->GINTSTS = USB_GINTSTS_WKUPINT;
+  }
+
+  if ( UsbPowerUp() )
+  {
+    USB->GINTSTS = USB_GINTSTS_WKUPINT;
+    USBDHAL_StartEp0Setup( dev );
+    USBDHAL_Ep0Activate( dev->ep0MpsCode );
+  }
+#else
+  USB->GINTSTS = USB_GINTSTS_WKUPINT;
+#endif
+
+  USBD_SetUsbState( dev->savedState );
+  DEBUG_USB_INT_LO_PUTS( "WkuP\n" );
+}
+
+#if ( USB_PWRSAVE_MODE )
+/*
+ * Backup essential USB core registers, and set the core in partial powerdown
+ * mode. Optionally prepare entry into EM2.
+ */
+static bool UsbPowerDown( void )
+{
+#if ( NUM_EP_USED > 0 ) || ( FIFO_CNT > 0 )
+  int i;
+#endif
+#if ( NUM_EP_USED > 0 )
+  int epNum;
+  USBD_Ep_TypeDef *ep;
+#endif
+
+  if ( !USBD_poweredDown )
+  {
+    USBD_poweredDown = true;
+    DEBUG_USB_INT_LO_PUTCHAR( '\\' );
+
+    /* Backup USB core registers. */
+    x_USB_GINTMSK   = USB->GINTMSK;
+#if defined(_USB_GOTGCTL_MASK)
+    x_USB_GOTGCTL   = USB->GOTGCTL;
+#endif
+    x_USB_GAHBCFG   = USB->GAHBCFG;
+    x_USB_GUSBCFG   = USB->GUSBCFG;
+    x_USB_GRXFSIZ   = USB->GRXFSIZ;
+    x_USB_GNPTXFSIZ = USB->GNPTXFSIZ;
+    x_USB_DCFG      = USB->DCFG;
+    x_USB_DCTL      = USB->DCTL;
+    x_USB_DAINTMSK  = USB->DAINTMSK;
+    x_USB_DIEPMSK   = USB->DIEPMSK;
+    x_USB_DOEPMSK   = USB->DOEPMSK;
+    x_USB_PCGCCTL   = USB->PCGCCTL;
+
+#if ( NUM_EP_USED > 0 )
+    for ( i = 0; i < NUM_EP_USED; i++ )
+    {
+      ep = &dev->ep[ i+1 ];
+      epNum = ep->num;
+      if ( ep->in )
+      {
+        x_USB_EP_CTL[     i ] = USB_DINEPS[ epNum ].CTL;
+        x_USB_EP_TSIZ[    i ] = USB_DINEPS[ epNum ].TSIZ;
+        x_USB_EP_DMAADDR[ i ] = USB_DINEPS[ epNum ].DMAADDR;
+      }
+      else
+      {
+        x_USB_EP_CTL[     i ] = USB_DOUTEPS[ epNum ].CTL;
+        x_USB_EP_TSIZ[    i ] = USB_DOUTEPS[ epNum ].TSIZ;
+        x_USB_EP_DMAADDR[ i ] = USB_DOUTEPS[ epNum ].DMAADDR;
+      }
+    }
+#endif
+
+#if ( FIFO_CNT > 0 )
+    for ( i = 0; i < FIFO_CNT; i++ )
+    {
+      x_USB_DIEPTXFS[ i ] = USB_DIEPTXFS[ i ];
+    }
+#endif
+
+    /* Prepare for wakeup on resume and reset. */
+    USB->DCFG    = (USB->DCFG & ~_USB_DCFG_RESVALID_MASK) |
+                   (4 << _USB_DCFG_RESVALID_SHIFT);
+    USB->DCFG   |= USB_DCFG_ENA32KHZSUSP;
+    USB->GINTMSK = USB_GINTMSK_RESETDETMSK | USB_GINTMSK_WKUPINTMSK;
+
+    /* Enter partial powerdown mode. */
+    USB->PCGCCTL |= USB_PCGCCTL_PWRCLMP;
+    USB->PCGCCTL |= USB_PCGCCTL_RSTPDWNMODULE;
+    USB->PCGCCTL |= USB_PCGCCTL_STOPPCLK;
+
+    /* Record current clock settings. */
+    cmuStatus = CMU->STATUS;
+
+#if ( USB_PWRSAVE_MODE & USB_PWRSAVE_MODE_ENTEREM2 )
+#ifndef __MBED__
+    /* Enter EM2 on interrupt exit. */
+    SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk;
+#else
+    usbhal_allow_em2(true);
+#endif
+#endif
+
+    /* Switch USBC clock to 32 kHz. */
+#if ( USB_USBC_32kHz_CLK == USB_USBC_32kHz_CLK_LFXO )
+    CMU->CMD = CMU_CMD_USBCCLKSEL_LFXO;
+    while ( ( CMU->STATUS & CMU_STATUS_USBCLFXOSEL ) == 0 ){}
+#else
+    CMU->CMD = CMU_CMD_USBCCLKSEL_LFRCO;
+    while ( ( CMU->STATUS & CMU_STATUS_USBCLFRCOSEL ) == 0 ){}
+#endif
+
+    return true;
+  }
+  return false;
+}
+#endif /* if ( USB_PWRSAVE_MODE ) */
+
+#if ( USB_PWRSAVE_MODE )
+/*
+ * Exit USB core partial powerdown mode, restore essential USB core registers.
+ * Will prevent re-entry back to EM2.
+ * Returns true if a powerup sequence was performed.
+ */
+static bool UsbPowerUp( void )
+{
+#if ( NUM_EP_USED > 0 ) || ( FIFO_CNT > 0 )
+  int i;
+#endif
+#if ( NUM_EP_USED > 0 )
+  int epNum;
+  uint32_t tmp;
+  USBD_Ep_TypeDef *ep;
+#endif
+
+  if ( USBD_poweredDown )
+  {
+    USBD_poweredDown = false;
+    DEBUG_USB_INT_LO_PUTCHAR( '/' );
+
+#if !defined( USB_CORECLK_HFRCO ) || !defined( CMU_OSCENCMD_USHFRCOEN )
+    /* Switch HFCLK from HFRCO to HFXO. */
+    CMU_ClockSelectSet( cmuClock_HF, cmuSelect_HFXO );
+#endif
+
+    /* Turn off HFRCO when not needed. */
+    if ( ( cmuStatus & CMU_STATUS_HFRCOENS ) == 0 )
+    {
+      CMU->OSCENCMD = CMU_OSCENCMD_HFRCODIS;
+    }
+
+    /* Exit partial powerdown mode. */
+    USB->PCGCCTL &= ~USB_PCGCCTL_STOPPCLK;
+    USB->PCGCCTL &= ~(USB_PCGCCTL_PWRCLMP | USB_PCGCCTL_RSTPDWNMODULE);
+
+    if (( USB->GINTSTS & ( USB_GINTSTS_WKUPINT | USB_GINTSTS_RESETDET ) ) == 0)
+    {
+      USB->DCTL = x_USB_DCTL | USB_DCTL_RMTWKUPSIG;
+      USB->DCTL = x_USB_DCTL;
+    }
+
+    /* Restore USB core registers. */
+    USB->GUSBCFG = x_USB_GUSBCFG;
+    USB->DCFG    = x_USB_DCFG;
+
+#if ( FIFO_CNT > 0 )
+    for ( i = 0; i < FIFO_CNT; i++ )
+    {
+      USB_DIEPTXFS[ i ] = x_USB_DIEPTXFS[ i ];
+    }
+#endif
+
+#if ( NUM_EP_USED > 0 )
+    for ( i = 0; i < NUM_EP_USED; i++ )
+    {
+      ep = &dev->ep[ i+1 ];
+      epNum = ep->num;
+
+      tmp = x_USB_EP_CTL[ i ] &
+            ~( USB_DIEP_CTL_CNAK       | USB_DIEP_CTL_SNAK       |
+               USB_DIEP_CTL_SETD0PIDEF | USB_DIEP_CTL_SETD1PIDOF   );
+
+      if ( x_USB_EP_CTL[ i ] & USB_DIEP_CTL_DPIDEOF )
+        tmp |= USB_DIEP_CTL_SETD1PIDOF;
+      else
+        tmp |= USB_DIEP_CTL_SETD0PIDEF;
+
+      if ( x_USB_EP_CTL[ i ] & USB_DIEP_CTL_NAKSTS )
+        tmp |= USB_DIEP_CTL_SNAK;
+      else
+        tmp |= USB_DIEP_CTL_CNAK;
+
+      if ( ep->in )
+      {
+        USB_DINEPS[ epNum ].CTL     = tmp;
+        USB_DINEPS[ epNum ].TSIZ    = x_USB_EP_TSIZ[    i ];
+        USB_DINEPS[ epNum ].DMAADDR = x_USB_EP_DMAADDR[ i ];
+      }
+      else
+      {
+        USB_DOUTEPS[ epNum ].CTL     = tmp;
+        USB_DOUTEPS[ epNum ].TSIZ    = x_USB_EP_TSIZ[    i ];
+        USB_DOUTEPS[ epNum ].DMAADDR = x_USB_EP_DMAADDR[ i ];
+      }
+    }
+#endif
+
+    USB->PCGCCTL   = x_USB_PCGCCTL;
+    USB->DOEPMSK   = x_USB_DOEPMSK;
+    USB->DIEPMSK   = x_USB_DIEPMSK;
+    USB->DAINTMSK  = x_USB_DAINTMSK;
+    USB->DCTL      = x_USB_DCTL;
+    USB->GNPTXFSIZ = x_USB_GNPTXFSIZ;
+    USB->GRXFSIZ   = x_USB_GRXFSIZ;
+    USB->GAHBCFG   = x_USB_GAHBCFG;
+#if defined(_USB_GOTGCTL_MASK)
+    USB->GOTGCTL   = x_USB_GOTGCTL;
+#endif
+    USB->GINTMSK   = x_USB_GINTMSK;
+
+    USB->DCTL |= USB_DCTL_PWRONPRGDONE;
+
+#if ( USB_PWRSAVE_MODE & USB_PWRSAVE_MODE_ENTEREM2 )
+#ifndef __MBED__
+    /* Do not reenter EM2 on interrupt exit. */
+    SCB->SCR &= ~(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk);
+#else
+    usbhal_allow_em2(false);
+#endif
+#endif
+
+    return true;
+  }
+  return false;
+}
+#endif /* if ( USB_PWRSAVE_MODE ) */
+
+#if defined( USB_DOEP0INT_STUPPKTRCVD )
+static void HandleOutEpIntr( uint32_t status, USBD_Ep_TypeDef *ep )
+{
+  uint32_t doeptsiz;
+
+  if ( ep->num == 0 )
+  {
+    if ( status & USB_DOEP0INT_XFERCOMPL )
+    {
+      USB->DOEP0INT = USB_DOEP0INT_XFERCOMPL;
+      doeptsiz      = USB->DOEP0TSIZ;
+
+      if ( ep->state == D_EP_IDLE )
+      {
+        if ( status & USB_DOEP0INT_STUPPKTRCVD )
+        {
+          USB->DOEP0INT = USB_DOEP0INT_STUPPKTRCVD;
+        }
+        status = USBDHAL_GetOutEpInts( ep );
+        doeptsiz = USB->DOEP0TSIZ;
+
+        if ( status & USB_DOEP0INT_SETUP )
+        {
+retry:
+          /* Already started data stage, clear setup */
+          USB->DOEP0INT = USB_DOEP0INT_SETUP;
+          status       &= ~USB_DOEP0INT_SETUP;
+          {
+            int supCnt = ( doeptsiz & _USB_DOEP0TSIZ_SUPCNT_MASK )
+                         >> _USB_DOEP0TSIZ_SUPCNT_SHIFT;
+
+            if ( supCnt == 3 )
+              supCnt = 2;
+
+            dev->setup = &dev->setupPkt[ 2 - supCnt ];
+          }
+          DEBUG_USB_INT_LO_PUTS( "\nS" );
+          USBDEP_Ep0Handler( dev );
+
+          /* Prepare for more setup packets */
+          if ( ep->state == D_EP0_IN_STATUS || ep->state == D_EP_TRANSMITTING )
+          {
+            USBDHAL_StartEp0Setup( dev );
+          }
+        }
+        else /* xfercompl && idle && !setup */
+        {
+            status = USBDHAL_GetOutEpInts( ep );
+            if ( status & USB_DOEP0INT_SETUP )
+              goto retry;
+            USBDHAL_StartEp0Setup( dev );
+        }
+      }
+      else /* ep0state != EP0_IDLE */
+      {
+#ifdef __MBED__
+        if ( ep->state == D_EP_RECEIVING )
+        {
+          int xfer_size = ep->packetSize - (( USB->DOEP0TSIZ & _USB_DOEP0TSIZ_XFERSIZE_MASK )
+                                            >> _USB_DOEP0TSIZ_XFERSIZE_SHIFT);
+          int setup_pkt_received = status & USB_DOEP0INT_SETUP;
+
+          if ( (!setup_pkt_received && xfer_size == 0) ||
+               (setup_pkt_received && xfer_size == 8) )
+          {
+            /* Higher levels need to see the correct transfer amount for ZLPs */
+            ep->remaining = 0;
+            ep->xferred = 0;
+          }
+          else
+          {
+            /* FIXME - does not work if actual read size > 56 */
+            if ( setup_pkt_received ) xfer_size -= 8;
+
+            ep->xferred = xfer_size;
+            ep->remaining -= xfer_size;
+          }
+
+          USBDEP_Ep0Handler( dev );
+        }
+#else
+        if ( ep->state == D_EP_RECEIVING )
+        {
+          if ( ep->remaining > ep->packetSize )
+          {
+            ep->remaining -= ep->packetSize;
+            ep->xferred += ep->packetSize;
+          }
+          else
+          {
+            ep->xferred += ep->remaining;
+            ep->remaining = 0;
+          }
+          USBDEP_Ep0Handler( dev );
+        }
+        else if ( ep->state == D_EP0_OUT_STATUS )
+        {
+          USBDEP_Ep0Handler( dev );
+        }
+#endif
+      }
+    } /* if ( status & USB_DOEP0INT_XFERCOMPL ) */
+
+    if ( status & USB_DOEP0INT_STSPHSERCVD )
+    {
+      USB->DOEP0INT = USB_DOEP0INT_STSPHSERCVD;
+    }
+
+    if ( status & USB_DOEP0INT_SETUP )
+    {
+      USB->DOEP0INT = USB_DOEP0INT_SETUP;
+      {
+        int supCnt = ( USB->DOEP0TSIZ & _USB_DOEP0TSIZ_SUPCNT_MASK )
+                     >> _USB_DOEP0TSIZ_SUPCNT_SHIFT;
+
+        if ( supCnt == 3 )
+          supCnt = 2;
+
+        dev->setup = &dev->setupPkt[ 2 - supCnt ];
+      }
+      DEBUG_USB_INT_LO_PUTS( "\nS" );
+      USBDEP_Ep0Handler( dev );
+    }
+  }
+  else /* epnum != 0 */
+  {
+    if ( status & USB_DOEP_INT_XFERCOMPL )
+    {
+      USB_DOUTEPS[ ep->num ].INT = USB_DOEP_INT_XFERCOMPL;
+
+      ep->xferred = ep->hwXferSize -
+          ( ( USB_DOUTEPS[ ep->num ].TSIZ & _USB_DOEP_TSIZ_XFERSIZE_MASK )>>
+            _USB_DOEP_TSIZ_XFERSIZE_SHIFT );
+      ep->remaining -= ep->xferred;
+
+      USBDEP_EpHandler( ep->addr );
+    }
+  }
+}
+#endif
+
+/** @endcond */
+
+#endif /* defined( USB_DEVICE ) */
+#endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_Silicon_Labs/src/em_usbhal.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_Silicon_Labs/src/em_usbhal.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,799 @@
+/**************************************************************************//**
+ * @file em_usbhal.c
+ * @brief USB protocol stack library, low level USB peripheral access.
+ * @version 3.20.14
+ ******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+
+#include "em_device.h"
+#if defined( USB_PRESENT ) && ( USB_COUNT == 1 )
+#include "em_usb.h"
+#if defined( USB_DEVICE ) || defined( USB_HOST )
+
+#include "em_usbtypes.h"
+#include "em_usbhal.h"
+#if defined( USB_DEVICE )
+#include "em_usbd.h"
+#endif
+#if defined( USB_HOST )
+#include "em_usbh.h"
+#endif
+#include "em_cmu.h"
+#include "em_gpio.h"
+
+/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
+
+#define EPABORT_BREAK_LOOP_COUNT 15000              /* Approx. 100 ms */
+
+/* NOTE: The sequence of error message strings must agree with the    */
+/*       definition of USB_Status_TypeDef enum.                       */
+static const char * const errMsg[] =
+{
+  [  USB_STATUS_OK                  ] = "No errors",
+  [ -USB_STATUS_REQ_ERR             ] = "Setup request error",
+  [ -USB_STATUS_EP_BUSY             ] = "Endpoint is busy",
+  [ -USB_STATUS_REQ_UNHANDLED       ] = "Setup request not handled",
+  [ -USB_STATUS_ILLEGAL             ] = "Illegal operation attempted",
+  [ -USB_STATUS_EP_STALLED          ] = "Endpoint is stalled",
+  [ -USB_STATUS_EP_ABORTED          ] = "Transfer aborted",
+  [ -USB_STATUS_EP_ERROR            ] = "Transfer error",
+  [ -USB_STATUS_EP_NAK              ] = "Endpoint NAK",
+  [ -USB_STATUS_DEVICE_UNCONFIGURED ] = "Device is not configured",
+  [ -USB_STATUS_DEVICE_SUSPENDED    ] = "Device is suspended",
+  [ -USB_STATUS_DEVICE_RESET        ] = "Device has been reset",
+  [ -USB_STATUS_TIMEOUT             ] = "Transfer timeout",
+  [ -USB_STATUS_DEVICE_REMOVED      ] = "Device removed",
+  [ -USB_STATUS_HC_BUSY             ] = "Host channel is busy",
+  [ -USB_STATUS_DEVICE_MALFUNCTION  ] = "Device malfunction",
+  [ -USB_STATUS_PORT_OVERCURRENT    ] = "VBUS overcurrent",
+};
+/** @endcond */
+
+
+/***************************************************************************//**
+ * @brief
+ *   Return an error message string for a given error code.
+ *
+ * @param[in] error
+ *   Error code, see \ref USB_Status_TypeDef.
+ *
+ * @return
+ *   Error message string pointer.
+ ******************************************************************************/
+char *USB_GetErrorMsgString( int error )
+{
+  if ( error >= 0 )
+    return (char*)errMsg[ 0 ];
+
+  return (char*)errMsg[ -error ];
+}
+
+
+#if defined( USB_USE_PRINTF )
+/***************************************************************************//**
+ * @brief
+ *   Format and print a text string given an error code, prepends an optional user
+ *   supplied leader string.
+ *
+ * @param[in] pre
+ *   Optional leader string to prepend to error message string.
+ *
+ * @param[in] error
+ *   Error code, see \ref USB_Status_TypeDef.
+ ******************************************************************************/
+void USB_PrintErrorMsgString( char *pre, int error )
+{
+  if ( pre )
+  {
+    USB_PRINTF( "%s", pre );
+  }
+
+  if ( error > USB_STATUS_OK )
+  {
+    USB_PRINTF( "%d", error );
+  }
+  else
+  {
+    USB_PRINTF( "%s", USB_GetErrorMsgString( error ) );
+  }
+}
+#endif /* defined( USB_USE_PRINTF ) */
+
+/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
+
+#if defined( DEBUG_EFM_USER )
+static void PrintI( int i )
+{
+#if !defined ( USER_PUTCHAR )
+  (void)i;
+#else
+  if ( i >= 10 )
+  {
+    PrintI( i / 10 );
+  }
+
+  DEBUG_USB_API_PUTCHAR( ( i % 10 ) + '0' );
+#endif
+}
+
+void assertEFM( const char *file, int line )
+{
+#if !defined ( USER_PUTCHAR )
+  (void)file;
+#endif
+
+  DEBUG_USB_API_PUTS( "\nASSERT " );
+  DEBUG_USB_API_PUTS( file );
+  DEBUG_USB_API_PUTCHAR( ' ' );
+  PrintI( line );
+  for(;;){}
+}
+#endif /* defined( DEBUG_EFM_USER ) */
+
+#if defined ( USER_PUTCHAR )
+void USB_Puts( const char *p )
+{
+  while( *p )
+    USB_PUTCHAR( *p++ );
+}
+#endif /* defined ( USER_PUTCHAR ) */
+
+void USBHAL_CoreReset( void )
+{
+  USB->PCGCCTL &= ~USB_PCGCCTL_STOPPCLK;
+  USB->PCGCCTL &= ~(USB_PCGCCTL_PWRCLMP | USB_PCGCCTL_RSTPDWNMODULE);
+
+  /* Core Soft Reset */
+  USB->GRSTCTL |= USB_GRSTCTL_CSFTRST;
+  while ( USB->GRSTCTL & USB_GRSTCTL_CSFTRST ) {}
+
+  USBTIMER_DelayUs( 1 );
+
+  /* Wait for AHB master IDLE state. */
+  while ( !( USB->GRSTCTL & USB_GRSTCTL_AHBIDLE ) ) {}
+}
+
+#ifdef USB_DEVICE
+void USBDHAL_Connect( void )
+{
+  USB->DCTL &= ~( DCTL_WO_BITMASK | USB_DCTL_SFTDISCON );
+}
+
+USB_Status_TypeDef USBDHAL_CoreInit( uint32_t totalRxFifoSize,
+                                     uint32_t totalTxFifoSize )
+{
+  uint8_t i, j;
+  uint16_t start, depth;
+  USBD_Ep_TypeDef *ep;
+
+#if !defined( USB_VBUS_SWITCH_NOT_PRESENT )
+  CMU_ClockEnable( cmuClock_GPIO, true );
+  GPIO_PinModeSet( gpioPortF, 5, gpioModePushPull, 0 ); /* Enable VBUSEN pin */
+  USB->ROUTE = USB_ROUTE_PHYPEN | USB_ROUTE_VBUSENPEN;  /* Enable PHY pins.  */
+#else
+  USB->ROUTE = USB_ROUTE_PHYPEN;                        /* Enable PHY pins.  */
+#endif
+
+  USBHAL_CoreReset();                                   /* Reset USB core    */
+
+#if defined( USB_GUSBCFG_FORCEHSTMODE )
+  /* Force Device Mode */
+  USB->GUSBCFG = ( USB->GUSBCFG                                    &
+                  ~(GUSBCFG_WO_BITMASK | USB_GUSBCFG_FORCEHSTMODE )  ) |
+                 USB_GUSBCFG_FORCEDEVMODE;
+#endif
+
+  INT_Enable();
+  USBTIMER_DelayMs( 50 );
+  INT_Disable();
+
+  /* Set device speed */
+  USB->DCFG = ( USB->DCFG & ~_USB_DCFG_DEVSPD_MASK ) | 3; /* Full speed PHY */
+
+  /* Stall on non-zero len status OUT packets (ctrl transfers). */
+  USB->DCFG |= USB_DCFG_NZSTSOUTHSHK;
+
+  /* Set periodic frame interval to 80% */
+  USB->DCFG &= ~_USB_DCFG_PERFRINT_MASK;
+
+  USB->GAHBCFG = ( USB->GAHBCFG & ~_USB_GAHBCFG_HBSTLEN_MASK ) |
+                 USB_GAHBCFG_DMAEN | USB_GAHBCFG_HBSTLEN_INCR;
+
+  /* Ignore frame numbers on ISO transfers. */
+  USB->DCTL = ( USB->DCTL & ~DCTL_WO_BITMASK ) | USB_DCTL_IGNRFRMNUM;
+
+  /* Set Rx FIFO size */
+  start = EFM32_MAX( totalRxFifoSize, MIN_EP_FIFO_SIZE_INWORDS );
+  USB->GRXFSIZ = ( start << _USB_GRXFSIZ_RXFDEP_SHIFT ) &
+                 _USB_GRXFSIZ_RXFDEP_MASK;
+
+  /* Set Tx EP0 FIFO size */
+  depth = EFM32_MAX( dev->ep[ 0 ].fifoSize, MIN_EP_FIFO_SIZE_INWORDS );
+  USB->GNPTXFSIZ = ( ( depth << _USB_GNPTXFSIZ_NPTXFINEPTXF0DEP_SHIFT ) &
+                     _USB_GNPTXFSIZ_NPTXFINEPTXF0DEP_MASK                 ) |
+                   ( ( start << _USB_GNPTXFSIZ_NPTXFSTADDR_SHIFT ) &
+                     _USB_GNPTXFSIZ_NPTXFSTADDR_MASK                      );
+
+
+  /* Set Tx EP FIFO sizes for all IN ep's */
+  for ( j = 1; j <= MAX_NUM_TX_FIFOS; j++ )
+  {
+    for ( i = 1; i <= MAX_NUM_IN_EPS; i++ )
+    {
+      ep = USBD_GetEpFromAddr( USB_SETUP_DIR_MASK | i );
+      if ( ep )                             /* Is EP in use ? */
+      {
+        if ( ep->txFifoNum == j )           /* Is it correct FIFO number ? */
+        {
+          start += depth;
+          depth = EFM32_MAX( ep->fifoSize, MIN_EP_FIFO_SIZE_INWORDS );
+          USB_DIEPTXFS[ ep->txFifoNum - 1 ] =
+                              ( depth << _USB_DIEPTXF1_INEPNTXFDEP_SHIFT   ) |
+                              ( start &  _USB_DIEPTXF1_INEPNTXFSTADDR_MASK );
+        }
+      }
+    }
+  }
+
+  if ( totalRxFifoSize + totalTxFifoSize > MAX_DEVICE_FIFO_SIZE_INWORDS )
+    return USB_STATUS_ILLEGAL;
+
+  if ( start > MAX_DEVICE_FIFO_SIZE_INWORDS )
+    return USB_STATUS_ILLEGAL;
+
+  /* Flush the FIFO's */
+  USBHAL_FlushTxFifo( 0x10 );      /* All Tx FIFO's */
+  USBHAL_FlushRxFifo();            /* The Rx FIFO   */
+
+  /* Disable all device interrupts */
+  USB->DIEPMSK  = 0;
+  USB->DOEPMSK  = 0;
+  USB->DAINTMSK = 0;
+  USB->DIEPEMPMSK = 0;
+
+  /* Disable all EP's, clear all EP ints. */
+  for ( i = 0; i <= MAX_NUM_IN_EPS; i++ )
+  {
+    USB_DINEPS[ i ].CTL  = 0;
+    USB_DINEPS[ i ].TSIZ = 0;
+    USB_DINEPS[ i ].INT  = 0xFFFFFFFF;
+  }
+
+  for ( i = 0; i <= MAX_NUM_OUT_EPS; i++ )
+  {
+    USB_DOUTEPS[ i ].CTL  = 0;
+    USB_DOUTEPS[ i ].TSIZ = 0;
+    USB_DOUTEPS[ i ].INT  = 0xFFFFFFFF;
+  }
+
+#if ( USB_DCTL_SFTDISCON_DEFAULT != 0 )
+  USBD_Connect();
+#endif
+
+  /* Enable VREGO sense. */
+  USB->CTRL |= USB_CTRL_VREGOSEN;
+  USB->IFC   = USB_IFC_VREGOSH | USB_IFC_VREGOSL;
+  USB->IEN   = USB_IFC_VREGOSH | USB_IFC_VREGOSL;
+  /* Force a VREGO interrupt. */
+  if ( USB->STATUS & USB_STATUS_VREGOS)
+    USB->IFS = USB_IFS_VREGOSH;
+  else
+    USB->IFS = USB_IFS_VREGOSL;
+
+  return USB_STATUS_OK;
+}
+
+USB_Status_TypeDef USBDHAL_ReconfigureFifos( uint32_t totalRxFifoSize,
+                                             uint32_t totalTxFifoSize )
+{
+  uint8_t i, j;
+  uint16_t start, depth;
+  USBD_Ep_TypeDef *ep;
+
+  /* Set Rx FIFO size */
+  start = EFM32_MAX( totalRxFifoSize, MIN_EP_FIFO_SIZE_INWORDS );
+  USB->GRXFSIZ = ( start << _USB_GRXFSIZ_RXFDEP_SHIFT ) &
+                 _USB_GRXFSIZ_RXFDEP_MASK;
+
+  /* Set Tx EP0 FIFO size */
+  depth = EFM32_MAX( dev->ep[ 0 ].fifoSize, MIN_EP_FIFO_SIZE_INWORDS );
+  USB->GNPTXFSIZ = ( ( depth << _USB_GNPTXFSIZ_NPTXFINEPTXF0DEP_SHIFT ) &
+                     _USB_GNPTXFSIZ_NPTXFINEPTXF0DEP_MASK                 ) |
+                   ( ( start << _USB_GNPTXFSIZ_NPTXFSTADDR_SHIFT ) &
+                     _USB_GNPTXFSIZ_NPTXFSTADDR_MASK                      );
+
+
+  /* Set Tx EP FIFO sizes for all IN ep's */
+  for ( j = 1; j <= MAX_NUM_TX_FIFOS; j++ )
+  {
+    for ( i = 1; i <= MAX_NUM_IN_EPS; i++ )
+    {
+      ep = USBD_GetEpFromAddr( USB_SETUP_DIR_MASK | i );
+      if ( ep )                             /* Is EP in use ? */
+      {
+        if ( ep->txFifoNum == j )           /* Is it correct FIFO number ? */
+        {
+          start += depth;
+          depth = EFM32_MAX( ep->fifoSize, MIN_EP_FIFO_SIZE_INWORDS );
+          USB_DIEPTXFS[ ep->txFifoNum - 1 ] =
+                              ( depth << _USB_DIEPTXF1_INEPNTXFDEP_SHIFT   ) |
+                              ( start &  _USB_DIEPTXF1_INEPNTXFSTADDR_MASK );
+        }
+      }
+    }
+  }
+
+  if ( totalRxFifoSize + totalTxFifoSize > MAX_DEVICE_FIFO_SIZE_INWORDS )
+    return USB_STATUS_ILLEGAL;
+
+  if ( start > MAX_DEVICE_FIFO_SIZE_INWORDS )
+    return USB_STATUS_ILLEGAL;
+
+  /* Flush the FIFO's */
+  USBHAL_FlushTxFifo( 0x10 );      /* All Tx FIFO's */
+  USBHAL_FlushRxFifo();            /* The Rx FIFO   */
+
+  return USB_STATUS_OK;
+}
+
+void USBDHAL_Disconnect( void )
+{
+  USB->DCTL = ( USB->DCTL & ~DCTL_WO_BITMASK ) | USB_DCTL_SFTDISCON;
+}
+
+void USBDHAL_AbortEpIn( USBD_Ep_TypeDef *ep )
+{
+  /* Clear epdis & inepnakeff INT's */
+  USB_DINEPS[ ep->num ].INT |= USB_DIEP_INT_EPDISBLD |
+                               USB_DIEP_INT_INEPNAKEFF;
+
+  /* Enable epdis & inepnakeff INT's */
+  USB->DIEPMSK |= USB_DIEPMSK_EPDISBLDMSK | USB_DIEPMSK_INEPNAKEFFMSK;
+  USB_DINEPS[ ep->num ].CTL = ( USB_DINEPS[ ep->num ].CTL  &
+                                ~DEPCTL_WO_BITMASK           ) |
+                              USB_DIEP_CTL_SNAK;
+
+  /* Wait for inepnakeff INT */
+  while ( !( USBDHAL_GetInEpInts( ep ) & USB_DIEP_INT_INEPNAKEFF ) ) {}
+  USB_DINEPS[ ep->num ].INT = USB_DIEP_INT_INEPNAKEFF;
+  USB->DIEPMSK &= ~USB_DIEPMSK_INEPNAKEFFMSK;
+
+  DEBUG_USB_INT_LO_PUTCHAR( '.' );
+
+  USBDHAL_SetEPDISNAK( ep );
+  /* Wait for epdis INT */
+  while ( !( USBDHAL_GetInEpInts( ep ) & USB_DIEP_INT_EPDISBLD ) ) {}
+  USB_DINEPS[ ep->num ].INT = USB_DIEP_INT_EPDISBLD;
+  USB->DIEPMSK &= ~USB_DIEPMSK_EPDISBLDMSK;
+  USBHAL_FlushTxFifo( ep->txFifoNum );
+
+  /* Clear any interrupts generated by the abort sequence. */
+  NVIC_ClearPendingIRQ( USB_IRQn );
+
+  DEBUG_USB_INT_LO_PUTCHAR( '.' );
+}
+
+void USBDHAL_AbortEpOut( USBD_Ep_TypeDef *ep )
+{
+  int cnt;
+
+  /* Clear epdis INT's */
+  USB_DOUTEPS[ ep->num ].INT |= USB_DOEP_INT_EPDISBLD;
+
+  /* Clear Global OUT NAK if already set */
+  USB->DCTL = ( USB->DCTL & ~DCTL_WO_BITMASK ) | USB_DCTL_CGOUTNAK;
+  USB->GINTMSK |= USB_GINTMSK_GOUTNAKEFFMSK;    /* Enable GOUTNAKEFF int */
+
+  /* Set Global OUT NAK */
+  USB->DCTL = ( USB->DCTL & ~DCTL_WO_BITMASK ) | USB_DCTL_SGOUTNAK;
+
+  /* Wait for goutnakeff */
+  cnt = EPABORT_BREAK_LOOP_COUNT;
+  while ( !( USB->GINTSTS & USB_GINTSTS_GOUTNAKEFF ) && cnt )
+  {
+    cnt--;
+  }
+
+  USB->GINTMSK &= ~USB_GINTMSK_GOUTNAKEFFMSK; /* Disable GOUTNAKEFF int  */
+  USB->DOEPMSK |= USB_DOEPMSK_EPDISBLDMSK;    /* Enable EPDIS interrupt  */
+
+  DEBUG_USB_INT_LO_PUTCHAR( ',' );
+
+  USBDHAL_SetEPDISNAK( ep );                  /* Disable ep */
+
+  /* Wait for epdis INT */
+  cnt = EPABORT_BREAK_LOOP_COUNT;
+  while ( !( USBDHAL_GetOutEpInts( ep ) & USB_DOEP_INT_EPDISBLD ) && cnt )
+  {
+    cnt--;
+  }
+
+  USB_DOUTEPS[ ep->num ].INT = USB_DOEP_INT_EPDISBLD;
+  USB->DOEPMSK &= ~USB_DOEPMSK_EPDISBLDMSK;     /* Disable EPDIS interrupt */
+
+  /* Clear Global OUT NAK */
+  USB->DCTL = ( USB->DCTL & ~DCTL_WO_BITMASK ) | USB_DCTL_CGOUTNAK;
+
+  /* Clear any interrupts generated by the abort sequence. */
+  NVIC_ClearPendingIRQ( USB_IRQn );
+
+  DEBUG_USB_INT_LO_PUTCHAR( ',' );
+}
+
+void USBDHAL_AbortAllEps( void )
+{
+  int i, cnt;
+  USBD_Ep_TypeDef *ep;
+  uint16_t im, om, inmask=0, outmask=0;
+
+  /* Clear epdis & inepnakeff INT's */
+  for ( i = 1; i <= NUM_EP_USED; i++ )
+  {
+    ep = &dev->ep[i];
+    if ( ep->state != D_EP_IDLE )
+    {
+      if ( ep->in )
+      {
+        inmask |= ep->mask;
+        USB_DINEPS[ ep->num ].INT |= USB_DIEP_INT_EPDISBLD |
+                                     USB_DIEP_INT_INEPNAKEFF;
+      }
+      else
+      {
+        outmask |= ep->mask;
+        USB_DOUTEPS[ ep->num ].INT |= USB_DOEP_INT_EPDISBLD;
+      }
+    }
+  }
+
+  if ( inmask )
+  {
+    /* Enable epdis & inepnakeff INT's */
+    USB->DIEPMSK |= USB_DIEPMSK_EPDISBLDMSK | USB_DIEPMSK_INEPNAKEFFMSK;
+
+    /* Set NAK on all IN ep's */
+    im = inmask;
+    for ( i = 1; i <= NUM_EP_USED; i++ )
+    {
+      ep = &dev->ep[i];
+      if ( im & ep->mask )
+      {
+        USB_DINEPS[ ep->num ].CTL = ( USB_DINEPS[ ep->num ].CTL &
+                                      ~DEPCTL_WO_BITMASK          ) |
+                                    USB_DIEP_CTL_SNAK;
+      }
+    }
+  }
+
+  if ( outmask )
+  {
+    /* Clear Global OUT NAK if already set */
+    USB->DCTL = ( USB->DCTL & ~DCTL_WO_BITMASK ) | USB_DCTL_CGOUTNAK;
+
+    USB->GINTMSK |= USB_GINTMSK_GOUTNAKEFFMSK;    /* Enable GOUTNAKEFF int */
+
+    /* Set Global OUT NAK */
+    USB->DCTL = ( USB->DCTL & ~DCTL_WO_BITMASK ) | USB_DCTL_SGOUTNAK;
+
+    /* Wait for goutnakeff */
+    cnt = EPABORT_BREAK_LOOP_COUNT;
+    while ( !( USB->GINTSTS & USB_GINTSTS_GOUTNAKEFF ) && cnt )
+    {
+      cnt--;
+    }
+    USB->GINTMSK &= ~USB_GINTMSK_GOUTNAKEFFMSK; /* Disable GOUTNAKEFF int  */
+    USB->DOEPMSK |= USB_DOEPMSK_EPDISBLDMSK;    /* Enable EPDIS interrupt  */
+  }
+
+  if ( inmask )
+  {
+    /* Wait for inepnakeff INT on all IN ep's */
+    im  = inmask;
+    cnt = EPABORT_BREAK_LOOP_COUNT;
+    do
+    {
+      for ( i = 1; i <= NUM_EP_USED; i++ )
+      {
+        ep = &dev->ep[i];
+        if ( im & ep->mask )
+        {
+          if ( USBDHAL_GetInEpInts( ep ) & USB_DIEP_INT_INEPNAKEFF )
+          {
+            USB_DINEPS[ ep->num ].INT = USB_DIEP_INT_INEPNAKEFF;
+            im &= ~ep->mask;
+          }
+        }
+      }
+      cnt--;
+    } while ( im && cnt );
+    USB->DIEPMSK &= ~USB_DIEPMSK_INEPNAKEFFMSK;
+  }
+
+  DEBUG_USB_INT_LO_PUTCHAR( '\'' );
+
+  /* Disable ep's */
+  for ( i = 1; i <= NUM_EP_USED; i++ )
+  {
+    ep = &dev->ep[i];
+    if ( ep->state != D_EP_IDLE )
+    {
+      USBDHAL_SetEPDISNAK( ep );
+    }
+  }
+
+  /* Wait for epdis INT */
+  im  = inmask;
+  om  = outmask;
+  cnt = EPABORT_BREAK_LOOP_COUNT;
+  do
+  {
+    for ( i = 1; i <= NUM_EP_USED; i++ )
+    {
+      ep = &dev->ep[i];
+      if ( ep->in && ( im & ep->mask ) )
+      {
+        if ( USBDHAL_GetInEpInts( ep ) & USB_DIEP_INT_EPDISBLD )
+        {
+          USB_DINEPS[ ep->num ].INT = USB_DIEP_INT_EPDISBLD;
+          im &= ~ep->mask;
+        }
+      }
+
+      if ( !ep->in && ( om & ep->mask ) )
+      {
+        if ( USBDHAL_GetOutEpInts( ep ) & USB_DOEP_INT_EPDISBLD )
+        {
+          USB_DOUTEPS[ ep->num ].INT = USB_DOEP_INT_EPDISBLD;
+          om &= ~ep->mask;
+        }
+      }
+    }
+    cnt--;
+  } while ( ( im || om ) && cnt );
+
+  if ( inmask )
+  {
+    USB->DIEPMSK &= ~USB_DIEPMSK_EPDISBLDMSK;     /* Disable EPDIS interrupt */
+    USBHAL_FlushTxFifo( 0x10 );                   /* Flush all Tx FIFO's     */
+  }
+
+  if ( outmask )
+  {
+    USB->DOEPMSK &= ~USB_DOEPMSK_EPDISBLDMSK;     /* Disable EPDIS interrupt */
+    /* Clear Global OUT NAK */
+    USB->DCTL = ( USB->DCTL & ~DCTL_WO_BITMASK ) | USB_DCTL_CGOUTNAK;
+  }
+
+  DEBUG_USB_INT_LO_PUTCHAR( '\'' );
+}
+
+void USBDHAL_AbortAllTransfers( USB_Status_TypeDef reason )
+{
+  int i;
+  USBD_Ep_TypeDef *ep;
+  USB_XferCompleteCb_TypeDef callback;
+
+  if ( reason != USB_STATUS_DEVICE_RESET )
+  {
+    USBDHAL_AbortAllEps();
+  }
+
+  for ( i = 1; i <= NUM_EP_USED; i++ )
+  {
+    ep = &(dev->ep[i]);
+    if ( ep->state != D_EP_IDLE )
+    {
+      ep->state = D_EP_IDLE;
+      if ( ep->xferCompleteCb )
+      {
+        callback = ep->xferCompleteCb;
+        ep->xferCompleteCb = NULL;
+
+        if ( ( dev->lastState == USBD_STATE_CONFIGURED ) &&
+             ( dev->state     == USBD_STATE_ADDRESSED  )    )
+        {
+          USBDHAL_DeactivateEp( ep );
+        }
+
+        DEBUG_TRACE_ABORT( reason );
+        callback( reason, ep->xferred, ep->remaining );
+      }
+    }
+  }
+
+  /* Clear any interrupts generated by the abort sequence. */
+  NVIC_ClearPendingIRQ( USB_IRQn );
+}
+#endif /* defined( USB_DEVICE ) */
+
+#if defined( USB_HOST )
+USB_Status_TypeDef USBHHAL_CoreInit( uint32_t rxFifoSize,
+                                     uint32_t nptxFifoSize,
+                                     uint32_t ptxFifoSize )
+{
+  uint8_t i;
+
+  rxFifoSize   /= 4;              /* Convert from byte count to word count.  */
+  nptxFifoSize /= 4;
+  ptxFifoSize  /= 4;
+
+  CMU_ClockEnable( cmuClock_GPIO, true );
+  GPIO_PinModeSet( gpioPortF, 5, gpioModePushPull, 0 ); /* Enable VBUSEN pin */
+
+#if ( USB_VBUSOVRCUR_PORT != USB_VBUSOVRCUR_PORT_NONE )
+  /* Enable VBUS overcurrent flag pin. */
+  GPIO_PinModeSet( USB_VBUSOVRCUR_PORT, USB_VBUSOVRCUR_PIN, gpioModeInput, 0 );
+#endif
+
+  USB->ROUTE = USB_ROUTE_PHYPEN | USB_ROUTE_VBUSENPEN;  /* Enable PHY pins.  */
+  USBHAL_CoreReset();                                   /* Reset USB core    */
+
+  /* Force Host Mode */
+  USB->GUSBCFG = ( USB->GUSBCFG                                     &
+                   ~(GUSBCFG_WO_BITMASK | USB_GUSBCFG_FORCEDEVMODE )  ) |
+                 USB_GUSBCFG_FORCEHSTMODE;
+
+  INT_Enable();
+  USBTIMER_DelayMs( 100 );
+  INT_Disable();
+
+  /* Set 48 MHz PHY clock, FS/LS mode */
+  USB->HCFG = ( USB->HCFG & ~_USB_HCFG_FSLSPCLKSEL_MASK ) |
+              ( 1 << _USB_HCFG_FSLSPCLKSEL_SHIFT        ) |
+              ( USB_HCFG_FSLSSUPP                       );
+
+  USB->GAHBCFG = ( USB->GAHBCFG & ~_USB_GAHBCFG_HBSTLEN_MASK ) |
+                 USB_GAHBCFG_DMAEN | USB_GAHBCFG_HBSTLEN_INCR;
+
+  /* Set Rx FIFO size */
+  USB->GRXFSIZ = ( rxFifoSize << _USB_GRXFSIZ_RXFDEP_SHIFT ) &
+                 _USB_GRXFSIZ_RXFDEP_MASK;
+
+  /* Set Tx FIFO sizes */
+  USB->GNPTXFSIZ = ( ( nptxFifoSize <<
+                       _USB_GNPTXFSIZ_NPTXFINEPTXF0DEP_SHIFT ) &
+                     _USB_GNPTXFSIZ_NPTXFINEPTXF0DEP_MASK        ) |
+                   ( ( rxFifoSize <<
+                       _USB_GNPTXFSIZ_NPTXFSTADDR_SHIFT      ) &
+                     _USB_GNPTXFSIZ_NPTXFSTADDR_MASK             );
+
+  USB->HPTXFSIZ  = ( ( ptxFifoSize  << _USB_HPTXFSIZ_PTXFSIZE_SHIFT   ) &
+                     _USB_HPTXFSIZ_PTXFSIZE_MASK                          ) |
+                   ( ( ( rxFifoSize + nptxFifoSize )
+                                    << _USB_HPTXFSIZ_PTXFSTADDR_SHIFT ) &
+                     _USB_HPTXFSIZ_PTXFSTADDR_MASK                        );
+
+  /* Flush Tx and Rx FIFO's */
+  USBHAL_FlushTxFifo( 0x10 );
+  USBHAL_FlushRxFifo();
+
+  for ( i = 0; i < MAX_NUM_HOSTCHANNELS; i++ )
+  {
+    USB->HC[ i ].CHAR = USB_HC_CHAR_CHDIS;      /* Disable channel          */
+    USB->HC[ i ].INT = 0xFFFFFFFF;              /* Clear pending interrupts */
+  }
+
+  /* Enable and halt all channels */
+  for ( i = 0; i < MAX_NUM_HOSTCHANNELS; i++ )
+  {
+    USB->HC[ i ].CHAR |= USB_HC_CHAR_CHDIS | USB_HC_CHAR_CHENA;
+    do
+    {
+      __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
+    }
+    while ( USB->HC[ i ].CHAR & USB_HC_CHAR_CHENA );
+  }
+
+  /* Disable all interrupts */
+  for ( i = 0; i < MAX_NUM_HOSTCHANNELS; i++ )
+  {
+    USB->HC[ i ].INTMSK = 0;
+  }
+
+  USB->HAINTMSK = 0;
+
+  return USB_STATUS_OK;
+}
+
+void USBHHAL_HCHalt( int hcnum, uint32_t hcchar )
+{
+  hcchar |= USB_HC_CHAR_CHENA | USB_HC_CHAR_CHDIS;
+  USB->HC[ hcnum ].CHAR = hcchar;
+}
+
+void USBHHAL_HCInit( int hcnum )
+{
+  USBH_Ep_TypeDef *ep;
+
+  ep = hcs[ hcnum ].ep;
+  USB->HC[ hcnum ].INT = 0xFFFFFFFF;      /* Clear all interrupt flags      */
+
+  switch ( ep->type )                     /* Enable host channel int. types */
+  {
+    case USB_EPTYPE_CTRL:
+    case USB_EPTYPE_BULK:
+    case USB_EPTYPE_INTR:
+      USB->HC[ hcnum ].INTMSK = USB_HC_INT_CHHLTD;
+      break;
+  }
+
+  hcs[ hcnum ].errorCnt = 0;
+
+  USB->HAINTMSK |= 1 << hcnum;            /* Enable host channel interrupt  */
+
+  USB->HC[ hcnum ].CHAR =                 /* Program HCCHAR register        */
+      ( ep->parentDevice->addr     <<   _USB_HC_CHAR_DEVADDR_SHIFT     ) |
+      ( ( ep->addr & USB_EPNUM_MASK ) << _USB_HC_CHAR_EPNUM_SHIFT      ) |
+      ( ep->type                   <<   _USB_HC_CHAR_EPTYPE_SHIFT      ) |
+      ( ep->packetSize             <<   _USB_HC_CHAR_MPS_SHIFT         ) |
+      ( ep->in                      ?   USB_HC_CHAR_EPDIR         : 0  ) |
+      ( ep->parentDevice->speed ==
+                           HPRT_L_SPEED >> _USB_HPRT_PRTSPD_SHIFT
+                                    ?   USB_HC_CHAR_LSPDDEV       : 0  );
+}
+
+void USBHHAL_HCStart( int hcnum )
+{
+  USBH_Hc_TypeDef *hc;
+  uint16_t packets, len;
+
+  hc = &hcs[ hcnum ];
+  hc->status = 0;
+  hc->idle = false;
+
+  if ( hc->remaining > 0 )
+  {
+    packets = ( hc->remaining + hc->ep->packetSize - 1 ) / hc->ep->packetSize;
+  }
+  else
+  {
+    packets = 1;
+  }
+
+  if ( hc->ep->in )
+  {
+    len = packets * hc->ep->packetSize;
+  }
+  else
+  {
+    len = hc->remaining;
+  }
+
+  /* Initialize the HCTSIZn register */
+  hc->hwXferSize = len;
+  USB->HC[ hcnum ].TSIZ =
+          ( ( len             << _USB_HC_TSIZ_XFERSIZE_SHIFT ) &
+                                 _USB_HC_TSIZ_XFERSIZE_MASK       ) |
+          ( ( packets         << _USB_HC_TSIZ_PKTCNT_SHIFT   ) &
+                                 _USB_HC_TSIZ_PKTCNT_MASK         ) |
+          ( ( hc->ep->toggle  << _USB_HC_TSIZ_PID_SHIFT      ) &
+                                 _USB_HC_TSIZ_PID_MASK            );
+
+  USB->HC[ hcnum ].DMAADDR = (uint32_t)hc->buf;
+
+  USBHHAL_HCActivate( hcnum,
+                      USB->HC[ hcnum ].CHAR,
+                      hc->ep->type == USB_EPTYPE_INTR );
+}
+#endif /* defined( USB_HOST ) */
+
+/** @endcond */
+
+#endif /* defined( USB_DEVICE ) || defined( USB_HOST ) */
+#endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */
diff -r 2c525a50f1b6 -r 53949e6131f6 targets/TARGET_Silicon_Labs/src/em_usbtimer.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_Silicon_Labs/src/em_usbtimer.c	Thu Jul 27 12:14:04 2017 +0100
@@ -0,0 +1,381 @@
+/***************************************************************************//**
+ * @file em_usbtimer.c
+ * @brief USB protocol stack library, timer API.
+ * @version 3.20.14
+ *******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+
+#include "em_device.h"
+#if defined( USB_PRESENT ) && ( USB_COUNT == 1 )
+#include "em_usb.h"
+#if defined( USB_DEVICE ) || defined( USB_HOST )
+#include "em_cmu.h"
+#include "em_timer.h"
+#include "em_usbtypes.h"
+#include "em_usbhal.h"
+
+#include "device_peripherals.h"
+
+/*
+ *  Use one HW timer to serve n software milisecond timers.
+ *  A timer is, when running, in a linked list of timers.
+ *  A given timers timeout period is the acculmulated timeout
+ *  of all timers preceeding it in the queue.
+ *  This makes timer start (linked list insertion) computing intensive,
+ *  but the checking of the queue at each tick very effective.
+ *             ______          ______          ______
+ *            |      |    --->|      |    --->|      |
+ *   head --> |      |   |    |      |   |    |      |
+ *            |______|---     |______|---     |______|---/ NULL
+ */
+
+/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
+
+#ifndef USB_TIMER
+#error HW platform must define the timer to use for USB
+#endif
+
+#if ( USB_TIMER == USB_TIMER0 ) && ( TIMER_COUNT >= 1 )
+  #define TIMER             TIMER0
+  #define TIMER_CLK         cmuClock_TIMER0
+  #define TIMER_IRQ         TIMER0_IRQn
+  #define TIMER_IRQHandler  TIMER0_IRQHandler
+
+#elif ( USB_TIMER == USB_TIMER1 ) && ( TIMER_COUNT >= 2 )
+  #define TIMER             TIMER1
+  #define TIMER_CLK         cmuClock_TIMER1
+  #define TIMER_IRQ         TIMER1_IRQn
+  #define TIMER_IRQHandler  TIMER1_IRQHandler
+
+#elif ( USB_TIMER == USB_TIMER2 ) && ( TIMER_COUNT >= 3 )
+  #define TIMER             TIMER2
+  #define TIMER_CLK         cmuClock_TIMER2
+  #define TIMER_IRQ         TIMER2_IRQn
+  #define TIMER_IRQHandler  TIMER2_IRQHandler
+
+#elif ( USB_TIMER == USB_TIMER3 ) && ( TIMER_COUNT == 4 )
+  #define TIMER             TIMER3
+  #define TIMER_CLK         cmuClock_TIMER3
+  #define TIMER_IRQ         TIMER3_IRQn
+  #define TIMER_IRQHandler  TIMER3_IRQHandler
+
+#else
+#error "Illegal USB TIMER definition"
+#endif
+
+typedef struct _timer
+{
+  uint32_t                  timeout;  /* Delta value relative to prev. timer */
+  struct _timer             *next;
+  USBTIMER_Callback_TypeDef callback;
+  bool                      running;
+} USBTIMER_Timer_TypeDef;
+
+#if ( NUM_QTIMERS > 0 )
+static USBTIMER_Timer_TypeDef timers[ NUM_QTIMERS ];
+static USBTIMER_Timer_TypeDef *head = NULL;
+#endif
+
+static uint32_t ticksPrMs, ticksPr1us, ticksPr10us, ticksPr100us;
+
+#if ( NUM_QTIMERS > 0 )
+
+static void TimerTick( void );
+
+void TIMER_IRQHandler( void )
+{
+  uint32_t flags;
+
+  flags = TIMER_IntGet( TIMER );
+
+  if ( flags & TIMER_IF_CC0 )
+  {
+    TIMER_IntClear( TIMER, TIMER_IFC_CC0 );
+    TIMER_CompareSet( TIMER, 0, TIMER_CaptureGet( TIMER, 0 ) + ticksPrMs );
+    TimerTick();
+  }
+}
+#endif /* ( NUM_QTIMERS > 0 ) */
+
+static void DelayTicks( uint16_t ticks )
+{
+  uint16_t startTime;
+  volatile uint16_t now;
+
+  if ( ticks )
+  {
+    startTime = TIMER_CounterGet( TIMER );
+    do
+    {
+      now = TIMER_CounterGet(TIMER);
+    } while ( (uint16_t)( now - startTime ) < ticks );
+  }
+}
+
+/** @endcond */
+
+/** @addtogroup USB_COMMON
+ *  @{*/
+
+/***************************************************************************//**
+ * @brief
+ *   Active wait millisecond delay function. Can also be used inside
+ *   interrupt handlers.
+ *
+ * @param[in] msec
+ *   Number of milliseconds to wait.
+ ******************************************************************************/
+void USBTIMER_DelayMs( uint32_t msec )
+{
+  uint64_t totalTicks;
+
+  totalTicks = (uint64_t)ticksPrMs * msec;
+  while ( totalTicks > 20000 )
+  {
+    DelayTicks( 20000 );
+    totalTicks -= 20000;
+  }
+  DelayTicks( (uint16_t)totalTicks );
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Active wait microsecond delay function. Can also be used inside
+ *   interrupt handlers.
+ *
+ * @param[in] usec
+ *   Number of microseconds to wait.
+ ******************************************************************************/
+void USBTIMER_DelayUs( uint32_t usec )
+{
+  uint64_t totalTicks;
+
+  totalTicks = (uint64_t)ticksPr1us * usec;
+  if ( totalTicks == 0 )
+  {
+    usec /= 10;
+    totalTicks = (uint64_t)ticksPr10us * usec;
+
+    if ( totalTicks == 0 )
+    {
+      usec /= 10;
+      totalTicks = (uint64_t)ticksPr100us * usec;
+    }
+  }
+
+  while ( totalTicks > 60000 )
+  {
+    DelayTicks( 60000 );
+    totalTicks -= 60000;
+  }
+  DelayTicks( (uint16_t)totalTicks );
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Activate the hardware timer used to pace the 1 millisecond timer system.
+ *
+ * @details
+ *   Call this function whenever the HFPERCLK frequency is changed.
+ *   This function is initially called by HOST and DEVICE stack xxxx_Init()
+ *   functions.
+ ******************************************************************************/
+void USBTIMER_Init( void )
+{
+  uint32_t freq;
+  TIMER_Init_TypeDef timerInit     = TIMER_INIT_DEFAULT;
+  TIMER_InitCC_TypeDef timerCCInit = TIMER_INITCC_DEFAULT;
+
+  freq = CMU_ClockFreqGet( cmuClock_HFPER );
+  ticksPrMs = ( freq + 500 ) / 1000;
+  ticksPr1us = ( freq + 500000 ) / 1000000;
+  ticksPr10us = ( freq + 50000 ) / 100000;
+  ticksPr100us = ( freq + 5000 ) / 10000;
+
+  timerCCInit.mode = timerCCModeCompare;
+  CMU_ClockEnable( TIMER_CLK, true );
+  TIMER_TopSet( TIMER, 0xFFFF );
+  TIMER_InitCC( TIMER, 0, &timerCCInit );
+  TIMER_Init( TIMER, &timerInit );
+
+#if ( NUM_QTIMERS > 0 )
+  TIMER_IntClear( TIMER, 0xFFFFFFFF );
+  TIMER_IntEnable( TIMER, TIMER_IEN_CC0 );
+  TIMER_CompareSet( TIMER, 0, TIMER_CounterGet( TIMER ) + ticksPrMs );
+  NVIC_ClearPendingIRQ( TIMER_IRQ );
+  NVIC_EnableIRQ( TIMER_IRQ );
+#endif /* ( NUM_QTIMERS > 0 ) */
+}
+
+#if ( NUM_QTIMERS > 0 ) || defined( DOXY_DOC_ONLY )
+/***************************************************************************//**
+ * @brief
+ *   Start a timer.
+ *
+ * @details
+ *   If the timer is already running, it will be restarted with new timeout.
+ *
+ * @param[in] id
+ *   Timer id (0..).
+ *
+ * @param[in] timeout
+ *   Number of milliseconds before timer will elapse.
+ *
+ * @param[in] callback
+ *   Function to be called on timer elapse, ref. @ref USBTIMER_Callback_TypeDef.
+ ******************************************************************************/
+void USBTIMER_Start( uint32_t id, uint32_t timeout,
+                     USBTIMER_Callback_TypeDef callback )
+{
+  uint32_t accumulated;
+  USBTIMER_Timer_TypeDef *this, **last;
+
+  INT_Disable();
+
+  if ( timers[ id ].running )
+  {
+    USBTIMER_Stop( id );
+  }
+
+  if ( timeout == 0 )
+  {
+    callback();
+    INT_Enable();
+    return;
+  }
+
+  timers[ id ].running  = true;
+  timers[ id ].callback = callback;
+  timers[ id ].next     = NULL;
+
+  if ( !head )                                        /* Queue empty ? */
+  {
+    timers[ id ].timeout  = timeout;
+    head = &timers[ id ];
+  }
+  else
+  {
+    this = head;
+    last = &head;
+    accumulated = 0;
+
+    /* Do a sorted insert */
+    while ( this  )
+    {
+      if ( timeout < accumulated + this->timeout )  /* Insert before "this" ? */
+      {
+        timers[ id ].timeout  = timeout - accumulated;
+        timers[ id ].next     = this;
+        *last = &timers[ id ];
+        this->timeout -= timers[ id ].timeout;        /* Adjust timeout     */
+        break;
+      }
+      else if ( this->next == NULL )                  /* At end of queue ?  */
+      {
+        timers[ id ].timeout  = timeout - accumulated - this->timeout;
+        this->next = &timers[ id ];
+        break;
+      }
+      accumulated += this->timeout;
+      last = &this->next;
+      this = this->next;
+    }
+  }
+
+  INT_Enable();
+}
+
+/***************************************************************************//**
+ * @brief
+ *   Stop a timer.
+ *
+ * @param[in] id
+ *   Timer id (0..).
+ ******************************************************************************/
+void USBTIMER_Stop( uint32_t id )
+{
+  USBTIMER_Timer_TypeDef *this, **last;
+
+  INT_Disable();
+
+  if ( head )                                           /* Queue empty ?    */
+  {
+    this = head;
+    last = &head;
+    timers[ id ].running = false;
+
+    while ( this  )
+    {
+      if ( this == &timers[ id ] )                      /* Correct timer ?  */
+      {
+        if ( this->next )
+        {
+          this->next->timeout += timers[ id ].timeout;  /* Adjust timeout   */
+        }
+        *last = this->next;
+        break;
+      }
+      last = &this->next;
+      this = this->next;
+    }
+  }
+
+  INT_Enable();
+}
+#endif /* ( NUM_QTIMERS > 0 ) */
+
+/** @} (end addtogroup USB_COMMON) */
+
+#if ( NUM_QTIMERS > 0 )
+/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
+
+static void TimerTick( void )
+{
+  USBTIMER_Callback_TypeDef cb;
+
+  INT_Disable();
+
+  if ( head )
+  {
+    head->timeout--;
+
+    while ( head  )
+    {
+      if ( head->timeout == 0 )
+      {
+        cb = head->callback;
+        head->running = false;
+        head = head->next;
+        /* The callback may place new items in the queue !!! */
+        if ( cb )
+        {
+          (cb)();
+        }
+        continue; /* There might be more than one timeout pr. tick */
+      }
+      break;
+    }
+  }
+
+  INT_Enable();
+}
+/** @endcond */
+#endif /* ( NUM_QTIMERS > 0 ) */
+
+#endif /* defined( USB_DEVICE ) || defined( USB_HOST ) */
+#endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */