diff --git a/License.md b/License.md index d7ed168785..2a5a6a5225 100644 --- a/License.md +++ b/License.md @@ -9,7 +9,6 @@ Note: most license information is available on top of each source file [BSD 3-Clause License](#bsd-3-clause-license) is used for: -* cores/arduino/stm32/ mainly contains source from STMicroelectronics. * system/Drivers/STM32*xx_HAL_Driver folders include the STMicroelectronics HAL Drivers. * system/Middlewares/OpenAMP folders. * libraries/VirtIO/ OpenAMP part except virtio* implementation see [MIT License](#mit-license) @@ -17,6 +16,7 @@ Note: most license information is available on top of each source file [Ultimate Liberty License](#Ultimate-Liberty-License) is used for: * system/Middlewares/STM32_USB_*_Library/ folders +* libraries/USBDevice/ (see header) [Apache License](#apache-license) is used for: * system/Drivers/CMSIS folder includes the STMicroelectronics CMSIS device diff --git a/cmake/set_base_arduino_config.cmake b/cmake/set_base_arduino_config.cmake index d678bebb27..39e1ca3fcc 100644 --- a/cmake/set_base_arduino_config.cmake +++ b/cmake/set_base_arduino_config.cmake @@ -55,11 +55,9 @@ target_include_directories(base_config INTERFACE "${BUILD_CORE_PATH}" "${BUILD_CORE_PATH}/avr" "${BUILD_CORE_PATH}/stm32" - "${BUILD_CORE_PATH}/stm32/usb" - "${BUILD_CORE_PATH}/stm32/usb/hid" - "${BUILD_CORE_PATH}/stm32/usb/cdc" "${BUILD_LIB_PATH}/SrcWrapper/inc" "${BUILD_LIB_PATH}/SrcWrapper/inc/LL" + "${BUILD_LIB_PATH}/USBDevice/inc" "${BUILD_LIB_PATH}/VirtIO/inc" "${BUILD_SYSTEM_PATH}/Middlewares/ST/STM32_USB_Device_Library/Core/Inc" "${BUILD_SYSTEM_PATH}/Middlewares/ST/STM32_USB_Device_Library/Core/Src" diff --git a/cmake/templates/easy_cmake.cmake b/cmake/templates/easy_cmake.cmake index 66f5d89be6..d894c3da03 100644 --- a/cmake/templates/easy_cmake.cmake +++ b/cmake/templates/easy_cmake.cmake @@ -91,6 +91,7 @@ build_sketch(TARGET "{{tgtname or "@binary_name_here@"}}" # SD # Wire # SPI + # USBDevice # VirtIO ) diff --git a/cores/arduino/CMakeLists.txt b/cores/arduino/CMakeLists.txt index ded62991cc..3577e9d518 100644 --- a/cores/arduino/CMakeLists.txt +++ b/cores/arduino/CMakeLists.txt @@ -32,21 +32,8 @@ add_library(core_bin STATIC EXCLUDE_FROM_ALL Print.cpp RingBuffer.cpp stm32/startup_stm32yyxx.S - stm32/usb/cdc/cdc_queue.c - stm32/usb/cdc/usbd_cdc.c - stm32/usb/cdc/usbd_cdc_if.c - stm32/usb/hid/usbd_hid_composite.c - stm32/usb/hid/usbd_hid_composite_if.c - stm32/usb/usb_device_core.c - stm32/usb/usb_device_ctlreq.c - stm32/usb/usb_device_ioreq.c - stm32/usb/usbd_conf.c - stm32/usb/usbd_desc.c - stm32/usb/usbd_ep_conf.c - stm32/usb/usbd_if.c Stream.cpp Tone.cpp - USBSerial.cpp WInterrupts.cpp wiring_analog.c wiring_digital.c diff --git a/cores/arduino/WSerial.h b/cores/arduino/WSerial.h index 4214fe6e1e..44aed84409 100644 --- a/cores/arduino/WSerial.h +++ b/cores/arduino/WSerial.h @@ -3,7 +3,9 @@ #include "variant.h" #include "HardwareSerial.h" -#include "USBSerial.h" +#if defined (USBCON) && defined(USBD_USE_CDC) + #include "USBSerial.h" +#endif /* USBCON && USBD_USE_CDC */ #if defined(VIRTIOCON) #include "VirtIOSerial.h" #endif /* VIRTIOCON */ diff --git a/libraries/CMakeLists.txt b/libraries/CMakeLists.txt index f6d31df11a..ff0a3b0557 100644 --- a/libraries/CMakeLists.txt +++ b/libraries/CMakeLists.txt @@ -10,5 +10,6 @@ add_subdirectory(SPI) add_subdirectory(Servo) add_subdirectory(SoftwareSerial) add_subdirectory(SrcWrapper) +add_subdirectory(USBDevice) add_subdirectory(VirtIO) add_subdirectory(Wire) diff --git a/libraries/SrcWrapper/src/stm32/hw_config.c b/libraries/SrcWrapper/src/stm32/hw_config.c index 7a6d98a721..19516e3f6c 100644 --- a/libraries/SrcWrapper/src/stm32/hw_config.c +++ b/libraries/SrcWrapper/src/stm32/hw_config.c @@ -13,7 +13,9 @@ #include "dwt.h" #include "hw_config.h" #include "clock.h" +#if defined (USBCON) && defined(USBD_USE_CDC) #include "usbd_if.h" +#endif #ifdef __cplusplus extern "C" { diff --git a/libraries/USBDevice/CMakeLists.txt b/libraries/USBDevice/CMakeLists.txt new file mode 100644 index 0000000000..cdf27f3bec --- /dev/null +++ b/libraries/USBDevice/CMakeLists.txt @@ -0,0 +1,42 @@ +# v3.21 implemented semantic changes regarding $ +# See https://cmake.org/cmake/help/v3.21/command/target_link_libraries.html#linking-object-libraries-via-target-objects +cmake_minimum_required(VERSION 3.21) + +add_library(USBDevice INTERFACE) +add_library(USBDevice_usage INTERFACE) + +target_include_directories(USBDevice_usage INTERFACE + src +) + + +target_link_libraries(USBDevice_usage INTERFACE + base_config +) + +target_link_libraries(USBDevice INTERFACE USBDevice_usage) + + + +add_library(USBDevice_bin OBJECT EXCLUDE_FROM_ALL + src/cdc/cdc_queue.c + src/cdc/usbd_cdc.c + src/cdc/usbd_cdc_if.c + src/hid/usbd_hid_composite.c + src/hid/usbd_hid_composite_if.c + src/usb_device_core.c + src/usb_device_ctlreq.c + src/usb_device_ioreq.c + src/usbd_conf.c + src/usbd_desc.c + src/usbd_ep_conf.c + src/usbd_if.c + src/USBSerial.cpp +) +target_link_libraries(USBDevice_bin PUBLIC USBDevice_usage) + +target_link_libraries(USBDevice INTERFACE + USBDevice_bin + $ +) + diff --git a/libraries/USBDevice/examples/BareMinimum/BareMinimum.ino b/libraries/USBDevice/examples/BareMinimum/BareMinimum.ino new file mode 100644 index 0000000000..95c2b6eb0a --- /dev/null +++ b/libraries/USBDevice/examples/BareMinimum/BareMinimum.ino @@ -0,0 +1,9 @@ +void setup() { + // put your setup code here, to run once: + +} + +void loop() { + // put your main code here, to run repeatedly: + +} diff --git a/cores/arduino/USBSerial.h b/libraries/USBDevice/inc/USBSerial.h similarity index 100% rename from cores/arduino/USBSerial.h rename to libraries/USBDevice/inc/USBSerial.h diff --git a/cores/arduino/stm32/usb/cdc/cdc_queue.h b/libraries/USBDevice/inc/cdc_queue.h similarity index 100% rename from cores/arduino/stm32/usb/cdc/cdc_queue.h rename to libraries/USBDevice/inc/cdc_queue.h diff --git a/cores/arduino/stm32/usb/cdc/usbd_cdc.h b/libraries/USBDevice/inc/usbd_cdc.h similarity index 100% rename from cores/arduino/stm32/usb/cdc/usbd_cdc.h rename to libraries/USBDevice/inc/usbd_cdc.h diff --git a/cores/arduino/stm32/usb/cdc/usbd_cdc_if.h b/libraries/USBDevice/inc/usbd_cdc_if.h similarity index 100% rename from cores/arduino/stm32/usb/cdc/usbd_cdc_if.h rename to libraries/USBDevice/inc/usbd_cdc_if.h diff --git a/cores/arduino/stm32/usb/usbd_conf.h b/libraries/USBDevice/inc/usbd_conf.h similarity index 100% rename from cores/arduino/stm32/usb/usbd_conf.h rename to libraries/USBDevice/inc/usbd_conf.h diff --git a/cores/arduino/stm32/usb/usbd_desc.h b/libraries/USBDevice/inc/usbd_desc.h similarity index 100% rename from cores/arduino/stm32/usb/usbd_desc.h rename to libraries/USBDevice/inc/usbd_desc.h diff --git a/cores/arduino/stm32/usb/usbd_ep_conf.h b/libraries/USBDevice/inc/usbd_ep_conf.h similarity index 100% rename from cores/arduino/stm32/usb/usbd_ep_conf.h rename to libraries/USBDevice/inc/usbd_ep_conf.h diff --git a/cores/arduino/stm32/usb/usbd_if.h b/libraries/USBDevice/inc/usbd_if.h similarity index 100% rename from cores/arduino/stm32/usb/usbd_if.h rename to libraries/USBDevice/inc/usbd_if.h diff --git a/libraries/USBDevice/keywords.txt b/libraries/USBDevice/keywords.txt new file mode 100644 index 0000000000..ac76e14c8c --- /dev/null +++ b/libraries/USBDevice/keywords.txt @@ -0,0 +1,44 @@ +####################################### +# Syntax Coloring Map For USBDevice +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### +USBSerial KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### +SerialUSB KEYWORD2 +begin KEYWORD2 +available KEYWORD2 +availableForWrite KEYWORD2 +peek KEYWORD2 +read KEYWORD2 +readBytes KEYWORD2 +readBytesUntil +write KEYWORD2 +flush KEYWORD2 +baud KEYWORD2 +stopbits KEYWORD2 +paritytype KEYWORD2 +numbits KEYWORD2 +dtr KEYWORD2 +dtr KEYWORD2 +rts KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### +USBD_VID LITERAL1 +USBD_PID LITERAL1 +USBD_MANUFACTURER_STRING LITERAL1 +ONE_STOP_BIT LITERAL1 +ONE_AND_HALF_STOP_BIT LITERAL1 +TWO_STOP_BITS LITERAL1 +NO_PARITY LITERAL1 +ODD_PARITY LITERAL1 +EVEN_PARITY LITERAL1 +MARK_PARITY LITERAL1 +SPACE_PARITY LITERAL1 diff --git a/libraries/USBDevice/library.properties b/libraries/USBDevice/library.properties new file mode 100644 index 0000000000..84e0d595a9 --- /dev/null +++ b/libraries/USBDevice/library.properties @@ -0,0 +1,9 @@ +name=USBDevice +version=1.0.0 +author=Frederic Pillon +maintainer=stm32duino +sentence=Enables the USB device support CDC or HID. +paragraph= +category=Communication +url=https://github.com/stm32duino/Arduino_Core_STM32 +architectures=stm32 diff --git a/libraries/USBDevice/src/USBDevice.h b/libraries/USBDevice/src/USBDevice.h new file mode 100644 index 0000000000..4cc007d556 --- /dev/null +++ b/libraries/USBDevice/src/USBDevice.h @@ -0,0 +1,4 @@ +#ifndef __USBD_H__ +#define __USBD_H__ + +#endif /* __USBD_H__ */ diff --git a/cores/arduino/USBSerial.cpp b/libraries/USBDevice/src/USBSerial.cpp similarity index 100% rename from cores/arduino/USBSerial.cpp rename to libraries/USBDevice/src/USBSerial.cpp diff --git a/cores/arduino/stm32/usb/cdc/cdc_queue.c b/libraries/USBDevice/src/cdc/cdc_queue.c similarity index 100% rename from cores/arduino/stm32/usb/cdc/cdc_queue.c rename to libraries/USBDevice/src/cdc/cdc_queue.c diff --git a/cores/arduino/stm32/usb/cdc/usbd_cdc.c b/libraries/USBDevice/src/cdc/usbd_cdc.c similarity index 100% rename from cores/arduino/stm32/usb/cdc/usbd_cdc.c rename to libraries/USBDevice/src/cdc/usbd_cdc.c diff --git a/cores/arduino/stm32/usb/cdc/usbd_cdc_if.c b/libraries/USBDevice/src/cdc/usbd_cdc_if.c similarity index 100% rename from cores/arduino/stm32/usb/cdc/usbd_cdc_if.c rename to libraries/USBDevice/src/cdc/usbd_cdc_if.c diff --git a/cores/arduino/stm32/usb/hid/usbd_hid_composite.c b/libraries/USBDevice/src/hid/usbd_hid_composite.c similarity index 100% rename from cores/arduino/stm32/usb/hid/usbd_hid_composite.c rename to libraries/USBDevice/src/hid/usbd_hid_composite.c diff --git a/cores/arduino/stm32/usb/hid/usbd_hid_composite.h b/libraries/USBDevice/src/hid/usbd_hid_composite.h similarity index 100% rename from cores/arduino/stm32/usb/hid/usbd_hid_composite.h rename to libraries/USBDevice/src/hid/usbd_hid_composite.h diff --git a/cores/arduino/stm32/usb/hid/usbd_hid_composite_if.c b/libraries/USBDevice/src/hid/usbd_hid_composite_if.c similarity index 100% rename from cores/arduino/stm32/usb/hid/usbd_hid_composite_if.c rename to libraries/USBDevice/src/hid/usbd_hid_composite_if.c diff --git a/cores/arduino/stm32/usb/hid/usbd_hid_composite_if.h b/libraries/USBDevice/src/hid/usbd_hid_composite_if.h similarity index 100% rename from cores/arduino/stm32/usb/hid/usbd_hid_composite_if.h rename to libraries/USBDevice/src/hid/usbd_hid_composite_if.h diff --git a/cores/arduino/stm32/usb/usb_device_core.c b/libraries/USBDevice/src/usb_device_core.c similarity index 100% rename from cores/arduino/stm32/usb/usb_device_core.c rename to libraries/USBDevice/src/usb_device_core.c diff --git a/cores/arduino/stm32/usb/usb_device_ctlreq.c b/libraries/USBDevice/src/usb_device_ctlreq.c similarity index 100% rename from cores/arduino/stm32/usb/usb_device_ctlreq.c rename to libraries/USBDevice/src/usb_device_ctlreq.c diff --git a/cores/arduino/stm32/usb/usb_device_ioreq.c b/libraries/USBDevice/src/usb_device_ioreq.c similarity index 100% rename from cores/arduino/stm32/usb/usb_device_ioreq.c rename to libraries/USBDevice/src/usb_device_ioreq.c diff --git a/cores/arduino/stm32/usb/usbd_conf.c b/libraries/USBDevice/src/usbd_conf.c similarity index 100% rename from cores/arduino/stm32/usb/usbd_conf.c rename to libraries/USBDevice/src/usbd_conf.c diff --git a/cores/arduino/stm32/usb/usbd_desc.c b/libraries/USBDevice/src/usbd_desc.c similarity index 100% rename from cores/arduino/stm32/usb/usbd_desc.c rename to libraries/USBDevice/src/usbd_desc.c diff --git a/cores/arduino/stm32/usb/usbd_ep_conf.c b/libraries/USBDevice/src/usbd_ep_conf.c similarity index 100% rename from cores/arduino/stm32/usb/usbd_ep_conf.c rename to libraries/USBDevice/src/usbd_ep_conf.c diff --git a/cores/arduino/stm32/usb/usbd_if.c b/libraries/USBDevice/src/usbd_if.c similarity index 100% rename from cores/arduino/stm32/usb/usbd_if.c rename to libraries/USBDevice/src/usbd_if.c diff --git a/platform.txt b/platform.txt index b449bc06a5..95da081a8d 100644 --- a/platform.txt +++ b/platform.txt @@ -24,17 +24,18 @@ tools_bin_path.macosx={runtime.tools.STM32Tools.path}/macosx tools_bin_path.linux={runtime.tools.STM32Tools.path}/linux core_stm32_dir={build.core.path}/stm32 -core_usb_dir={core_stm32_dir}/usb hal_dir={build.system.path}/Drivers/{build.series}_HAL_Driver cmsis_dir={runtime.tools.CMSIS-5.9.0.path}/CMSIS cmsis_dev_dir={build.system.path}/Drivers/CMSIS/Device/ST/{build.series} usbd_core_dir={build.system.path}/Middlewares/ST/STM32_USB_Device_Library/Core SrcWrapper_include_dir={runtime.platform.path}/libraries/SrcWrapper/inc VirtIO_include_dir={runtime.platform.path}/libraries/VirtIO/inc +USBDevice_include_dir={runtime.platform.path}/libraries/USBDevice/inc + # STM compile variables # ---------------------- -compiler.stm.extra_include="-I{build.source.path}" "-I{build.core.path}/avr" "-I{core_stm32_dir}" "-I{SrcWrapper_include_dir}" "-I{SrcWrapper_include_dir}/LL" "-I{core_usb_dir}" "-I{core_usb_dir}/hid" "-I{core_usb_dir}/cdc" "-I{hal_dir}/Inc" "-I{hal_dir}/Src" "-I{build.system.path}/{build.series}" "-I{usbd_core_dir}/Inc" "-I{usbd_core_dir}/Src" "-I{VirtIO_include_dir}" {build.virtio_extra_include} +compiler.stm.extra_include="-I{build.source.path}" "-I{build.core.path}/avr" "-I{core_stm32_dir}" "-I{SrcWrapper_include_dir}" "-I{SrcWrapper_include_dir}/LL" "-I{hal_dir}/Inc" "-I{hal_dir}/Src" "-I{build.system.path}/{build.series}" "-I{USBDevice_include_dir}" "-I{usbd_core_dir}/Inc" "-I{usbd_core_dir}/Src" "-I{VirtIO_include_dir}" {build.virtio_extra_include} compiler.arm.cmsis.c.flags="-I{cmsis_dir}/Core/Include/" "-I{cmsis_dev_dir}/Include/" "-I{cmsis_dev_dir}/Source/Templates/gcc/" "-I{cmsis_dir}/DSP/Include" "-I{cmsis_dir}/DSP/PrivateInclude" compiler.warning_flags=-w @@ -146,7 +147,7 @@ build.opt.path={build.path}/sketch/{build.opt.name} extras.path={build.system.path}/extras # Create {build.opt} if not exists in the output sketch dir and force include of SrcWrapper library -recipe.hooks.prebuild.1.pattern="{busybox}" sh "{extras.path}/prebuild.sh" "{build.path}" "{build.source.path}" "{runtime.platform.path}" "{build.enable_virtio}" +recipe.hooks.prebuild.1.pattern="{busybox}" sh "{extras.path}/prebuild.sh" "{build.path}" "{build.source.path}" "{runtime.platform.path}" "usb={build.enable_usb}" "virtio={build.enable_virtio}" recipe.hooks.postbuild.1.pattern="{busybox}" sh "{extras.path}/postbuild.sh" "{build.path}" "{build.series}" "{runtime.platform.path}" # compile patterns diff --git a/system/extras/prebuild.sh b/system/extras/prebuild.sh index c4f2ce01c6..95faf81ce2 100755 --- a/system/extras/prebuild.sh +++ b/system/extras/prebuild.sh @@ -3,7 +3,8 @@ BUILD_PATH="$1" BUILD_SOURCE_PATH="$2" BOARD_PLATFORM_PATH="$3" -BUILD_VIRTIO="$4" +BUILD_USB="$4" +BUILD_VIRTIO="$5" # Create sketch dir if not exists if [ ! -f "$BUILD_PATH/sketch" ]; then @@ -45,6 +46,10 @@ printf '\n-fmacro-prefix-map="%s"=.' "${prefix}" >>"$BUILD_PATH/sketch/build.opt # Force include of SrcWrapper library echo "#include " >"$BUILD_PATH/sketch/requiredLibraries.cpp" +# Force include of USBDevice library if required +if [ -n "${BUILD_USB#*=}" ]; then + echo "#include " >>"$BUILD_PATH/sketch/requiredLibraries.cpp" +fi # Force include of VirtIO library if required if [ -n "${BUILD_VIRTIO#*=}" ]; then echo "#include " >>"$BUILD_PATH/sketch/requiredLibraries.cpp"