39 changed files with 11711 additions and 356 deletions
@ -1,235 +1,235 @@
@@ -1,235 +1,235 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage"> |
||||
<storageModule moduleId="org.eclipse.cdt.core.settings"> |
||||
<cconfiguration id="fr.ac6.managedbuild.config.gnu.cross.exe.debug.1837977868"> |
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="fr.ac6.managedbuild.config.gnu.cross.exe.debug.1837977868" moduleId="org.eclipse.cdt.core.settings" name="Debug"> |
||||
<externalSettings/> |
||||
<externalSettings /> |
||||
<extensions> |
||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> |
||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> |
||||
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> |
||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> |
||||
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/> |
||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> |
||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser" /> |
||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser" /> |
||||
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser" /> |
||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser" /> |
||||
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser" /> |
||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser" /> |
||||
</extensions> |
||||
</storageModule> |
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0"> |
||||
<configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" id="fr.ac6.managedbuild.config.gnu.cross.exe.debug.1837977868" name="Debug" parent="fr.ac6.managedbuild.config.gnu.cross.exe.debug" postannouncebuildStep="Generating hex and Printing size information:" postbuildStep="arm-none-eabi-objcopy -O ihex "${BuildArtifactFileBaseName}.elf" "${BuildArtifactFileBaseName}.hex" && arm-none-eabi-size "${BuildArtifactFileName}""> |
||||
<folderInfo id="fr.ac6.managedbuild.config.gnu.cross.exe.debug.1837977868." name="/" resourcePath=""> |
||||
<toolChain id="fr.ac6.managedbuild.toolchain.gnu.cross.exe.debug.1804281657" name="Ac6 STM32 MCU GCC" superClass="fr.ac6.managedbuild.toolchain.gnu.cross.exe.debug"> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.prefix.670043782" name="Prefix" superClass="fr.ac6.managedbuild.option.gnu.cross.prefix" value="arm-none-eabi-" valueType="string"/> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.mcu.246290918" name="Mcu" superClass="fr.ac6.managedbuild.option.gnu.cross.mcu" value="STM32F103C6Tx" valueType="string"/> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.board.351273785" name="Board" superClass="fr.ac6.managedbuild.option.gnu.cross.board" value="WS2812B" valueType="string"/> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.instructionSet.2096351029" name="Instruction Set" superClass="fr.ac6.managedbuild.option.gnu.cross.instructionSet" value="fr.ac6.managedbuild.option.gnu.cross.instructionSet.thumbII" valueType="enumerated"/> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.fpu.1085009536" name="Floating point hardware" superClass="fr.ac6.managedbuild.option.gnu.cross.fpu" value="fr.ac6.managedbuild.option.gnu.cross.fpu.no" valueType="enumerated"/> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.floatabi.1977247305" name="Floating-point ABI" superClass="fr.ac6.managedbuild.option.gnu.cross.floatabi" value="fr.ac6.managedbuild.option.gnu.cross.floatabi.soft" valueType="enumerated"/> |
||||
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="fr.ac6.managedbuild.targetPlatform.gnu.cross.1564318056" isAbstract="false" osList="all" superClass="fr.ac6.managedbuild.targetPlatform.gnu.cross"/> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.prefix.670043782" name="Prefix" superClass="fr.ac6.managedbuild.option.gnu.cross.prefix" value="arm-none-eabi-" valueType="string" /> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.mcu.246290918" name="Mcu" superClass="fr.ac6.managedbuild.option.gnu.cross.mcu" value="STM32F103C6Tx" valueType="string" /> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.board.351273785" name="Board" superClass="fr.ac6.managedbuild.option.gnu.cross.board" value="WS2812B" valueType="string" /> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.instructionSet.2096351029" name="Instruction Set" superClass="fr.ac6.managedbuild.option.gnu.cross.instructionSet" value="fr.ac6.managedbuild.option.gnu.cross.instructionSet.thumbII" valueType="enumerated" /> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.fpu.1085009536" name="Floating point hardware" superClass="fr.ac6.managedbuild.option.gnu.cross.fpu" value="fr.ac6.managedbuild.option.gnu.cross.fpu.no" valueType="enumerated" /> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.floatabi.1977247305" name="Floating-point ABI" superClass="fr.ac6.managedbuild.option.gnu.cross.floatabi" value="fr.ac6.managedbuild.option.gnu.cross.floatabi.soft" valueType="enumerated" /> |
||||
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="fr.ac6.managedbuild.targetPlatform.gnu.cross.1564318056" isAbstract="false" osList="all" superClass="fr.ac6.managedbuild.targetPlatform.gnu.cross" /> |
||||
<builder buildPath="${workspace_loc:/WS2812B}/Debug" id="fr.ac6.managedbuild.builder.gnu.cross.2081164898" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="fr.ac6.managedbuild.builder.gnu.cross"> |
||||
<outputEntries> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="outputPath" name="Debug"/> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="outputPath" name="Debug" /> |
||||
</outputEntries> |
||||
</builder> |
||||
<tool id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.47172157" name="MCU GCC Compiler" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler"> |
||||
<option defaultValue="gnu.c.optimization.level.none" id="fr.ac6.managedbuild.gnu.c.compiler.option.optimization.level.1123938333" name="Optimization Level" superClass="fr.ac6.managedbuild.gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="fr.ac6.managedbuild.gnu.c.optimization.level.debug" valueType="enumerated"/> |
||||
<option id="gnu.c.compiler.option.debugging.level.2095774341" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.max" valueType="enumerated"/> |
||||
<option defaultValue="gnu.c.optimization.level.none" id="fr.ac6.managedbuild.gnu.c.compiler.option.optimization.level.1123938333" name="Optimization Level" superClass="fr.ac6.managedbuild.gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="fr.ac6.managedbuild.gnu.c.optimization.level.debug" valueType="enumerated" /> |
||||
<option id="gnu.c.compiler.option.debugging.level.2095774341" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.max" valueType="enumerated" /> |
||||
<option id="gnu.c.compiler.option.include.paths.921716932" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> |
||||
<listOptionValue builtIn="false" value="../Inc"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F1xx/Include"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/> |
||||
</option> |
||||
<listOptionValue builtIn="false" value="../Inc" /> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc" /> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy" /> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F1xx/Include" /> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include" /> |
||||
<listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Device_Library/Core/Inc" /><listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc" /></option> |
||||
<option id="gnu.c.compiler.option.preprocessor.def.symbols.1717974601" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols"> |
||||
<listOptionValue builtIn="false" value="__weak=__attribute__((weak))"/> |
||||
<listOptionValue builtIn="false" value="__packed=__attribute__((__packed__))"/> |
||||
<listOptionValue builtIn="false" value="USE_HAL_DRIVER"/> |
||||
<listOptionValue builtIn="false" value="STM32F103x6"/> |
||||
<listOptionValue builtIn="false" value="__weak=__attribute__((weak))" /> |
||||
<listOptionValue builtIn="false" value="__packed=__attribute__((__packed__))" /> |
||||
<listOptionValue builtIn="false" value="USE_HAL_DRIVER" /> |
||||
<listOptionValue builtIn="false" value="STM32F103x6" /> |
||||
</option> |
||||
<option id="fr.ac6.managedbuild.gnu.c.compiler.option.misc.other.1743948240" superClass="fr.ac6.managedbuild.gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-fmessage-length=0" valueType="string"/> |
||||
<option id="gnu.c.compiler.option.dialect.std.1022564193" superClass="gnu.c.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.c.compiler.dialect.c99" valueType="enumerated"/> |
||||
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c.888179832" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c"/> |
||||
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.s.1757015330" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.s"/> |
||||
<option id="fr.ac6.managedbuild.gnu.c.compiler.option.misc.other.1743948240" superClass="fr.ac6.managedbuild.gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-fmessage-length=0" valueType="string" /> |
||||
<option id="gnu.c.compiler.option.dialect.std.1022564193" superClass="gnu.c.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.c.compiler.dialect.c99" valueType="enumerated" /> |
||||
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c.888179832" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c" /> |
||||
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.s.1757015330" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.s" /> |
||||
</tool> |
||||
<tool id="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.164378511" name="MCU G++ Compiler" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler"> |
||||
<option defaultValue="gnu.cpp.optimization.level.none" id="fr.ac6.managedbuild.gnu.cpp.compiler.option.optimization.level.2141249460" name="Optimization Level" superClass="fr.ac6.managedbuild.gnu.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="fr.ac6.managedbuild.gnu.cpp.optimization.level.debug" valueType="enumerated"/> |
||||
<option id="gnu.cpp.compiler.option.debugging.level.254141418" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/> |
||||
<option defaultValue="gnu.cpp.optimization.level.none" id="fr.ac6.managedbuild.gnu.cpp.compiler.option.optimization.level.2141249460" name="Optimization Level" superClass="fr.ac6.managedbuild.gnu.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="fr.ac6.managedbuild.gnu.cpp.optimization.level.debug" valueType="enumerated" /> |
||||
<option id="gnu.cpp.compiler.option.debugging.level.254141418" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated" /> |
||||
<option id="gnu.cpp.compiler.option.include.paths.173295699" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> |
||||
<listOptionValue builtIn="false" value="../Inc"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F1xx/Include"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/> |
||||
</option> |
||||
<listOptionValue builtIn="false" value="../Inc" /> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc" /> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy" /> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F1xx/Include" /> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include" /> |
||||
<listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Device_Library/Core/Inc" /><listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc" /></option> |
||||
<option id="gnu.cpp.compiler.option.preprocessor.def.774396895" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols"> |
||||
<listOptionValue builtIn="false" value="__weak=__attribute__((weak))"/> |
||||
<listOptionValue builtIn="false" value="__packed=__attribute__((__packed__))"/> |
||||
<listOptionValue builtIn="false" value="USE_HAL_DRIVER"/> |
||||
<listOptionValue builtIn="false" value="STM32F103x6"/> |
||||
<listOptionValue builtIn="false" value="__weak=__attribute__((weak))" /> |
||||
<listOptionValue builtIn="false" value="__packed=__attribute__((__packed__))" /> |
||||
<listOptionValue builtIn="false" value="USE_HAL_DRIVER" /> |
||||
<listOptionValue builtIn="false" value="STM32F103x6" /> |
||||
</option> |
||||
<option id="fr.ac6.managedbuild.gnu.cpp.compiler.option.misc.other.784648708" name="Other flags" superClass="fr.ac6.managedbuild.gnu.cpp.compiler.option.misc.other" useByScannerDiscovery="false" value="-fmessage-length=0" valueType="string"/> |
||||
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.cpp.1955907036" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.cpp"/> |
||||
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.s.405723316" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.s"/> |
||||
<option id="fr.ac6.managedbuild.gnu.cpp.compiler.option.misc.other.784648708" name="Other flags" superClass="fr.ac6.managedbuild.gnu.cpp.compiler.option.misc.other" useByScannerDiscovery="false" value="-fmessage-length=0" valueType="string" /> |
||||
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.cpp.1955907036" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.cpp" /> |
||||
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.s.405723316" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.s" /> |
||||
</tool> |
||||
<tool id="fr.ac6.managedbuild.tool.gnu.cross.c.linker.1253216400" name="MCU GCC Linker" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.linker"> |
||||
<option id="fr.ac6.managedbuild.tool.gnu.cross.c.linker.script.1612069672" name="Linker Script (-T)" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.linker.script" value="../STM32F103C6Tx_FLASH.ld" valueType="string"/> |
||||
<option id="gnu.c.link.option.libs.494592533" name="Libraries (-l)" superClass="gnu.c.link.option.libs"/> |
||||
<option id="gnu.c.link.option.paths.163418952" name="Library search path (-L)" superClass="gnu.c.link.option.paths"/> |
||||
<option id="gnu.c.link.option.ldflags.2115865943" name="Linker flags" superClass="gnu.c.link.option.ldflags" value="-specs=nosys.specs -specs=nano.specs" valueType="string"/> |
||||
<option id="fr.ac6.managedbuild.tool.gnu.cross.c.linker.script.1612069672" name="Linker Script (-T)" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.linker.script" value="../STM32F103C6Tx_FLASH.ld" valueType="string" /> |
||||
<option id="gnu.c.link.option.libs.494592533" name="Libraries (-l)" superClass="gnu.c.link.option.libs" /> |
||||
<option id="gnu.c.link.option.paths.163418952" name="Library search path (-L)" superClass="gnu.c.link.option.paths" /> |
||||
<option id="gnu.c.link.option.ldflags.2115865943" name="Linker flags" superClass="gnu.c.link.option.ldflags" value="-specs=nosys.specs -specs=nano.specs" valueType="string" /> |
||||
<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.52186680" superClass="cdt.managedbuild.tool.gnu.c.linker.input"> |
||||
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> |
||||
<additionalInput kind="additionalinput" paths="$(LIBS)"/> |
||||
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)" /> |
||||
<additionalInput kind="additionalinput" paths="$(LIBS)" /> |
||||
</inputType> |
||||
</tool> |
||||
<tool id="fr.ac6.managedbuild.tool.gnu.cross.cpp.linker.1951498786" name="MCU G++ Linker" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.linker"> |
||||
<option id="fr.ac6.managedbuild.tool.gnu.cross.cpp.linker.script.1776615460" name="Linker Script (-T)" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.linker.script" value="../STM32F103C6Tx_FLASH.ld" valueType="string"/> |
||||
<option id="gnu.cpp.link.option.libs.524027459" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs"/> |
||||
<option id="gnu.cpp.link.option.paths.448513602" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths"/> |
||||
<option id="gnu.cpp.link.option.flags.1466130767" name="Linker flags" superClass="gnu.cpp.link.option.flags" value="-specs=nosys.specs -specs=nano.specs" valueType="string"/> |
||||
<option id="fr.ac6.managedbuild.tool.gnu.cross.cpp.linker.script.1776615460" name="Linker Script (-T)" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.linker.script" value="../STM32F103C6Tx_FLASH.ld" valueType="string" /> |
||||
<option id="gnu.cpp.link.option.libs.524027459" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" /> |
||||
<option id="gnu.cpp.link.option.paths.448513602" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" /> |
||||
<option id="gnu.cpp.link.option.flags.1466130767" name="Linker flags" superClass="gnu.cpp.link.option.flags" value="-specs=nosys.specs -specs=nano.specs" valueType="string" /> |
||||
<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.2104324971" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input"> |
||||
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> |
||||
<additionalInput kind="additionalinput" paths="$(LIBS)"/> |
||||
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)" /> |
||||
<additionalInput kind="additionalinput" paths="$(LIBS)" /> |
||||
</inputType> |
||||
</tool> |
||||
<tool id="fr.ac6.managedbuild.tool.gnu.archiver.634197271" name="MCU GCC Archiver" superClass="fr.ac6.managedbuild.tool.gnu.archiver"/> |
||||
<tool id="fr.ac6.managedbuild.tool.gnu.archiver.634197271" name="MCU GCC Archiver" superClass="fr.ac6.managedbuild.tool.gnu.archiver" /> |
||||
<tool id="fr.ac6.managedbuild.tool.gnu.cross.assembler.1982737087" name="MCU GCC Assembler" superClass="fr.ac6.managedbuild.tool.gnu.cross.assembler"> |
||||
<option id="gnu.both.asm.option.include.paths.999014772" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths"/> |
||||
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.25490237" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> |
||||
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.assembler.input.967035064" superClass="fr.ac6.managedbuild.tool.gnu.cross.assembler.input"/> |
||||
<option id="gnu.both.asm.option.include.paths.999014772" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths" /> |
||||
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.25490237" superClass="cdt.managedbuild.tool.gnu.assembler.input" /> |
||||
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.assembler.input.967035064" superClass="fr.ac6.managedbuild.tool.gnu.cross.assembler.input" /> |
||||
</tool> |
||||
</toolChain> |
||||
</folderInfo> |
||||
<sourceEntries> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="startup"/> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Src"/> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Inc"/> |
||||
<sourceEntries><entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Middlewares" /> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="startup" /> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers" /> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Src" /> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Inc" /> |
||||
</sourceEntries> |
||||
</configuration> |
||||
</storageModule> |
||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> |
||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings" /> |
||||
</cconfiguration> |
||||
<cconfiguration id="fr.ac6.managedbuild.config.gnu.cross.exe.release.692171780"> |
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="fr.ac6.managedbuild.config.gnu.cross.exe.release.692171780" moduleId="org.eclipse.cdt.core.settings" name="Release"> |
||||
<externalSettings/> |
||||
<externalSettings /> |
||||
<extensions> |
||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> |
||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> |
||||
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> |
||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> |
||||
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/> |
||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> |
||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser" /> |
||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser" /> |
||||
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser" /> |
||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser" /> |
||||
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser" /> |
||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser" /> |
||||
</extensions> |
||||
</storageModule> |
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0"> |
||||
<configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="fr.ac6.managedbuild.config.gnu.cross.exe.release.692171780" name="Release" parent="fr.ac6.managedbuild.config.gnu.cross.exe.release" postannouncebuildStep="Generating hex and Printing size information:" postbuildStep="arm-none-eabi-objcopy -O ihex "${BuildArtifactFileBaseName}.elf" "${BuildArtifactFileBaseName}.hex" && arm-none-eabi-size "${BuildArtifactFileName}""> |
||||
<folderInfo id="fr.ac6.managedbuild.config.gnu.cross.exe.release.692171780." name="/" resourcePath=""> |
||||
<toolChain id="fr.ac6.managedbuild.toolchain.gnu.cross.exe.release.1252439690" name="Ac6 STM32 MCU GCC" superClass="fr.ac6.managedbuild.toolchain.gnu.cross.exe.release"> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.prefix.670043782" name="Prefix" superClass="fr.ac6.managedbuild.option.gnu.cross.prefix" value="arm-none-eabi-" valueType="string"/> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.mcu.246290918" name="Mcu" superClass="fr.ac6.managedbuild.option.gnu.cross.mcu" value="STM32F103C6Tx" valueType="string"/> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.board.351273785" name="Board" superClass="fr.ac6.managedbuild.option.gnu.cross.board" value="WS2812B" valueType="string"/> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.instructionSet.2096351029" name="Instruction Set" superClass="fr.ac6.managedbuild.option.gnu.cross.instructionSet" value="fr.ac6.managedbuild.option.gnu.cross.instructionSet.thumbII" valueType="enumerated"/> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.fpu.1085009536" name="Floating point hardware" superClass="fr.ac6.managedbuild.option.gnu.cross.fpu" value="fr.ac6.managedbuild.option.gnu.cross.fpu.no" valueType="enumerated"/> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.floatabi.1977247305" name="Floating-point ABI" superClass="fr.ac6.managedbuild.option.gnu.cross.floatabi" value="fr.ac6.managedbuild.option.gnu.cross.floatabi.soft" valueType="enumerated"/> |
||||
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="fr.ac6.managedbuild.targetPlatform.gnu.cross.1564318056" isAbstract="false" osList="all" superClass="fr.ac6.managedbuild.targetPlatform.gnu.cross"/> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.prefix.670043782" name="Prefix" superClass="fr.ac6.managedbuild.option.gnu.cross.prefix" value="arm-none-eabi-" valueType="string" /> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.mcu.246290918" name="Mcu" superClass="fr.ac6.managedbuild.option.gnu.cross.mcu" value="STM32F103C6Tx" valueType="string" /> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.board.351273785" name="Board" superClass="fr.ac6.managedbuild.option.gnu.cross.board" value="WS2812B" valueType="string" /> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.instructionSet.2096351029" name="Instruction Set" superClass="fr.ac6.managedbuild.option.gnu.cross.instructionSet" value="fr.ac6.managedbuild.option.gnu.cross.instructionSet.thumbII" valueType="enumerated" /> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.fpu.1085009536" name="Floating point hardware" superClass="fr.ac6.managedbuild.option.gnu.cross.fpu" value="fr.ac6.managedbuild.option.gnu.cross.fpu.no" valueType="enumerated" /> |
||||
<option id="fr.ac6.managedbuild.option.gnu.cross.floatabi.1977247305" name="Floating-point ABI" superClass="fr.ac6.managedbuild.option.gnu.cross.floatabi" value="fr.ac6.managedbuild.option.gnu.cross.floatabi.soft" valueType="enumerated" /> |
||||
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="fr.ac6.managedbuild.targetPlatform.gnu.cross.1564318056" isAbstract="false" osList="all" superClass="fr.ac6.managedbuild.targetPlatform.gnu.cross" /> |
||||
<builder buildPath="${workspace_loc:/WS2812B}/Release" id="fr.ac6.managedbuild.builder.gnu.cross.2081164898" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="fr.ac6.managedbuild.builder.gnu.cross"> |
||||
<outputEntries> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="outputPath" name="Release"/> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="outputPath" name="Release" /> |
||||
</outputEntries> |
||||
</builder> |
||||
<tool id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.47172157" name="MCU GCC Compiler" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler"> |
||||
<option defaultValue="gnu.c.optimization.level.none" id="fr.ac6.managedbuild.gnu.c.compiler.option.optimization.level.1123938333" name="Optimization Level" superClass="fr.ac6.managedbuild.gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="fr.ac6.managedbuild.gnu.c.optimization.level.debug" valueType="enumerated"/> |
||||
<option id="gnu.c.compiler.option.debugging.level.2095774341" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.max" valueType="enumerated"/> |
||||
<option defaultValue="gnu.c.optimization.level.none" id="fr.ac6.managedbuild.gnu.c.compiler.option.optimization.level.1123938333" name="Optimization Level" superClass="fr.ac6.managedbuild.gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="fr.ac6.managedbuild.gnu.c.optimization.level.debug" valueType="enumerated" /> |
||||
<option id="gnu.c.compiler.option.debugging.level.2095774341" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.max" valueType="enumerated" /> |
||||
<option id="gnu.c.compiler.option.include.paths.921716932" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> |
||||
<listOptionValue builtIn="false" value="../Inc"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F1xx/Include"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/> |
||||
</option> |
||||
<listOptionValue builtIn="false" value="../Inc" /> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc" /> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy" /> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F1xx/Include" /> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include" /> |
||||
<listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Device_Library/Core/Inc" /><listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc" /></option> |
||||
<option id="gnu.c.compiler.option.preprocessor.def.symbols.1717974601" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols"> |
||||
<listOptionValue builtIn="false" value="__weak=__attribute__((weak))"/> |
||||
<listOptionValue builtIn="false" value="__packed=__attribute__((__packed__))"/> |
||||
<listOptionValue builtIn="false" value="USE_HAL_DRIVER"/> |
||||
<listOptionValue builtIn="false" value="STM32F103x6"/> |
||||
<listOptionValue builtIn="false" value="__weak=__attribute__((weak))" /> |
||||
<listOptionValue builtIn="false" value="__packed=__attribute__((__packed__))" /> |
||||
<listOptionValue builtIn="false" value="USE_HAL_DRIVER" /> |
||||
<listOptionValue builtIn="false" value="STM32F103x6" /> |
||||
</option> |
||||
<option id="fr.ac6.managedbuild.gnu.c.compiler.option.misc.other.1743948240" superClass="fr.ac6.managedbuild.gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-fmessage-length=0" valueType="string"/> |
||||
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c.888179832" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c"/> |
||||
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.s.1757015330" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.s"/> |
||||
<option id="fr.ac6.managedbuild.gnu.c.compiler.option.misc.other.1743948240" superClass="fr.ac6.managedbuild.gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-fmessage-length=0" valueType="string" /> |
||||
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c.888179832" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c" /> |
||||
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.s.1757015330" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.s" /> |
||||
</tool> |
||||
<tool id="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.164378511" name="MCU G++ Compiler" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler"> |
||||
<option defaultValue="gnu.cpp.optimization.level.none" id="fr.ac6.managedbuild.gnu.cpp.compiler.option.optimization.level.2141249460" name="Optimization Level" superClass="fr.ac6.managedbuild.gnu.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="fr.ac6.managedbuild.gnu.cpp.optimization.level.debug" valueType="enumerated"/> |
||||
<option id="gnu.cpp.compiler.option.debugging.level.254141418" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.cpp.debugging.level.max" valueType="enumerated"/> |
||||
<option defaultValue="gnu.cpp.optimization.level.none" id="fr.ac6.managedbuild.gnu.cpp.compiler.option.optimization.level.2141249460" name="Optimization Level" superClass="fr.ac6.managedbuild.gnu.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="fr.ac6.managedbuild.gnu.cpp.optimization.level.debug" valueType="enumerated" /> |
||||
<option id="gnu.cpp.compiler.option.debugging.level.254141418" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.cpp.debugging.level.max" valueType="enumerated" /> |
||||
<option id="gnu.cpp.compiler.option.include.paths.173295699" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> |
||||
<listOptionValue builtIn="false" value="../Inc"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F1xx/Include"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/> |
||||
</option> |
||||
<listOptionValue builtIn="false" value="../Inc" /> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc" /> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy" /> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F1xx/Include" /> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include" /> |
||||
<listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Device_Library/Core/Inc" /><listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc" /></option> |
||||
<option id="gnu.cpp.compiler.option.preprocessor.def.symbols.946755431" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols"> |
||||
<listOptionValue builtIn="false" value="__weak=__attribute__((weak))"/> |
||||
<listOptionValue builtIn="false" value="__packed=__attribute__((__packed__))"/> |
||||
<listOptionValue builtIn="false" value="USE_HAL_DRIVER"/> |
||||
<listOptionValue builtIn="false" value="STM32F103x6"/> |
||||
<listOptionValue builtIn="false" value="__weak=__attribute__((weak))" /> |
||||
<listOptionValue builtIn="false" value="__packed=__attribute__((__packed__))" /> |
||||
<listOptionValue builtIn="false" value="USE_HAL_DRIVER" /> |
||||
<listOptionValue builtIn="false" value="STM32F103x6" /> |
||||
</option> |
||||
<option id="fr.ac6.managedbuild.gnu.cpp.compiler.option.misc.other.784648708" name="Other flags" superClass="fr.ac6.managedbuild.gnu.cpp.compiler.option.misc.other" useByScannerDiscovery="false" value="-fmessage-length=0" valueType="string"/> |
||||
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.cpp.1955907036" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.cpp"/> |
||||
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.s.405723316" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.s"/> |
||||
<option id="fr.ac6.managedbuild.gnu.cpp.compiler.option.misc.other.784648708" name="Other flags" superClass="fr.ac6.managedbuild.gnu.cpp.compiler.option.misc.other" useByScannerDiscovery="false" value="-fmessage-length=0" valueType="string" /> |
||||
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.cpp.1955907036" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.cpp" /> |
||||
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.s.405723316" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.s" /> |
||||
</tool> |
||||
<tool id="fr.ac6.managedbuild.tool.gnu.cross.c.linker.1253216400" name="MCU GCC Linker" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.linker"> |
||||
<option id="fr.ac6.managedbuild.tool.gnu.cross.c.linker.script.1612069672" name="Linker Script (-T)" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.linker.script" value="../STM32F103C6Tx_FLASH.ld" valueType="string"/> |
||||
<option id="gnu.c.link.option.libs.494592533" name="Libraries (-l)" superClass="gnu.c.link.option.libs"/> |
||||
<option id="gnu.c.link.option.paths.163418952" name="Library search path (-L)" superClass="gnu.c.link.option.paths"/> |
||||
<option id="gnu.c.link.option.ldflags.2115865943" name="Linker flags" superClass="gnu.c.link.option.ldflags" value="-specs=nosys.specs -specs=nano.specs" valueType="string"/> |
||||
<option id="fr.ac6.managedbuild.tool.gnu.cross.c.linker.script.1612069672" name="Linker Script (-T)" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.linker.script" value="../STM32F103C6Tx_FLASH.ld" valueType="string" /> |
||||
<option id="gnu.c.link.option.libs.494592533" name="Libraries (-l)" superClass="gnu.c.link.option.libs" /> |
||||
<option id="gnu.c.link.option.paths.163418952" name="Library search path (-L)" superClass="gnu.c.link.option.paths" /> |
||||
<option id="gnu.c.link.option.ldflags.2115865943" name="Linker flags" superClass="gnu.c.link.option.ldflags" value="-specs=nosys.specs -specs=nano.specs" valueType="string" /> |
||||
<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.52186680" superClass="cdt.managedbuild.tool.gnu.c.linker.input"> |
||||
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> |
||||
<additionalInput kind="additionalinput" paths="$(LIBS)"/> |
||||
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)" /> |
||||
<additionalInput kind="additionalinput" paths="$(LIBS)" /> |
||||
</inputType> |
||||
</tool> |
||||
<tool id="fr.ac6.managedbuild.tool.gnu.cross.cpp.linker.1951498786" name="MCU G++ Linker" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.linker"> |
||||
<option id="fr.ac6.managedbuild.tool.gnu.cross.cpp.linker.script.1776615460" name="Linker Script (-T)" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.linker.script" value="../STM32F103C6Tx_FLASH.ld" valueType="string"/> |
||||
<option id="gnu.cpp.link.option.libs.524027459" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs"/> |
||||
<option id="gnu.cpp.link.option.paths.448513602" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths"/> |
||||
<option id="gnu.cpp.link.option.ldflags.1250178855" superClass="gnu.cpp.link.option.ldflags" value="-specs=nosys.specs -specs=nano.specs" valueType="string"/> |
||||
<option id="fr.ac6.managedbuild.tool.gnu.cross.cpp.linker.script.1776615460" name="Linker Script (-T)" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.linker.script" value="../STM32F103C6Tx_FLASH.ld" valueType="string" /> |
||||
<option id="gnu.cpp.link.option.libs.524027459" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" /> |
||||
<option id="gnu.cpp.link.option.paths.448513602" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" /> |
||||
<option id="gnu.cpp.link.option.ldflags.1250178855" superClass="gnu.cpp.link.option.ldflags" value="-specs=nosys.specs -specs=nano.specs" valueType="string" /> |
||||
<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.2104324971" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input"> |
||||
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> |
||||
<additionalInput kind="additionalinput" paths="$(LIBS)"/> |
||||
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)" /> |
||||
<additionalInput kind="additionalinput" paths="$(LIBS)" /> |
||||
</inputType> |
||||
</tool> |
||||
<tool id="fr.ac6.managedbuild.tool.gnu.archiver.634197271" name="MCU GCC Archiver" superClass="fr.ac6.managedbuild.tool.gnu.archiver"/> |
||||
<tool id="fr.ac6.managedbuild.tool.gnu.archiver.634197271" name="MCU GCC Archiver" superClass="fr.ac6.managedbuild.tool.gnu.archiver" /> |
||||
<tool id="fr.ac6.managedbuild.tool.gnu.cross.assembler.exe.release.111181173" name="MCU GCC Assembler" superClass="fr.ac6.managedbuild.tool.gnu.cross.assembler.exe.release"> |
||||
<option id="gnu.both.asm.option.include.paths.999014772" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths"/> |
||||
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.25490237" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> |
||||
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.assembler.input.967035064" superClass="fr.ac6.managedbuild.tool.gnu.cross.assembler.input"/> |
||||
<option id="gnu.both.asm.option.include.paths.999014772" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths" /> |
||||
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.25490237" superClass="cdt.managedbuild.tool.gnu.assembler.input" /> |
||||
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.assembler.input.967035064" superClass="fr.ac6.managedbuild.tool.gnu.cross.assembler.input" /> |
||||
</tool> |
||||
</toolChain> |
||||
</folderInfo> |
||||
<sourceEntries> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="startup"/> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Src"/> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Inc"/> |
||||
<sourceEntries><entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Middlewares" /> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="startup" /> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers" /> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Src" /> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Inc" /> |
||||
</sourceEntries> |
||||
</configuration> |
||||
</storageModule> |
||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> |
||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings" /> |
||||
</cconfiguration> |
||||
</storageModule> |
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0"> |
||||
<project id="WS2812B.fr.ac6.managedbuild.target.gnu.cross.exe.1201975271" name="Executable" projectType="fr.ac6.managedbuild.target.gnu.cross.exe"/> |
||||
<project id="WS2812B.fr.ac6.managedbuild.target.gnu.cross.exe.1201975271" name="Executable" projectType="fr.ac6.managedbuild.target.gnu.cross.exe" /> |
||||
</storageModule> |
||||
<storageModule moduleId="scannerConfiguration"> |
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/> |
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="" /> |
||||
<scannerConfigBuildInfo instanceId="fr.ac6.managedbuild.config.gnu.cross.exe.debug.1837977868;fr.ac6.managedbuild.config.gnu.cross.exe.debug.1837977868.;fr.ac6.managedbuild.tool.gnu.cross.c.compiler.47172157;fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c.888179832"> |
||||
<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/> |
||||
<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId="" /> |
||||
</scannerConfigBuildInfo> |
||||
</storageModule> |
||||
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/> |
||||
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders" /> |
||||
<storageModule moduleId="refreshScope" versionNumber="2"> |
||||
<configuration configurationName="Debug"> |
||||
<resource resourceType="PROJECT" workspacePath="/WS2812B"/> |
||||
<resource resourceType="PROJECT" workspacePath="WS2812B" /> |
||||
</configuration> |
||||
<configuration configurationName="Release"/> |
||||
<configuration configurationName="Release" /> |
||||
</storageModule> |
||||
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/> |
||||
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets" /> |
||||
</cproject> |
||||
|
@ -1,14 +1,14 @@
@@ -1,14 +1,14 @@
|
||||
[PreviousGenFiles] |
||||
HeaderPath=D:/GoogleDrive/Blog msalamon.pl/Materialy do wpisow/6. Adresowalne diody WS2812B na STM32/Kod/WS2812B/WS2812B/Inc |
||||
HeaderFiles=gpio.h;dma.h;spi.h;stm32f1xx_it.h;stm32f1xx_hal_conf.h;main.h; |
||||
HeaderFiles=gpio.h;dma.h;spi.h;stm32f1xx_it.h;stm32f1xx_hal_conf.h;main.h;usb_device.h;usbd_conf.h;usbd_desc.h;usbd_cdc_if.h; |
||||
SourcePath=D:/GoogleDrive/Blog msalamon.pl/Materialy do wpisow/6. Adresowalne diody WS2812B na STM32/Kod/WS2812B/WS2812B/Src |
||||
SourceFiles=gpio.c;dma.c;spi.c;stm32f1xx_it.c;stm32f1xx_hal_msp.c;main.c; |
||||
SourceFiles=gpio.c;dma.c;spi.c;stm32f1xx_it.c;stm32f1xx_hal_msp.c;main.c;usb_device.c;usbd_conf.c;usbd_desc.c;usbd_cdc_if.c; |
||||
|
||||
[PreviousLibFiles] |
||||
LibFiles=Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_spi.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103x6.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;Drivers/CMSIS/Include/arm_common_tables.h;Drivers/CMSIS/Include/arm_const_structs.h;Drivers/CMSIS/Include/arm_math.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armcc_V6.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_cmFunc.h;Drivers/CMSIS/Include/core_cmInstr.h;Drivers/CMSIS/Include/core_cmSimd.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h; |
||||
LibFiles=Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pcd.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pcd_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_usb.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_spi.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h;Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h;Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h;Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h;Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h;Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc/usbd_cdc.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_usb.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c;Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c;Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c;Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103x6.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;Drivers/CMSIS/Include/arm_common_tables.h;Drivers/CMSIS/Include/arm_const_structs.h;Drivers/CMSIS/Include/arm_math.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armcc_V6.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_cmFunc.h;Drivers/CMSIS/Include/core_cmInstr.h;Drivers/CMSIS/Include/core_cmSimd.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h; |
||||
|
||||
[PreviousUsedSW4STM32Files] |
||||
SourceFiles=..\Src\main.c;..\Src\gpio.c;..\Src\dma.c;..\Src\spi.c;..\Src\stm32f1xx_it.c;..\Src\stm32f1xx_hal_msp.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;../\Src/system_stm32f1xx.c;../Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;null; |
||||
HeaderPath=..\Drivers\STM32F1xx_HAL_Driver\Inc;..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F1xx\Include;..\Drivers\CMSIS\Include;..\Inc; |
||||
SourceFiles=..\Src\main.c;..\Src\gpio.c;..\Src\dma.c;..\Src\spi.c;..\Src\usb_device.c;..\Src\usbd_conf.c;..\Src\usbd_desc.c;..\Src\usbd_cdc_if.c;..\Src\stm32f1xx_it.c;..\Src\stm32f1xx_hal_msp.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_usb.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c;../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c;../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c;../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c;../\Src/system_stm32f1xx.c;../Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;null;../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c;../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c;../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c;../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c; |
||||
HeaderPath=..\Drivers\STM32F1xx_HAL_Driver\Inc;..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy;..\Middlewares\ST\STM32_USB_Device_Library\Core\Inc;..\Middlewares\ST\STM32_USB_Device_Library\Class\CDC\Inc;..\Drivers\CMSIS\Device\ST\STM32F1xx\Include;..\Drivers\CMSIS\Include;..\Inc; |
||||
CDefines=__weak:__attribute__((weak));__packed:__attribute__((__packed__)); |
||||
|
||||
|
@ -0,0 +1,851 @@
@@ -0,0 +1,851 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32f1xx_hal_pcd.h |
||||
* @author MCD Application Team |
||||
* @brief Header file of PCD HAL module. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without modification, |
||||
* are permitted provided that the following conditions are met: |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
****************************************************************************** |
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __STM32F1xx_HAL_PCD_H |
||||
#define __STM32F1xx_HAL_PCD_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
#if defined(STM32F102x6) || defined(STM32F102xB) || \ |
||||
defined(STM32F103x6) || defined(STM32F103xB) || \
|
||||
defined(STM32F103xE) || defined(STM32F103xG) || \
|
||||
defined(STM32F105xC) || defined(STM32F107xC) |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32f1xx_ll_usb.h" |
||||
|
||||
/** @addtogroup STM32F1xx_HAL_Driver
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup PCD
|
||||
* @{ |
||||
*/
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/** @defgroup PCD_Exported_Types PCD Exported Types
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief PCD State structure definition |
||||
*/ |
||||
typedef enum |
||||
{ |
||||
HAL_PCD_STATE_RESET = 0x00U, |
||||
HAL_PCD_STATE_READY = 0x01U, |
||||
HAL_PCD_STATE_ERROR = 0x02U, |
||||
HAL_PCD_STATE_BUSY = 0x03U, |
||||
HAL_PCD_STATE_TIMEOUT = 0x04U |
||||
} PCD_StateTypeDef; |
||||
|
||||
#if defined (USB) |
||||
/**
|
||||
* @brief PCD double buffered endpoint direction |
||||
*/ |
||||
typedef enum |
||||
{ |
||||
PCD_EP_DBUF_OUT, |
||||
PCD_EP_DBUF_IN, |
||||
PCD_EP_DBUF_ERR, |
||||
}PCD_EP_DBUF_DIR; |
||||
|
||||
/**
|
||||
* @brief PCD endpoint buffer number |
||||
*/ |
||||
typedef enum
|
||||
{ |
||||
PCD_EP_NOBUF, |
||||
PCD_EP_BUF0, |
||||
PCD_EP_BUF1 |
||||
}PCD_EP_BUF_NUM;
|
||||
#endif /* USB */ |
||||
|
||||
#if defined (USB_OTG_FS) |
||||
typedef USB_OTG_GlobalTypeDef PCD_TypeDef; |
||||
typedef USB_OTG_CfgTypeDef PCD_InitTypeDef; |
||||
typedef USB_OTG_EPTypeDef PCD_EPTypeDef; |
||||
#endif /* USB_OTG_FS */ |
||||
|
||||
#if defined (USB) |
||||
typedef USB_TypeDef PCD_TypeDef; |
||||
typedef USB_CfgTypeDef PCD_InitTypeDef; |
||||
typedef USB_EPTypeDef PCD_EPTypeDef; |
||||
#endif /* USB */ |
||||
|
||||
/**
|
||||
* @brief PCD Handle Structure definition |
||||
*/ |
||||
typedef struct |
||||
{ |
||||
PCD_TypeDef *Instance; /*!< Register base address */ |
||||
PCD_InitTypeDef Init; /*!< PCD required parameters */ |
||||
__IO uint8_t USB_Address; /*!< USB Address: not used by USB OTG FS */
|
||||
PCD_EPTypeDef IN_ep[16]; /*!< IN endpoint parameters */ |
||||
PCD_EPTypeDef OUT_ep[16]; /*!< OUT endpoint parameters */ |
||||
HAL_LockTypeDef Lock; /*!< PCD peripheral status */ |
||||
__IO PCD_StateTypeDef State; /*!< PCD communication state */ |
||||
uint32_t Setup[12U]; /*!< Setup packet buffer */ |
||||
void *pData; /*!< Pointer to upper stack Handler */ |
||||
} PCD_HandleTypeDef; |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Include PCD HAL Extension module */ |
||||
#include "stm32f1xx_hal_pcd_ex.h" |
||||
|
||||
/* Exported constants --------------------------------------------------------*/ |
||||
/** @defgroup PCD_Exported_Constants PCD Exported Constants
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup PCD_Speed PCD Speed
|
||||
* @{ |
||||
*/ |
||||
#define PCD_SPEED_HIGH 0U /* Not Supported */ |
||||
#define PCD_SPEED_HIGH_IN_FULL 1U /* Not Supported */ |
||||
#define PCD_SPEED_FULL 2U |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup PCD_PHY_Module PCD PHY Module
|
||||
* @{ |
||||
*/ |
||||
#define PCD_PHY_EMBEDDED 2U |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup PCD_Turnaround_Timeout Turnaround Timeout Value
|
||||
* @{ |
||||
*/ |
||||
#ifndef USBD_FS_TRDT_VALUE |
||||
#define USBD_FS_TRDT_VALUE 5U |
||||
#endif /* USBD_FS_TRDT_VALUE */ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Exported macros -----------------------------------------------------------*/ |
||||
/** @defgroup PCD_Exported_Macros PCD Exported Macros
|
||||
* @brief macros to handle interrupts and specific clock configurations |
||||
* @{ |
||||
*/ |
||||
#if defined (USB_OTG_FS) |
||||
|
||||
#define __HAL_PCD_ENABLE(__HANDLE__) USB_EnableGlobalInt ((__HANDLE__)->Instance) |
||||
#define __HAL_PCD_DISABLE(__HANDLE__) USB_DisableGlobalInt ((__HANDLE__)->Instance) |
||||
|
||||
#define __HAL_PCD_GET_FLAG(__HANDLE__, __INTERRUPT__) ((USB_ReadInterrupts((__HANDLE__)->Instance) & (__INTERRUPT__)) == (__INTERRUPT__)) |
||||
#define __HAL_PCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->GINTSTS) = (__INTERRUPT__)) |
||||
#define __HAL_PCD_IS_INVALID_INTERRUPT(__HANDLE__) (USB_ReadInterrupts((__HANDLE__)->Instance) == 0U) |
||||
|
||||
#define __HAL_PCD_UNGATE_PHYCLOCK(__HANDLE__) *(__IO uint32_t *)((uint32_t)((__HANDLE__)->Instance) + USB_OTG_PCGCCTL_BASE) &= \ |
||||
~(USB_OTG_PCGCCTL_STOPCLK) |
||||
|
||||
#define __HAL_PCD_GATE_PHYCLOCK(__HANDLE__) *(__IO uint32_t *)((uint32_t)((__HANDLE__)->Instance) + USB_OTG_PCGCCTL_BASE) |= USB_OTG_PCGCCTL_STOPCLK |
||||
|
||||
#define __HAL_PCD_IS_PHY_SUSPENDED(__HANDLE__) ((*(__IO uint32_t *)((uint32_t)((__HANDLE__)->Instance) + USB_OTG_PCGCCTL_BASE)) & 0x10U) |
||||
|
||||
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_IT() EXTI->IMR |= USB_OTG_FS_WAKEUP_EXTI_LINE |
||||
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_DISABLE_IT() EXTI->IMR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE) |
||||
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_GET_FLAG() EXTI->PR & (USB_OTG_FS_WAKEUP_EXTI_LINE) |
||||
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG() EXTI->PR = USB_OTG_FS_WAKEUP_EXTI_LINE |
||||
|
||||
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE() \ |
||||
do{ \
|
||||
EXTI->FTSR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE); \
|
||||
EXTI->RTSR |= USB_OTG_FS_WAKEUP_EXTI_LINE; \
|
||||
} while(0U) |
||||
|
||||
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_FALLING_EDGE() \ |
||||
do{ \
|
||||
EXTI->FTSR |= (USB_OTG_FS_WAKEUP_EXTI_LINE); \
|
||||
EXTI->RTSR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE); \
|
||||
} while(0U) |
||||
|
||||
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE() \ |
||||
do{ \
|
||||
EXTI->RTSR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE); \
|
||||
EXTI->FTSR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE); \
|
||||
EXTI->RTSR |= USB_OTG_FS_WAKEUP_EXTI_LINE; \
|
||||
EXTI->FTSR |= USB_OTG_FS_WAKEUP_EXTI_LINE; \
|
||||
} while(0U) |
||||
|
||||
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_GENERATE_SWIT() (EXTI->SWIER |= USB_OTG_FS_WAKEUP_EXTI_LINE) |
||||
#endif /* USB_OTG_FS */ |
||||
|
||||
#if defined (USB) |
||||
#define __HAL_PCD_ENABLE(__HANDLE__) USB_EnableGlobalInt ((__HANDLE__)->Instance) |
||||
#define __HAL_PCD_DISABLE(__HANDLE__) USB_DisableGlobalInt ((__HANDLE__)->Instance) |
||||
#define __HAL_PCD_GET_FLAG(__HANDLE__, __INTERRUPT__) ((USB_ReadInterrupts((__HANDLE__)->Instance) & (__INTERRUPT__)) == (__INTERRUPT__)) |
||||
#define __HAL_PCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->ISTR) &= ~(__INTERRUPT__)) |
||||
|
||||
#define __HAL_USB_WAKEUP_EXTI_ENABLE_IT() EXTI->IMR |= USB_WAKEUP_EXTI_LINE |
||||
#define __HAL_USB_WAKEUP_EXTI_DISABLE_IT() EXTI->IMR &= ~(USB_WAKEUP_EXTI_LINE) |
||||
#define __HAL_USB_WAKEUP_EXTI_GET_FLAG() EXTI->PR & (USB_WAKEUP_EXTI_LINE) |
||||
#define __HAL_USB_WAKEUP_EXTI_CLEAR_FLAG() EXTI->PR = USB_WAKEUP_EXTI_LINE |
||||
|
||||
#define __HAL_USB_WAKEUP_EXTI_ENABLE_RISING_EDGE() \ |
||||
do{ \
|
||||
EXTI->FTSR &= ~(USB_WAKEUP_EXTI_LINE); \
|
||||
EXTI->RTSR |= USB_WAKEUP_EXTI_LINE; \
|
||||
} while(0U) |
||||
|
||||
#define __HAL_USB_WAKEUP_EXTI_ENABLE_FALLING_EDGE() \ |
||||
do{ \
|
||||
EXTI->FTSR |= (USB_WAKEUP_EXTI_LINE); \
|
||||
EXTI->RTSR &= ~(USB_WAKEUP_EXTI_LINE); \
|
||||
} while(0U) |
||||
|
||||
#define __HAL_USB_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE() \ |
||||
do{ \
|
||||
EXTI->RTSR &= ~(USB_WAKEUP_EXTI_LINE); \
|
||||
EXTI->FTSR &= ~(USB_WAKEUP_EXTI_LINE); \
|
||||
EXTI->RTSR |= USB_WAKEUP_EXTI_LINE; \
|
||||
EXTI->FTSR |= USB_WAKEUP_EXTI_LINE; \
|
||||
} while(0U) |
||||
#endif /* USB */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Exported functions --------------------------------------------------------*/ |
||||
/** @addtogroup PCD_Exported_Functions PCD Exported Functions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/* Initialization/de-initialization functions ********************************/ |
||||
/** @addtogroup PCD_Exported_Functions_Group1 Initialization and de-initialization functions
|
||||
* @{ |
||||
*/ |
||||
HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd); |
||||
HAL_StatusTypeDef HAL_PCD_DeInit (PCD_HandleTypeDef *hpcd); |
||||
void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd); |
||||
void HAL_PCD_MspDeInit(PCD_HandleTypeDef *hpcd); |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* I/O operation functions ***************************************************/ |
||||
/* Non-Blocking mode: Interrupt */ |
||||
/** @addtogroup PCD_Exported_Functions_Group2 IO operation functions
|
||||
* @{ |
||||
*/ |
||||
HAL_StatusTypeDef HAL_PCD_Start(PCD_HandleTypeDef *hpcd); |
||||
HAL_StatusTypeDef HAL_PCD_Stop(PCD_HandleTypeDef *hpcd); |
||||
void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd); |
||||
|
||||
void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum); |
||||
void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum); |
||||
void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd); |
||||
void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd); |
||||
void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd); |
||||
void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd); |
||||
void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd); |
||||
void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum); |
||||
void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum); |
||||
void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd); |
||||
void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd); |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Peripheral Control functions **********************************************/ |
||||
/** @addtogroup PCD_Exported_Functions_Group3 Peripheral Control functions
|
||||
* @{ |
||||
*/ |
||||
HAL_StatusTypeDef HAL_PCD_DevConnect(PCD_HandleTypeDef *hpcd); |
||||
HAL_StatusTypeDef HAL_PCD_DevDisconnect(PCD_HandleTypeDef *hpcd); |
||||
HAL_StatusTypeDef HAL_PCD_SetAddress(PCD_HandleTypeDef *hpcd, uint8_t address); |
||||
HAL_StatusTypeDef HAL_PCD_EP_Open(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint16_t ep_mps, uint8_t ep_type); |
||||
HAL_StatusTypeDef HAL_PCD_EP_Close(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); |
||||
HAL_StatusTypeDef HAL_PCD_EP_Receive(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len); |
||||
HAL_StatusTypeDef HAL_PCD_EP_Transmit(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len); |
||||
uint16_t HAL_PCD_EP_GetRxCount(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); |
||||
HAL_StatusTypeDef HAL_PCD_EP_SetStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); |
||||
HAL_StatusTypeDef HAL_PCD_EP_ClrStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); |
||||
HAL_StatusTypeDef HAL_PCD_EP_Flush(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); |
||||
HAL_StatusTypeDef HAL_PCD_ActivateRemoteWakeup(PCD_HandleTypeDef *hpcd); |
||||
HAL_StatusTypeDef HAL_PCD_DeActivateRemoteWakeup(PCD_HandleTypeDef *hpcd); |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Peripheral State functions ************************************************/ |
||||
/** @addtogroup PCD_Exported_Functions_Group4 Peripheral State functions
|
||||
* @{ |
||||
*/ |
||||
PCD_StateTypeDef HAL_PCD_GetState(PCD_HandleTypeDef *hpcd); |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Private constants ---------------------------------------------------------*/ |
||||
/** @defgroup PCD_Private_Constants PCD Private Constants
|
||||
* @{ |
||||
*/ |
||||
/** @defgroup USB_EXTI_Line_Interrupt USB EXTI line interrupt
|
||||
* @{ |
||||
*/ |
||||
#if defined (USB_OTG_FS) |
||||
#define USB_OTG_FS_WAKEUP_EXTI_RISING_EDGE 0x08U |
||||
#define USB_OTG_FS_WAKEUP_EXTI_FALLING_EDGE 0x0CU |
||||
#define USB_OTG_FS_WAKEUP_EXTI_RISING_FALLING_EDGE 0x10U |
||||
|
||||
#define USB_OTG_FS_WAKEUP_EXTI_LINE 0x00040000U /*!< External interrupt line 18 Connected to the USB EXTI Line */ |
||||
#endif /* USB_OTG_FS */ |
||||
|
||||
#if defined (USB) |
||||
#define USB_WAKEUP_EXTI_LINE 0x00040000U /*!< External interrupt line 18 Connected to the USB EXTI Line */ |
||||
#endif /* USB */ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#if defined (USB) |
||||
/** @defgroup PCD_EP0_MPS PCD EP0 MPS
|
||||
* @{ |
||||
*/ |
||||
#define PCD_EP0MPS_64 DEP0CTL_MPS_64 |
||||
#define PCD_EP0MPS_32 DEP0CTL_MPS_32 |
||||
#define PCD_EP0MPS_16 DEP0CTL_MPS_16 |
||||
#define PCD_EP0MPS_08 DEP0CTL_MPS_8 |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup PCD_ENDP PCD ENDP
|
||||
* @{ |
||||
*/ |
||||
#define PCD_ENDP0 ((uint8_t)0) |
||||
#define PCD_ENDP1 ((uint8_t)1) |
||||
#define PCD_ENDP2 ((uint8_t)2) |
||||
#define PCD_ENDP3 ((uint8_t)3) |
||||
#define PCD_ENDP4 ((uint8_t)4) |
||||
#define PCD_ENDP5 ((uint8_t)5) |
||||
#define PCD_ENDP6 ((uint8_t)6) |
||||
#define PCD_ENDP7 ((uint8_t)7) |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup PCD_ENDP_Kind PCD Endpoint Kind
|
||||
* @{ |
||||
*/ |
||||
#define PCD_SNG_BUF 0U |
||||
#define PCD_DBL_BUF 1U |
||||
/**
|
||||
* @} |
||||
*/ |
||||
#endif /* USB */ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Private macros ------------------------------------------------------------*/ |
||||
/** @addtogroup PCD_Private_Macros PCD Private Macros
|
||||
* @{ |
||||
*/ |
||||
#if defined (USB) |
||||
/* SetENDPOINT */ |
||||
#define PCD_SET_ENDPOINT(USBx, bEpNum,wRegValue) (*(&(USBx)->EP0R + (bEpNum) * 2U)= (uint16_t)(wRegValue)) |
||||
|
||||
/* GetENDPOINT */ |
||||
#define PCD_GET_ENDPOINT(USBx, bEpNum) (*(&(USBx)->EP0R + (bEpNum) * 2U)) |
||||
|
||||
/* ENDPOINT transfer */ |
||||
#define USB_EP0StartXfer USB_EPStartXfer |
||||
|
||||
/**
|
||||
* @brief sets the type in the endpoint register(bits EP_TYPE[1:0]) |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @param wType: Endpoint Type. |
||||
* @retval None |
||||
*/ |
||||
#define PCD_SET_EPTYPE(USBx, bEpNum,wType) (PCD_SET_ENDPOINT((USBx), (bEpNum),\ |
||||
((PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EP_T_MASK) | (wType) ))) |
||||
|
||||
/**
|
||||
* @brief gets the type in the endpoint register(bits EP_TYPE[1:0]) |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @retval Endpoint Type |
||||
*/ |
||||
#define PCD_GET_EPTYPE(USBx, bEpNum) (PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EP_T_FIELD) |
||||
|
||||
/**
|
||||
* @brief free buffer used from the application realizing it to the line |
||||
toggles bit SW_BUF in the double buffered endpoint register |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @param bDir: Direction |
||||
* @retval None |
||||
*/ |
||||
#define PCD_FreeUserBuffer(USBx, bEpNum, bDir)\ |
||||
{\
|
||||
if ((bDir) == PCD_EP_DBUF_OUT)\
|
||||
{ /* OUT double buffered endpoint */\
|
||||
PCD_TX_DTOG((USBx), (bEpNum));\
|
||||
}\
|
||||
else if ((bDir) == PCD_EP_DBUF_IN)\
|
||||
{ /* IN double buffered endpoint */\
|
||||
PCD_RX_DTOG((USBx), (bEpNum));\
|
||||
}\
|
||||
} |
||||
|
||||
/**
|
||||
* @brief gets direction of the double buffered endpoint |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @retval EP_DBUF_OUT, EP_DBUF_IN, |
||||
* EP_DBUF_ERR if the endpoint counter not yet programmed. |
||||
*/ |
||||
#define PCD_GET_DB_DIR(USBx, bEpNum)\ |
||||
{\
|
||||
if ((uint16_t)(*PCD_EP_RX_CNT((USBx), (bEpNum)) & 0xFC00) != 0)\
|
||||
return(PCD_EP_DBUF_OUT);\
|
||||
else if (((uint16_t)(*PCD_EP_TX_CNT((USBx), (bEpNum))) & 0x03FF) != 0)\
|
||||
return(PCD_EP_DBUF_IN);\
|
||||
else\
|
||||
return(PCD_EP_DBUF_ERR);\
|
||||
} |
||||
|
||||
/**
|
||||
* @brief sets the status for tx transfer (bits STAT_TX[1:0]). |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @param wState: new state |
||||
* @retval None |
||||
*/ |
||||
#define PCD_SET_EP_TX_STATUS(USBx, bEpNum, wState) { register uint16_t _wRegVal;\ |
||||
\
|
||||
_wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPTX_DTOGMASK;\
|
||||
/* toggle first bit ? */ \
|
||||
if((USB_EPTX_DTOG1 & (wState))!= 0U)\
|
||||
{ \
|
||||
_wRegVal ^= USB_EPTX_DTOG1; \
|
||||
} \
|
||||
/* toggle second bit ? */ \
|
||||
if((USB_EPTX_DTOG2 & (wState))!= 0U) \
|
||||
{ \
|
||||
_wRegVal ^= USB_EPTX_DTOG2; \
|
||||
} \
|
||||
PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX|USB_EP_CTR_TX));\
|
||||
} /* PCD_SET_EP_TX_STATUS */ |
||||
|
||||
/**
|
||||
* @brief sets the status for rx transfer (bits STAT_TX[1:0]) |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @param wState: new state |
||||
* @retval None |
||||
*/ |
||||
#define PCD_SET_EP_RX_STATUS(USBx, bEpNum,wState) {\ |
||||
register uint16_t _wRegVal; \
|
||||
\
|
||||
_wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPRX_DTOGMASK;\
|
||||
/* toggle first bit ? */ \
|
||||
if((USB_EPRX_DTOG1 & (wState))!= 0U) \
|
||||
{ \
|
||||
_wRegVal ^= USB_EPRX_DTOG1; \
|
||||
} \
|
||||
/* toggle second bit ? */ \
|
||||
if((USB_EPRX_DTOG2 & (wState))!= 0U) \
|
||||
{ \
|
||||
_wRegVal ^= USB_EPRX_DTOG2; \
|
||||
} \
|
||||
PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX|USB_EP_CTR_TX)); \
|
||||
} /* PCD_SET_EP_RX_STATUS */ |
||||
|
||||
/**
|
||||
* @brief sets the status for rx & tx (bits STAT_TX[1:0] & STAT_RX[1:0]) |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @param wStaterx: new state. |
||||
* @param wStatetx: new state. |
||||
* @retval None |
||||
*/ |
||||
#define PCD_SET_EP_TXRX_STATUS(USBx,bEpNum,wStaterx,wStatetx) {\ |
||||
register uint32_t _wRegVal; \
|
||||
\
|
||||
_wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & (USB_EPRX_DTOGMASK |USB_EPTX_STAT) ;\
|
||||
/* toggle first bit ? */ \
|
||||
if((USB_EPRX_DTOG1 & ((wStaterx)))!= 0U) \
|
||||
{ \
|
||||
_wRegVal ^= USB_EPRX_DTOG1; \
|
||||
} \
|
||||
/* toggle second bit ? */ \
|
||||
if((USB_EPRX_DTOG2 & (wStaterx))!= 0U) \
|
||||
{ \
|
||||
_wRegVal ^= USB_EPRX_DTOG2; \
|
||||
} \
|
||||
/* toggle first bit ? */ \
|
||||
if((USB_EPTX_DTOG1 & (wStatetx))!= 0U) \
|
||||
{ \
|
||||
_wRegVal ^= USB_EPTX_DTOG1; \
|
||||
} \
|
||||
/* toggle second bit ? */ \
|
||||
if((USB_EPTX_DTOG2 & (wStatetx))!= 0U) \
|
||||
{ \
|
||||
_wRegVal ^= USB_EPTX_DTOG2; \
|
||||
} \
|
||||
PCD_SET_ENDPOINT((USBx), (bEpNum), _wRegVal | USB_EP_CTR_RX|USB_EP_CTR_TX); \
|
||||
} /* PCD_SET_EP_TXRX_STATUS */ |
||||
|
||||
/**
|
||||
* @brief gets the status for tx/rx transfer (bits STAT_TX[1:0] |
||||
* /STAT_RX[1:0]) |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @retval status |
||||
*/ |
||||
#define PCD_GET_EP_TX_STATUS(USBx, bEpNum) ((uint16_t)PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPTX_STAT) |
||||
#define PCD_GET_EP_RX_STATUS(USBx, bEpNum) ((uint16_t)PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPRX_STAT) |
||||
|
||||
/**
|
||||
* @brief sets directly the VALID tx/rx-status into the endpoint register |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @retval None |
||||
*/ |
||||
#define PCD_SET_EP_TX_VALID(USBx, bEpNum) (PCD_SET_EP_TX_STATUS((USBx), (bEpNum), USB_EP_TX_VALID)) |
||||
#define PCD_SET_EP_RX_VALID(USBx, bEpNum) (PCD_SET_EP_RX_STATUS((USBx), (bEpNum), USB_EP_RX_VALID)) |
||||
|
||||
/**
|
||||
* @brief checks stall condition in an endpoint. |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @retval TRUE = endpoint in stall condition. |
||||
*/ |
||||
#define PCD_GET_EP_TX_STALL_STATUS(USBx, bEpNum) (PCD_GET_EP_TX_STATUS((USBx), (bEpNum)) \ |
||||
== USB_EP_TX_STALL) |
||||
#define PCD_GET_EP_RX_STALL_STATUS(USBx, bEpNum) (PCD_GET_EP_RX_STATUS((USBx), (bEpNum)) \ |
||||
== USB_EP_RX_STALL) |
||||
|
||||
/**
|
||||
* @brief set & clear EP_KIND bit. |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @retval None |
||||
*/ |
||||
#define PCD_SET_EP_KIND(USBx, bEpNum) (PCD_SET_ENDPOINT((USBx), (bEpNum), \ |
||||
(USB_EP_CTR_RX|USB_EP_CTR_TX|((PCD_GET_ENDPOINT((USBx), (bEpNum)) | USB_EP_KIND) & USB_EPREG_MASK)))) |
||||
#define PCD_CLEAR_EP_KIND(USBx, bEpNum) (PCD_SET_ENDPOINT((USBx), (bEpNum), \ |
||||
(USB_EP_CTR_RX|USB_EP_CTR_TX|(PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPKIND_MASK)))) |
||||
|
||||
/**
|
||||
* @brief Sets/clears directly STATUS_OUT bit in the endpoint register. |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @retval None |
||||
*/ |
||||
#define PCD_SET_OUT_STATUS(USBx, bEpNum) PCD_SET_EP_KIND((USBx), (bEpNum)) |
||||
#define PCD_CLEAR_OUT_STATUS(USBx, bEpNum) PCD_CLEAR_EP_KIND((USBx), (bEpNum)) |
||||
|
||||
/**
|
||||
* @brief Sets/clears directly EP_KIND bit in the endpoint register. |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @retval None |
||||
*/ |
||||
#define PCD_SET_EP_DBUF(USBx, bEpNum) PCD_SET_EP_KIND((USBx), (bEpNum)) |
||||
#define PCD_CLEAR_EP_DBUF(USBx, bEpNum) PCD_CLEAR_EP_KIND((USBx), (bEpNum)) |
||||
|
||||
/**
|
||||
* @brief Clears bit CTR_RX / CTR_TX in the endpoint register. |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @retval None |
||||
*/ |
||||
#define PCD_CLEAR_RX_EP_CTR(USBx, bEpNum) (PCD_SET_ENDPOINT((USBx), (bEpNum),\ |
||||
PCD_GET_ENDPOINT((USBx), (bEpNum)) & 0x7FFFU & USB_EPREG_MASK)) |
||||
#define PCD_CLEAR_TX_EP_CTR(USBx, bEpNum) (PCD_SET_ENDPOINT((USBx), (bEpNum),\ |
||||
PCD_GET_ENDPOINT((USBx), (bEpNum)) & 0xFF7FU & USB_EPREG_MASK)) |
||||
|
||||
/**
|
||||
* @brief Toggles DTOG_RX / DTOG_TX bit in the endpoint register. |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @retval None |
||||
*/ |
||||
#define PCD_RX_DTOG(USBx, bEpNum) (PCD_SET_ENDPOINT((USBx), (bEpNum), \ |
||||
USB_EP_CTR_RX|USB_EP_CTR_TX|USB_EP_DTOG_RX | (PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPREG_MASK))) |
||||
#define PCD_TX_DTOG(USBx, bEpNum) (PCD_SET_ENDPOINT((USBx), (bEpNum), \ |
||||
USB_EP_CTR_RX|USB_EP_CTR_TX|USB_EP_DTOG_TX | (PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPREG_MASK))) |
||||
|
||||
/**
|
||||
* @brief Clears DTOG_RX / DTOG_TX bit in the endpoint register. |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @retval None |
||||
*/ |
||||
#define PCD_CLEAR_RX_DTOG(USBx, bEpNum) if((PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EP_DTOG_RX) != 0U)\ |
||||
{ \
|
||||
PCD_RX_DTOG((USBx), (bEpNum)); \
|
||||
} |
||||
#define PCD_CLEAR_TX_DTOG(USBx, bEpNum) if((PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EP_DTOG_TX) != 0U)\ |
||||
{ \
|
||||
PCD_TX_DTOG((USBx), (bEpNum)); \
|
||||
} |
||||
|
||||
/**
|
||||
* @brief Sets address in an endpoint register. |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @param bAddr: Address. |
||||
* @retval None |
||||
*/ |
||||
#define PCD_SET_EP_ADDRESS(USBx, bEpNum,bAddr) PCD_SET_ENDPOINT((USBx), (bEpNum),\ |
||||
USB_EP_CTR_RX|USB_EP_CTR_TX|(PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPREG_MASK) | (bAddr)) |
||||
|
||||
#define PCD_GET_EP_ADDRESS(USBx, bEpNum) ((uint8_t)(PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPADDR_FIELD)) |
||||
|
||||
#define PCD_EP_TX_ADDRESS(USBx, bEpNum) ((uint32_t *)(((USBx)->BTABLE+(bEpNum)*8U)*2U+ ((uint32_t)(USBx) + 0x400U))) |
||||
#define PCD_EP_TX_CNT(USBx, bEpNum) ((uint32_t *)(((USBx)->BTABLE+(bEpNum)*8U+2U)*2U+ ((uint32_t)(USBx) + 0x400U))) |
||||
#define PCD_EP_RX_ADDRESS(USBx, bEpNum) ((uint32_t *)(((USBx)->BTABLE+(bEpNum)*8U+4U)*2U+ ((uint32_t)(USBx) + 0x400U))) |
||||
#define PCD_EP_RX_CNT(USBx, bEpNum) ((uint32_t *)(((USBx)->BTABLE+(bEpNum)*8U+6U)*2U+ ((uint32_t)(USBx) + 0x400U))) |
||||
|
||||
#define PCD_SET_EP_RX_CNT(USBx, bEpNum,wCount) {\ |
||||
uint32_t *pdwReg = PCD_EP_RX_CNT((USBx), (bEpNum)); \
|
||||
PCD_SET_EP_CNT_RX_REG(pdwReg, (wCount));\
|
||||
} |
||||
|
||||
/**
|
||||
* @brief sets address of the tx/rx buffer. |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @param wAddr: address to be set (must be word aligned). |
||||
* @retval None |
||||
*/ |
||||
#define PCD_SET_EP_TX_ADDRESS(USBx, bEpNum,wAddr) (*PCD_EP_TX_ADDRESS((USBx), (bEpNum)) = (((wAddr) >> 1U) << 1U)) |
||||
#define PCD_SET_EP_RX_ADDRESS(USBx, bEpNum,wAddr) (*PCD_EP_RX_ADDRESS((USBx), (bEpNum)) = (((wAddr) >> 1U) << 1U)) |
||||
|
||||
/**
|
||||
* @brief Gets address of the tx/rx buffer. |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @retval address of the buffer. |
||||
*/ |
||||
#define PCD_GET_EP_TX_ADDRESS(USBx, bEpNum) ((uint16_t)*PCD_EP_TX_ADDRESS((USBx), (bEpNum))) |
||||
#define PCD_GET_EP_RX_ADDRESS(USBx, bEpNum) ((uint16_t)*PCD_EP_RX_ADDRESS((USBx), (bEpNum))) |
||||
|
||||
/**
|
||||
* @brief Sets counter of rx buffer with no. of blocks. |
||||
* @param dwReg: Register |
||||
* @param wCount: Counter. |
||||
* @param wNBlocks: no. of Blocks. |
||||
* @retval None |
||||
*/ |
||||
#define PCD_CALC_BLK32(dwReg,wCount,wNBlocks) {\ |
||||
(wNBlocks) = (wCount) >> 5U;\
|
||||
if(((wCount) & 0x1FU) == 0U)\
|
||||
{ \
|
||||
(wNBlocks)--;\
|
||||
} \
|
||||
*pdwReg = (uint16_t)((uint16_t)((wNBlocks) << 10U) | 0x8000U); \
|
||||
}/* PCD_CALC_BLK32 */ |
||||
|
||||
#define PCD_CALC_BLK2(dwReg,wCount,wNBlocks) {\ |
||||
(wNBlocks) = (wCount) >> 1U;\
|
||||
if(((wCount) & 0x01U) != 0U)\
|
||||
{ \
|
||||
(wNBlocks)++;\
|
||||
} \
|
||||
*pdwReg = (uint16_t)((wNBlocks) << 10U);\
|
||||
}/* PCD_CALC_BLK2 */ |
||||
|
||||
#define PCD_SET_EP_CNT_RX_REG(dwReg,wCount) {\ |
||||
uint16_t wNBlocks;\
|
||||
if((wCount) > 62U) \
|
||||
{ \
|
||||
PCD_CALC_BLK32((dwReg),(wCount),wNBlocks); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
PCD_CALC_BLK2((dwReg),(wCount),wNBlocks); \
|
||||
} \
|
||||
}/* PCD_SET_EP_CNT_RX_REG */ |
||||
|
||||
#define PCD_SET_EP_RX_DBUF0_CNT(USBx, bEpNum,wCount) {\ |
||||
uint32_t *pdwReg = PCD_EP_TX_CNT((USBx), (bEpNum)); \
|
||||
PCD_SET_EP_CNT_RX_REG(pdwReg, (wCount));\
|
||||
} |
||||
|
||||
/**
|
||||
* @brief sets counter for the tx/rx buffer. |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @param wCount: Counter value. |
||||
* @retval None |
||||
*/ |
||||
#define PCD_SET_EP_TX_CNT(USBx, bEpNum,wCount) (*PCD_EP_TX_CNT((USBx), (bEpNum)) = (wCount)) |
||||
|
||||
|
||||
/**
|
||||
* @brief gets counter of the tx buffer. |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @retval Counter value |
||||
*/ |
||||
#define PCD_GET_EP_TX_CNT(USBx, bEpNum) ((uint16_t)(*PCD_EP_TX_CNT((USBx), (bEpNum))) & 0x3FFU) |
||||
#define PCD_GET_EP_RX_CNT(USBx, bEpNum) ((uint16_t)(*PCD_EP_RX_CNT((USBx), (bEpNum))) & 0x3FFU) |
||||
|
||||
/**
|
||||
* @brief Sets buffer 0/1 address in a double buffer endpoint. |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @param wBuf0Addr: buffer 0 address. |
||||
* @retval Counter value |
||||
*/ |
||||
#define PCD_SET_EP_DBUF0_ADDR(USBx, bEpNum,wBuf0Addr) {PCD_SET_EP_TX_ADDRESS((USBx), (bEpNum), (wBuf0Addr));} |
||||
#define PCD_SET_EP_DBUF1_ADDR(USBx, bEpNum,wBuf1Addr) {PCD_SET_EP_RX_ADDRESS((USBx), (bEpNum), (wBuf1Addr));} |
||||
|
||||
/**
|
||||
* @brief Sets addresses in a double buffer endpoint. |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @param wBuf0Addr: buffer 0 address. |
||||
* @param wBuf1Addr = buffer 1 address. |
||||
* @retval None |
||||
*/ |
||||
#define PCD_SET_EP_DBUF_ADDR(USBx, bEpNum,wBuf0Addr,wBuf1Addr) { \ |
||||
PCD_SET_EP_DBUF0_ADDR((USBx), (bEpNum), (wBuf0Addr));\
|
||||
PCD_SET_EP_DBUF1_ADDR((USBx), (bEpNum), (wBuf1Addr));\
|
||||
} /* PCD_SET_EP_DBUF_ADDR */ |
||||
|
||||
/**
|
||||
* @brief Gets buffer 0/1 address of a double buffer endpoint. |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @retval None |
||||
*/ |
||||
#define PCD_GET_EP_DBUF0_ADDR(USBx, bEpNum) (PCD_GET_EP_TX_ADDRESS((USBx), (bEpNum))) |
||||
#define PCD_GET_EP_DBUF1_ADDR(USBx, bEpNum) (PCD_GET_EP_RX_ADDRESS((USBx), (bEpNum))) |
||||
|
||||
/**
|
||||
* @brief Gets buffer 0/1 address of a double buffer endpoint. |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @param bDir: endpoint dir EP_DBUF_OUT = OUT
|
||||
* EP_DBUF_IN = IN
|
||||
* @param wCount: Counter value
|
||||
* @retval None |
||||
*/ |
||||
#define PCD_SET_EP_DBUF0_CNT(USBx, bEpNum, bDir, wCount) { \ |
||||
if((bDir) == PCD_EP_DBUF_OUT)\
|
||||
/* OUT endpoint */ \
|
||||
{PCD_SET_EP_RX_DBUF0_CNT((USBx), (bEpNum),(wCount));} \
|
||||
else if((bDir) == PCD_EP_DBUF_IN)\
|
||||
/* IN endpoint */ \
|
||||
*PCD_EP_TX_CNT((USBx), (bEpNum)) = (uint32_t)(wCount); \
|
||||
} /* SetEPDblBuf0Count*/ |
||||
|
||||
#define PCD_SET_EP_DBUF1_CNT(USBx, bEpNum, bDir, wCount) { \ |
||||
if((bDir) == PCD_EP_DBUF_OUT)\
|
||||
{/* OUT endpoint */ \
|
||||
PCD_SET_EP_RX_CNT((USBx), (bEpNum),(wCount)); \
|
||||
} \
|
||||
else if((bDir) == PCD_EP_DBUF_IN)\
|
||||
{/* IN endpoint */ \
|
||||
*PCD_EP_TX_CNT((USBx), (bEpNum)) = (uint32_t)(wCount); \
|
||||
} \
|
||||
} /* SetEPDblBuf1Count */ |
||||
|
||||
#define PCD_SET_EP_DBUF_CNT(USBx, bEpNum, bDir, wCount) {\ |
||||
PCD_SET_EP_DBUF0_CNT((USBx), (bEpNum), (bDir), (wCount)); \
|
||||
PCD_SET_EP_DBUF1_CNT((USBx), (bEpNum), (bDir), (wCount)); \
|
||||
} /* PCD_SET_EP_DBUF_CNT */ |
||||
|
||||
/**
|
||||
* @brief Gets buffer 0/1 rx/tx counter for double buffering. |
||||
* @param USBx: USB peripheral instance register address. |
||||
* @param bEpNum: Endpoint Number. |
||||
* @retval None |
||||
*/ |
||||
#define PCD_GET_EP_DBUF0_CNT(USBx, bEpNum) (PCD_GET_EP_TX_CNT((USBx), (bEpNum))) |
||||
#define PCD_GET_EP_DBUF1_CNT(USBx, bEpNum) (PCD_GET_EP_RX_CNT((USBx), (bEpNum))) |
||||
|
||||
#endif /* USB */ |
||||
|
||||
/** @defgroup PCD_Instance_definition PCD Instance definition
|
||||
* @{ |
||||
*/ |
||||
#define IS_PCD_ALL_INSTANCE IS_USB_ALL_INSTANCE |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#endif /* STM32F102x6 || STM32F102xB || */ |
||||
/* STM32F103x6 || STM32F103xB || */ |
||||
/* STM32F103xE || STM32F103xG || */ |
||||
/* STM32F105xC || STM32F107xC */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
|
||||
#endif /* __STM32F1xx_HAL_PCD_H */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,114 @@
@@ -0,0 +1,114 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32f1xx_hal_pcd_ex.h |
||||
* @author MCD Application Team |
||||
* @brief Header file of Extended PCD HAL module. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without modification, |
||||
* are permitted provided that the following conditions are met: |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
****************************************************************************** |
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __STM32F1xx_HAL_PCD_EX_H |
||||
#define __STM32F1xx_HAL_PCD_EX_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
#if defined(STM32F102x6) || defined(STM32F102xB) || \ |
||||
defined(STM32F103x6) || defined(STM32F103xB) || \
|
||||
defined(STM32F103xE) || defined(STM32F103xG) || \
|
||||
defined(STM32F105xC) || defined(STM32F107xC) |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32f1xx_hal_def.h" |
||||
|
||||
/** @addtogroup STM32F1xx_HAL_Driver
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup PCDEx
|
||||
* @{ |
||||
*/ |
||||
|
||||
/* Exported types ------------------------------------------------------------*/ |
||||
/* Exported constants --------------------------------------------------------*/ |
||||
/* Exported macros -----------------------------------------------------------*/ |
||||
/* Exported functions --------------------------------------------------------*/ |
||||
/** @addtogroup PCDEx_Exported_Functions PCDEx Exported Functions
|
||||
* @{ |
||||
*/ |
||||
/** @addtogroup PCDEx_Exported_Functions_Group1 Peripheral Control functions
|
||||
* @{ |
||||
*/ |
||||
#if defined (USB_OTG_FS) |
||||
HAL_StatusTypeDef HAL_PCDEx_SetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo, uint16_t size); |
||||
HAL_StatusTypeDef HAL_PCDEx_SetRxFiFo(PCD_HandleTypeDef *hpcd, uint16_t size); |
||||
#endif /* USB_OTG_FS */ |
||||
|
||||
#if defined (USB) |
||||
HAL_StatusTypeDef HAL_PCDEx_PMAConfig(PCD_HandleTypeDef *hpcd,
|
||||
uint16_t ep_addr, |
||||
uint16_t ep_kind, |
||||
uint32_t pmaadress); |
||||
#endif /* USB */ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @addtogroup PCDEx_Exported_Functions_Group2 Peripheral State functions
|
||||
* @{ |
||||
*/ |
||||
void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state); |
||||
/**
|
||||
* @} |
||||
*/ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
#endif /* STM32F102x6 || STM32F102xB || */ |
||||
/* STM32F103x6 || STM32F103xB || */ |
||||
/* STM32F103xE || STM32F103xG || */ |
||||
/* STM32F105xC || STM32F107xC */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
|
||||
#endif /* __STM32F1xx_HAL_PCD_EX_H */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,614 @@
@@ -0,0 +1,614 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32f1xx_ll_usb.h |
||||
* @author MCD Application Team |
||||
* @brief Header file of USB Low Layer HAL module. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without modification, |
||||
* are permitted provided that the following conditions are met: |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __STM32F1xx_LL_USB_H |
||||
#define __STM32F1xx_LL_USB_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
#if defined(STM32F102x6) || defined(STM32F102xB) || \ |
||||
defined(STM32F103x6) || defined(STM32F103xB) || \
|
||||
defined(STM32F103xE) || defined(STM32F103xG) || \
|
||||
defined(STM32F105xC) || defined(STM32F107xC) |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32f1xx_hal_def.h" |
||||
|
||||
/** @addtogroup STM32F1xx_HAL_Driver
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup USB_LL
|
||||
* @{ |
||||
*/ |
||||
|
||||
/* Exported types ------------------------------------------------------------*/ |
||||
/** @defgroup USB_LL_Exported_Types USB Low Layer Exported Types
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @brief USB Mode definition
|
||||
*/ |
||||
typedef enum
|
||||
{ |
||||
USB_DEVICE_MODE = 0, |
||||
USB_HOST_MODE = 1, |
||||
USB_DRD_MODE = 2 |
||||
}USB_ModeTypeDef; |
||||
|
||||
#if defined (USB_OTG_FS) |
||||
/**
|
||||
* @brief URB States definition |
||||
*/ |
||||
typedef enum { |
||||
URB_IDLE = 0, |
||||
URB_DONE, |
||||
URB_NOTREADY, |
||||
URB_NYET, |
||||
URB_ERROR, |
||||
URB_STALL |
||||
}USB_OTG_URBStateTypeDef; |
||||
|
||||
/**
|
||||
* @brief Host channel States definition |
||||
*/ |
||||
typedef enum { |
||||
HC_IDLE = 0, |
||||
HC_XFRC, |
||||
HC_HALTED, |
||||
HC_NAK, |
||||
HC_NYET, |
||||
HC_STALL, |
||||
HC_XACTERR,
|
||||
HC_BBLERR,
|
||||
HC_DATATGLERR |
||||
}USB_OTG_HCStateTypeDef; |
||||
|
||||
/**
|
||||
* @brief USB OTG Initialization Structure definition
|
||||
*/ |
||||
typedef struct |
||||
{ |
||||
uint32_t dev_endpoints; /*!< Device Endpoints number.
|
||||
This parameter depends on the used USB core. |
||||
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ |
||||
|
||||
uint32_t Host_channels; /*!< Host Channels number.
|
||||
This parameter Depends on the used USB core.
|
||||
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ |
||||
|
||||
uint32_t speed; /*!< USB Core speed.
|
||||
This parameter can be any value of @ref USB_Core_Speed_ */ |
||||
|
||||
uint32_t ep0_mps; /*!< Set the Endpoint 0 Max Packet size.
|
||||
This parameter can be any value of @ref USB_EP0_MPS_ */ |
||||
|
||||
uint32_t Sof_enable; /*!< Enable or disable the output of the SOF signal. */ |
||||
|
||||
uint32_t low_power_enable; /*!< Enable or disable the low power mode. */ |
||||
|
||||
uint32_t vbus_sensing_enable; /*!< Enable or disable the VBUS Sensing feature. */ |
||||
|
||||
uint32_t use_external_vbus; /*!< Enable or disable the use of the external VBUS. */ |
||||
}USB_OTG_CfgTypeDef; |
||||
|
||||
typedef struct |
||||
{ |
||||
uint8_t num; /*!< Endpoint number
|
||||
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ |
||||
|
||||
uint8_t is_in; /*!< Endpoint direction
|
||||
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ |
||||
|
||||
uint8_t is_stall; /*!< Endpoint stall condition
|
||||
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ |
||||
|
||||
uint8_t type; /*!< Endpoint type
|
||||
This parameter can be any value of @ref USB_EP_Type_ */ |
||||
|
||||
uint8_t data_pid_start; /*!< Initial data PID
|
||||
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ |
||||
|
||||
uint8_t even_odd_frame; /*!< IFrame parity
|
||||
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ |
||||
|
||||
uint16_t tx_fifo_num; /*!< Transmission FIFO number
|
||||
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ |
||||
|
||||
uint32_t maxpacket; /*!< Endpoint Max packet size
|
||||
This parameter must be a number between Min_Data = 0 and Max_Data = 64KB */ |
||||
|
||||
uint8_t *xfer_buff; /*!< Pointer to transfer buffer */ |
||||
|
||||
uint32_t dma_addr; /*!< 32 bits aligned transfer buffer address */ |
||||
|
||||
uint32_t xfer_len; /*!< Current transfer length */ |
||||
|
||||
uint32_t xfer_count; /*!< Partial transfer length in case of multi packet transfer */ |
||||
}USB_OTG_EPTypeDef; |
||||
|
||||
typedef struct |
||||
{ |
||||
uint8_t dev_addr ; /*!< USB device address.
|
||||
This parameter must be a number between Min_Data = 1 and Max_Data = 255 */ |
||||
|
||||
uint8_t ch_num; /*!< Host channel number.
|
||||
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ |
||||
|
||||
uint8_t ep_num; /*!< Endpoint number.
|
||||
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ |
||||
|
||||
uint8_t ep_is_in; /*!< Endpoint direction
|
||||
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ |
||||
|
||||
uint8_t speed; /*!< USB Host speed.
|
||||
This parameter can be any value of @ref USB_Core_Speed_ */ |
||||
|
||||
uint8_t do_ping; /*!< Enable or disable the use of the PING protocol for HS mode. */ |
||||
|
||||
uint8_t process_ping; /*!< Execute the PING protocol for HS mode. */ |
||||
|
||||
uint8_t ep_type; /*!< Endpoint Type.
|
||||
This parameter can be any value of @ref USB_EP_Type_ */ |
||||
|
||||
uint16_t max_packet; /*!< Endpoint Max packet size.
|
||||
This parameter must be a number between Min_Data = 0 and Max_Data = 64KB */ |
||||
|
||||
uint8_t data_pid; /*!< Initial data PID.
|
||||
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ |
||||
|
||||
uint8_t *xfer_buff; /*!< Pointer to transfer buffer. */ |
||||
|
||||
uint32_t xfer_len; /*!< Current transfer length. */ |
||||
|
||||
uint32_t xfer_count; /*!< Partial transfer length in case of multi packet transfer. */ |
||||
|
||||
uint8_t toggle_in; /*!< IN transfer current toggle flag.
|
||||
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ |
||||
|
||||
uint8_t toggle_out; /*!< OUT transfer current toggle flag
|
||||
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ |
||||
|
||||
uint32_t dma_addr; /*!< 32 bits aligned transfer buffer address. */ |
||||
|
||||
uint32_t ErrCnt; /*!< Host channel error count.*/ |
||||
|
||||
USB_OTG_URBStateTypeDef urb_state; /*!< URB state.
|
||||
This parameter can be any value of @ref USB_OTG_URBStateTypeDef */ |
||||
|
||||
USB_OTG_HCStateTypeDef state; /*!< Host Channel state.
|
||||
This parameter can be any value of @ref USB_OTG_HCStateTypeDef */ |
||||
}USB_OTG_HCTypeDef; |
||||
#endif /* USB_OTG_FS */ |
||||
|
||||
#if defined (USB) |
||||
/**
|
||||
* @brief USB Initialization Structure definition
|
||||
*/ |
||||
typedef struct |
||||
{ |
||||
uint32_t dev_endpoints; /*!< Device Endpoints number.
|
||||
This parameter depends on the used USB core.
|
||||
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ |
||||
|
||||
uint32_t speed; /*!< USB Core speed.
|
||||
This parameter can be any value of @ref USB_Core_Speed */ |
||||
|
||||
uint32_t ep0_mps; /*!< Set the Endpoint 0 Max Packet size.
|
||||
This parameter can be any value of @ref USB_EP0_MPS */ |
||||
|
||||
uint32_t phy_itface; /*!< Select the used PHY interface.
|
||||
This parameter can be any value of @ref USB_Core_PHY */ |
||||
|
||||
uint32_t Sof_enable; /*!< Enable or disable the output of the SOF signal. */ |
||||
|
||||
uint32_t low_power_enable; /*!< Enable or disable Low Power mode */ |
||||
|
||||
uint32_t lpm_enable; /*!< Enable or disable Battery charging. */ |
||||
|
||||
uint32_t battery_charging_enable; /*!< Enable or disable Battery charging. */ |
||||
} USB_CfgTypeDef; |
||||
|
||||
typedef struct |
||||
{ |
||||
uint8_t num; /*!< Endpoint number
|
||||
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ |
||||
|
||||
uint8_t is_in; /*!< Endpoint direction
|
||||
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ |
||||
|
||||
uint8_t is_stall; /*!< Endpoint stall condition
|
||||
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ |
||||
|
||||
uint8_t type; /*!< Endpoint type
|
||||
This parameter can be any value of @ref USB_EP_Type */ |
||||
|
||||
uint16_t pmaadress; /*!< PMA Address
|
||||
This parameter can be any value between Min_addr = 0 and Max_addr = 1K */ |
||||
|
||||
uint16_t pmaaddr0; /*!< PMA Address0
|
||||
This parameter can be any value between Min_addr = 0 and Max_addr = 1K */ |
||||
|
||||
uint16_t pmaaddr1; /*!< PMA Address1
|
||||
This parameter can be any value between Min_addr = 0 and Max_addr = 1K */ |
||||
|
||||
uint8_t doublebuffer; /*!< Double buffer enable
|
||||
This parameter can be 0 or 1 */ |
||||
|
||||
uint16_t tx_fifo_num; /*!< This parameter is not required by USB Device FS peripheral, it is used
|
||||
only by USB OTG FS peripheral
|
||||
This parameter is added to ensure compatibility across USB peripherals */ |
||||
|
||||
uint32_t maxpacket; /*!< Endpoint Max packet size
|
||||
This parameter must be a number between Min_Data = 0 and Max_Data = 64KB */ |
||||
|
||||
uint8_t *xfer_buff; /*!< Pointer to transfer buffer */ |
||||
|
||||
uint32_t xfer_len; /*!< Current transfer length */ |
||||
|
||||
uint32_t xfer_count; /*!< Partial transfer length in case of multi packet transfer */ |
||||
|
||||
} USB_EPTypeDef; |
||||
#endif /* USB */ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Exported constants --------------------------------------------------------*/ |
||||
/** @defgroup USB_LL_Exported_Constants USB Low Layer Exported Constants
|
||||
* @{ |
||||
*/ |
||||
#if defined (USB_OTG_FS) |
||||
/** @defgroup USB_LL_Core_Mode USB Low Layer Core Mode
|
||||
* @{ |
||||
*/ |
||||
#define USB_OTG_MODE_DEVICE 0 |
||||
#define USB_OTG_MODE_HOST 1 |
||||
#define USB_OTG_MODE_DRD 2 |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USB_LL_Core_Speed USB Low Layer Core Speed
|
||||
* @{ |
||||
*/ |
||||
#define USB_OTG_SPEED_LOW 2 |
||||
#define USB_OTG_SPEED_FULL 3 |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USB_LL_Core_PHY USB Low Layer Core PHY
|
||||
* @{ |
||||
*/ |
||||
#define USB_OTG_ULPI_PHY 1 |
||||
#define USB_OTG_EMBEDDED_PHY 2 |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USB_LL_Core_MPS USB Low Layer Core MPS
|
||||
* @{ |
||||
*/ |
||||
#define USB_OTG_FS_MAX_PACKET_SIZE 64 |
||||
#define USB_OTG_MAX_EP0_SIZE 64 |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USB_LL_Core_PHY_Frequency USB Low Layer Core PHY Frequency
|
||||
* @{ |
||||
*/ |
||||
#define DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ (1 << 1) |
||||
#define DSTS_ENUMSPD_LS_PHY_6MHZ (2 << 1) |
||||
#define DSTS_ENUMSPD_FS_PHY_48MHZ (3 << 1) |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USB_LL_CORE_Frame_Interval USB Low Layer Core Frame Interval
|
||||
* @{ |
||||
*/ |
||||
#define DCFG_FRAME_INTERVAL_80 0 |
||||
#define DCFG_FRAME_INTERVAL_85 1 |
||||
#define DCFG_FRAME_INTERVAL_90 2 |
||||
#define DCFG_FRAME_INTERVAL_95 3 |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USB_LL_EP0_MPS USB Low Layer EP0 MPS
|
||||
* @{ |
||||
*/ |
||||
#define DEP0CTL_MPS_64 0 |
||||
#define DEP0CTL_MPS_32 1 |
||||
#define DEP0CTL_MPS_16 2 |
||||
#define DEP0CTL_MPS_8 3 |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USB_LL_EP_Speed USB Low Layer EP Speed
|
||||
* @{ |
||||
*/ |
||||
#define EP_SPEED_LOW 0 |
||||
#define EP_SPEED_FULL 1 |
||||
#define EP_SPEED_HIGH 2 |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USB_LL_EP_Type USB Low Layer EP Type
|
||||
* @{ |
||||
*/ |
||||
#define EP_TYPE_CTRL 0 |
||||
#define EP_TYPE_ISOC 1 |
||||
#define EP_TYPE_BULK 2 |
||||
#define EP_TYPE_INTR 3 |
||||
#define EP_TYPE_MSK 3 |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USB_LL_STS_Defines USB Low Layer STS Defines
|
||||
* @{ |
||||
*/ |
||||
#define STS_GOUT_NAK 1 |
||||
#define STS_DATA_UPDT 2 |
||||
#define STS_XFER_COMP 3 |
||||
#define STS_SETUP_COMP 4 |
||||
#define STS_SETUP_UPDT 6 |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USB_LL_HCFG_SPEED_Defines USB Low Layer HCFG Speed Defines
|
||||
* @{ |
||||
*/ |
||||
#define HCFG_30_60_MHZ 0 |
||||
#define HCFG_48_MHZ 1 |
||||
#define HCFG_6_MHZ 2 |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USB_LL_HPRT0_PRTSPD_SPEED_Defines USB Low Layer HPRT0 PRTSPD Speed Defines
|
||||
* @{ |
||||
*/ |
||||
#define HPRT0_PRTSPD_HIGH_SPEED 0 |
||||
#define HPRT0_PRTSPD_FULL_SPEED 1 |
||||
#define HPRT0_PRTSPD_LOW_SPEED 2 |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#define HCCHAR_CTRL 0 |
||||
#define HCCHAR_ISOC 1 |
||||
#define HCCHAR_BULK 2 |
||||
#define HCCHAR_INTR 3 |
||||
|
||||
#define HC_PID_DATA0 0 |
||||
#define HC_PID_DATA2 1 |
||||
#define HC_PID_DATA1 2 |
||||
#define HC_PID_SETUP 3 |
||||
|
||||
#define GRXSTS_PKTSTS_IN 2 |
||||
#define GRXSTS_PKTSTS_IN_XFER_COMP 3 |
||||
#define GRXSTS_PKTSTS_DATA_TOGGLE_ERR 5 |
||||
#define GRXSTS_PKTSTS_CH_HALTED 7 |
||||
|
||||
#define USBx_PCGCCTL *(__IO uint32_t *)((uint32_t)USBx + USB_OTG_PCGCCTL_BASE) |
||||
#define USBx_HPRT0 *(__IO uint32_t *)((uint32_t)USBx + USB_OTG_HOST_PORT_BASE) |
||||
|
||||
#define USBx_DEVICE ((USB_OTG_DeviceTypeDef *)((uint32_t )USBx + USB_OTG_DEVICE_BASE)) |
||||
#define USBx_INEP(i) ((USB_OTG_INEndpointTypeDef *)((uint32_t)USBx + USB_OTG_IN_ENDPOINT_BASE + (i)*USB_OTG_EP_REG_SIZE)) |
||||
#define USBx_OUTEP(i) ((USB_OTG_OUTEndpointTypeDef *)((uint32_t)USBx + USB_OTG_OUT_ENDPOINT_BASE + (i)*USB_OTG_EP_REG_SIZE)) |
||||
#define USBx_DFIFO(i) *(__IO uint32_t *)((uint32_t)USBx + USB_OTG_FIFO_BASE + (i) * USB_OTG_FIFO_SIZE) |
||||
|
||||
#define USBx_HOST ((USB_OTG_HostTypeDef *)((uint32_t )USBx + USB_OTG_HOST_BASE)) |
||||
#define USBx_HC(i) ((USB_OTG_HostChannelTypeDef *)((uint32_t)USBx + USB_OTG_HOST_CHANNEL_BASE + (i)*USB_OTG_HOST_CHANNEL_SIZE)) |
||||
#endif /* USB_OTG_FS */ |
||||
|
||||
#if defined (USB) |
||||
/** @defgroup USB_LL_EP0_MPS USB Low Layer EP0 MPS
|
||||
* @{ |
||||
*/ |
||||
#define DEP0CTL_MPS_64 0 |
||||
#define DEP0CTL_MPS_32 1 |
||||
#define DEP0CTL_MPS_16 2 |
||||
#define DEP0CTL_MPS_8 3 |
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup USB_LL_EP_Type USB Low Layer EP Type
|
||||
* @{ |
||||
*/ |
||||
#define EP_TYPE_CTRL 0 |
||||
#define EP_TYPE_ISOC 1 |
||||
#define EP_TYPE_BULK 2 |
||||
#define EP_TYPE_INTR 3 |
||||
#define EP_TYPE_MSK 3 |
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
#define BTABLE_ADDRESS (0x000) |
||||
#endif /* USB */ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Exported macros -----------------------------------------------------------*/ |
||||
/** @defgroup USB_LL_Exported_Macros USB Low Layer Exported Macros
|
||||
* @{ |
||||
*/ |
||||
#if defined (USB_OTG_FS) |
||||
#define USB_MASK_INTERRUPT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->GINTMSK &= ~(__INTERRUPT__)) |
||||
#define USB_UNMASK_INTERRUPT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->GINTMSK |= (__INTERRUPT__)) |
||||
|
||||
#define CLEAR_IN_EP_INTR(__EPNUM__, __INTERRUPT__) (USBx_INEP(__EPNUM__)->DIEPINT = (__INTERRUPT__)) |
||||
#define CLEAR_OUT_EP_INTR(__EPNUM__, __INTERRUPT__) (USBx_OUTEP(__EPNUM__)->DOEPINT = (__INTERRUPT__)) |
||||
#endif /* USB_OTG_FS */ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Exported functions --------------------------------------------------------*/ |
||||
/** @addtogroup USB_LL_Exported_Functions USB Low Layer Exported Functions
|
||||
* @{ |
||||
*/ |
||||
/** @addtogroup USB_LL_Exported_Functions_Group1 Peripheral Control functions
|
||||
* @{ |
||||
*/ |
||||
#if defined (USB_OTG_FS) |
||||
HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef Init); |
||||
HAL_StatusTypeDef USB_DevInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef Init); |
||||
HAL_StatusTypeDef USB_EnableGlobalInt(USB_OTG_GlobalTypeDef *USBx); |
||||
HAL_StatusTypeDef USB_DisableGlobalInt(USB_OTG_GlobalTypeDef *USBx); |
||||
HAL_StatusTypeDef USB_SetCurrentMode(USB_OTG_GlobalTypeDef *USBx , USB_ModeTypeDef mode); |
||||
HAL_StatusTypeDef USB_SetDevSpeed(USB_OTG_GlobalTypeDef *USBx , uint8_t speed); |
||||
HAL_StatusTypeDef USB_FlushRxFifo (USB_OTG_GlobalTypeDef *USBx); |
||||
HAL_StatusTypeDef USB_FlushTxFifo (USB_OTG_GlobalTypeDef *USBx, uint32_t num ); |
||||
HAL_StatusTypeDef USB_ActivateEndpoint(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep); |
||||
HAL_StatusTypeDef USB_DeactivateEndpoint(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep); |
||||
HAL_StatusTypeDef USB_EPStartXfer(USB_OTG_GlobalTypeDef *USBx , USB_OTG_EPTypeDef *ep); |
||||
HAL_StatusTypeDef USB_EP0StartXfer(USB_OTG_GlobalTypeDef *USBx , USB_OTG_EPTypeDef *ep); |
||||
HAL_StatusTypeDef USB_WritePacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *src, uint8_t ch_ep_num, uint16_t len); |
||||
void * USB_ReadPacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *dest, uint16_t len); |
||||
HAL_StatusTypeDef USB_EPSetStall(USB_OTG_GlobalTypeDef *USBx , USB_OTG_EPTypeDef *ep); |
||||
HAL_StatusTypeDef USB_EPClearStall(USB_OTG_GlobalTypeDef *USBx , USB_OTG_EPTypeDef *ep); |
||||
HAL_StatusTypeDef USB_SetDevAddress (USB_OTG_GlobalTypeDef *USBx, uint8_t address); |
||||
HAL_StatusTypeDef USB_DevConnect (USB_OTG_GlobalTypeDef *USBx); |
||||
HAL_StatusTypeDef USB_DevDisconnect (USB_OTG_GlobalTypeDef *USBx); |
||||
HAL_StatusTypeDef USB_StopDevice(USB_OTG_GlobalTypeDef *USBx); |
||||
HAL_StatusTypeDef USB_ActivateSetup (USB_OTG_GlobalTypeDef *USBx); |
||||
HAL_StatusTypeDef USB_EP0_OutStart(USB_OTG_GlobalTypeDef *USBx, uint8_t *psetup); |
||||
uint8_t USB_GetDevSpeed(USB_OTG_GlobalTypeDef *USBx); |
||||
uint32_t USB_GetMode(USB_OTG_GlobalTypeDef *USBx); |
||||
uint32_t USB_ReadInterrupts (USB_OTG_GlobalTypeDef *USBx); |
||||
uint32_t USB_ReadDevAllOutEpInterrupt (USB_OTG_GlobalTypeDef *USBx); |
||||
uint32_t USB_ReadDevOutEPInterrupt (USB_OTG_GlobalTypeDef *USBx , uint8_t epnum); |
||||
uint32_t USB_ReadDevAllInEpInterrupt (USB_OTG_GlobalTypeDef *USBx); |
||||
uint32_t USB_ReadDevInEPInterrupt (USB_OTG_GlobalTypeDef *USBx , uint8_t epnum); |
||||
void USB_ClearInterrupts (USB_OTG_GlobalTypeDef *USBx, uint32_t interrupt); |
||||
|
||||
HAL_StatusTypeDef USB_HostInit (USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg); |
||||
HAL_StatusTypeDef USB_InitFSLSPClkSel(USB_OTG_GlobalTypeDef *USBx , uint8_t freq); |
||||
HAL_StatusTypeDef USB_ResetPort(USB_OTG_GlobalTypeDef *USBx); |
||||
HAL_StatusTypeDef USB_DriveVbus (USB_OTG_GlobalTypeDef *USBx, uint8_t state); |
||||
uint32_t USB_GetHostSpeed (USB_OTG_GlobalTypeDef *USBx); |
||||
uint32_t USB_GetCurrentFrame (USB_OTG_GlobalTypeDef *USBx); |
||||
HAL_StatusTypeDef USB_HC_Init(USB_OTG_GlobalTypeDef *USBx,
|
||||
uint8_t ch_num, |
||||
uint8_t epnum, |
||||
uint8_t dev_address, |
||||
uint8_t speed, |
||||
uint8_t ep_type, |
||||
uint16_t mps); |
||||
HAL_StatusTypeDef USB_HC_StartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_HCTypeDef *hc); |
||||
uint32_t USB_HC_ReadInterrupt (USB_OTG_GlobalTypeDef *USBx); |
||||
HAL_StatusTypeDef USB_HC_Halt(USB_OTG_GlobalTypeDef *USBx , uint8_t hc_num); |
||||
HAL_StatusTypeDef USB_DoPing(USB_OTG_GlobalTypeDef *USBx , uint8_t ch_num); |
||||
HAL_StatusTypeDef USB_StopHost(USB_OTG_GlobalTypeDef *USBx); |
||||
HAL_StatusTypeDef USB_ActivateRemoteWakeup(USB_OTG_GlobalTypeDef *USBx); |
||||
HAL_StatusTypeDef USB_DeActivateRemoteWakeup(USB_OTG_GlobalTypeDef *USBx); |
||||
#endif /* USB_OTG_FS */ |
||||
|
||||
#if defined (USB) |
||||
HAL_StatusTypeDef USB_CoreInit(USB_TypeDef *USBx, USB_CfgTypeDef Init); |
||||
HAL_StatusTypeDef USB_DevInit(USB_TypeDef *USBx, USB_CfgTypeDef Init); |
||||
HAL_StatusTypeDef USB_EnableGlobalInt(USB_TypeDef *USBx); |
||||
HAL_StatusTypeDef USB_DisableGlobalInt(USB_TypeDef *USBx); |
||||
HAL_StatusTypeDef USB_SetCurrentMode(USB_TypeDef *USBx , USB_ModeTypeDef mode); |
||||
HAL_StatusTypeDef USB_SetDevSpeed(USB_TypeDef *USBx , uint8_t speed); |
||||
HAL_StatusTypeDef USB_FlushRxFifo (USB_TypeDef *USBx); |
||||
HAL_StatusTypeDef USB_FlushTxFifo (USB_TypeDef *USBx, uint32_t num ); |
||||
HAL_StatusTypeDef USB_ActivateEndpoint(USB_TypeDef *USBx, USB_EPTypeDef *ep); |
||||
HAL_StatusTypeDef USB_DeactivateEndpoint(USB_TypeDef *USBx, USB_EPTypeDef *ep); |
||||
HAL_StatusTypeDef USB_EPStartXfer(USB_TypeDef *USBx , USB_EPTypeDef *ep); |
||||
HAL_StatusTypeDef USB_WritePacket(USB_TypeDef *USBx, uint8_t *src, uint8_t ch_ep_num, uint16_t len); |
||||
void * USB_ReadPacket(USB_TypeDef *USBx, uint8_t *dest, uint16_t len); |
||||
HAL_StatusTypeDef USB_EPSetStall(USB_TypeDef *USBx , USB_EPTypeDef *ep); |
||||
HAL_StatusTypeDef USB_EPClearStall(USB_TypeDef *USBx , USB_EPTypeDef *ep); |
||||
HAL_StatusTypeDef USB_SetDevAddress (USB_TypeDef *USBx, uint8_t address); |
||||
HAL_StatusTypeDef USB_DevConnect (USB_TypeDef *USBx); |
||||
HAL_StatusTypeDef USB_DevDisconnect (USB_TypeDef *USBx); |
||||
HAL_StatusTypeDef USB_StopDevice(USB_TypeDef *USBx); |
||||
HAL_StatusTypeDef USB_EP0_OutStart(USB_TypeDef *USBx, uint8_t *psetup); |
||||
uint32_t USB_ReadInterrupts (USB_TypeDef *USBx); |
||||
uint32_t USB_ReadDevAllOutEpInterrupt (USB_TypeDef *USBx); |
||||
uint32_t USB_ReadDevOutEPInterrupt (USB_TypeDef *USBx , uint8_t epnum); |
||||
uint32_t USB_ReadDevAllInEpInterrupt (USB_TypeDef *USBx); |
||||
uint32_t USB_ReadDevInEPInterrupt (USB_TypeDef *USBx , uint8_t epnum); |
||||
void USB_ClearInterrupts (USB_TypeDef *USBx, uint32_t interrupt); |
||||
|
||||
HAL_StatusTypeDef USB_ActivateRemoteWakeup(USB_TypeDef *USBx); |
||||
HAL_StatusTypeDef USB_DeActivateRemoteWakeup(USB_TypeDef *USBx); |
||||
void USB_WritePMA(USB_TypeDef *USBx, uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes); |
||||
void USB_ReadPMA(USB_TypeDef *USBx, uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes); |
||||
#endif /* USB */ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#endif /* STM32F102x6 || STM32F102xB || */ |
||||
/* STM32F103x6 || STM32F103xB || */ |
||||
/* STM32F103xE || STM32F103xG || */ |
||||
/* STM32F105xC || STM32F107xC */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
|
||||
#endif /* __STM32F1xx_LL_USB_H */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,250 @@
@@ -0,0 +1,250 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32f1xx_hal_pcd_ex.c |
||||
* @author MCD Application Team |
||||
* @brief Extended PCD HAL module driver. |
||||
* This file provides firmware functions to manage the following
|
||||
* functionalities of the USB Peripheral Controller: |
||||
* + Extended features functions: Update FIFO configuration,
|
||||
* PMA configuration for EPs
|
||||
* |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without modification, |
||||
* are permitted provided that the following conditions are met: |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32f1xx_hal.h" |
||||
|
||||
/** @addtogroup STM32F1xx_HAL_Driver
|
||||
* @{ |
||||
*/ |
||||
|
||||
#ifdef HAL_PCD_MODULE_ENABLED |
||||
|
||||
#if defined(STM32F102x6) || defined(STM32F102xB) || \ |
||||
defined(STM32F103x6) || defined(STM32F103xB) || \
|
||||
defined(STM32F103xE) || defined(STM32F103xG) || \
|
||||
defined(STM32F105xC) || defined(STM32F107xC) |
||||
|
||||
|
||||
/** @defgroup PCDEx PCDEx
|
||||
* @brief PCD Extended HAL module driver |
||||
* @{ |
||||
*/ |
||||
|
||||
|
||||
/* Private types -------------------------------------------------------------*/ |
||||
/* Private variables ---------------------------------------------------------*/ |
||||
/* Private constants ---------------------------------------------------------*/ |
||||
/* Private macros ------------------------------------------------------------*/ |
||||
/* Private functions ---------------------------------------------------------*/ |
||||
/* Exported functions --------------------------------------------------------*/ |
||||
/** @defgroup PCDEx_Exported_Functions PCDEx Exported Functions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup PCDEx_Exported_Functions_Group1 Peripheral Control functions
|
||||
* @brief PCDEx control functions
|
||||
* |
||||
@verbatim |
||||
=============================================================================== |
||||
##### Extended Peripheral Control functions ##### |
||||
=============================================================================== |
||||
[..] This section provides functions allowing to: |
||||
(+) Update FIFO (USB_OTG_FS) |
||||
(+) Update PMA configuration (USB) |
||||
|
||||
@endverbatim |
||||
* @{ |
||||
*/ |
||||
|
||||
#if defined (USB_OTG_FS) |
||||
/**
|
||||
* @brief Set Tx FIFO |
||||
* @param hpcd: PCD handle |
||||
* @param fifo: The number of Tx fifo |
||||
* @param size: Fifo size |
||||
* @retval HAL status |
||||
*/ |
||||
HAL_StatusTypeDef HAL_PCDEx_SetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo, uint16_t size) |
||||
{ |
||||
uint8_t index = 0; |
||||
uint32_t Tx_Offset = 0U; |
||||
|
||||
/* TXn min size = 16 words. (n : Transmit FIFO index)
|
||||
When a TxFIFO is not used, the Configuration should be as follows:
|
||||
case 1 : n > m and Txn is not used (n,m : Transmit FIFO indexes) |
||||
--> Txm can use the space allocated for Txn. |
||||
case2 : n < m and Txn is not used (n,m : Transmit FIFO indexes) |
||||
--> Txn should be configured with the minimum space of 16 words |
||||
The FIFO is used optimally when used TxFIFOs are allocated in the top
|
||||
of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones. |
||||
When DMA is used 3n * FIFO locations should be reserved for internal DMA registers */ |
||||
|
||||
Tx_Offset = hpcd->Instance->GRXFSIZ; |
||||
|
||||
if(fifo == 0U) |
||||
{ |
||||
hpcd->Instance->DIEPTXF0_HNPTXFSIZ = (size << 16U) | Tx_Offset; |
||||
} |
||||
else |
||||
{ |
||||
Tx_Offset += (hpcd->Instance->DIEPTXF0_HNPTXFSIZ) >> 16U; |
||||
for(index = 0; index < (fifo - 1); index++) |
||||
{ |
||||
Tx_Offset += (hpcd->Instance->DIEPTXF[index] >> 16U); |
||||
} |
||||
|
||||
/* Multiply Tx_Size by 2 to get higher performance */ |
||||
hpcd->Instance->DIEPTXF[fifo - 1U] = (size << 16U) | Tx_Offset; |
||||
|
||||
} |
||||
|
||||
return HAL_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Set Rx FIFO |
||||
* @param hpcd: PCD handle |
||||
* @param size: Size of Rx fifo |
||||
* @retval HAL status |
||||
*/ |
||||
HAL_StatusTypeDef HAL_PCDEx_SetRxFiFo(PCD_HandleTypeDef *hpcd, uint16_t size) |
||||
{ |
||||
hpcd->Instance->GRXFSIZ = size; |
||||
return HAL_OK; |
||||
} |
||||
#endif /* USB_OTG_FS */ |
||||
|
||||
#if defined (USB) |
||||
/**
|
||||
* @brief Configure PMA for EP |
||||
* @param hpcd : Device instance |
||||
* @param ep_addr: endpoint address |
||||
* @param ep_kind: endpoint Kind |
||||
* USB_SNG_BUF: Single Buffer used |
||||
* USB_DBL_BUF: Double Buffer used |
||||
* @param pmaadress: EP address in The PMA: In case of single buffer endpoint |
||||
* this parameter is 16-bit value providing the address |
||||
* in PMA allocated to endpoint. |
||||
* In case of double buffer endpoint this parameter |
||||
* is a 32-bit value providing the endpoint buffer 0 address |
||||
* in the LSB part of 32-bit value and endpoint buffer 1 address |
||||
* in the MSB part of 32-bit value. |
||||
* @retval HAL status |
||||
*/ |
||||
|
||||
HAL_StatusTypeDef HAL_PCDEx_PMAConfig(PCD_HandleTypeDef *hpcd,
|
||||
uint16_t ep_addr, |
||||
uint16_t ep_kind, |
||||
uint32_t pmaadress) |
||||
|
||||
{ |
||||
PCD_EPTypeDef *ep = NULL; |
||||
|
||||
/* initialize ep structure*/ |
||||
if ((ep_addr & 0x80U) == 0x80U) |
||||
{ |
||||
ep = &hpcd->IN_ep[ep_addr & 0x7FU]; |
||||
} |
||||
else |
||||
{ |
||||
ep = &hpcd->OUT_ep[ep_addr]; |
||||
} |
||||
|
||||
/* Here we check if the endpoint is single or double Buffer*/ |
||||
if (ep_kind == PCD_SNG_BUF) |
||||
{ |
||||
/*Single Buffer*/ |
||||
ep->doublebuffer = 0U; |
||||
/*Configure te PMA*/ |
||||
ep->pmaadress = (uint16_t)pmaadress; |
||||
} |
||||
else /*USB_DBL_BUF*/ |
||||
{ |
||||
/*Double Buffer Endpoint*/ |
||||
ep->doublebuffer = 1U; |
||||
/*Configure the PMA*/ |
||||
ep->pmaaddr0 = pmaadress & 0x0000FFFFU; |
||||
ep->pmaaddr1 = (pmaadress & 0xFFFF0000U) >> 16U; |
||||
} |
||||
|
||||
return HAL_OK;
|
||||
} |
||||
#endif /* USB */ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup PCDEx_Exported_Functions_Group2 Peripheral State functions
|
||||
* @brief Manage device connection state
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @brief Software Device Connection,
|
||||
* this function is not required by USB OTG FS peripheral, it is used
|
||||
* only by USB Device FS peripheral. |
||||
* @param hpcd: PCD handle |
||||
* @param state: connection state (0 : disconnected / 1: connected) |
||||
* @retval None |
||||
*/ |
||||
__weak void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state) |
||||
{ |
||||
/* Prevent unused argument(s) compilation warning */ |
||||
UNUSED(hpcd); |
||||
UNUSED(state); |
||||
/* NOTE : This function Should not be modified, when the callback is needed,
|
||||
the HAL_PCDEx_SetConnectionState could be implemented in the user file |
||||
*/
|
||||
} |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#endif /* STM32F102x6 || STM32F102xB || */ |
||||
/* STM32F103x6 || STM32F103xB || */ |
||||
/* STM32F103xE || STM32F103xG || */ |
||||
/* STM32F105xC || STM32F107xC */ |
||||
|
||||
#endif /* HAL_PCD_MODULE_ENABLED */ |
||||
|
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,114 @@
@@ -0,0 +1,114 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file : usb_device.h |
||||
* @version : v2.0_Cube |
||||
* @brief : Header for usb_device.c file. |
||||
****************************************************************************** |
||||
* This notice applies to any and all portions of this file |
||||
* that are not between comment pairs USER CODE BEGIN and |
||||
* USER CODE END. Other portions of this file, whether
|
||||
* inserted by the user or by software development tools |
||||
* are owned by their respective copyright owners. |
||||
* |
||||
* Copyright (c) 2018 STMicroelectronics International N.V.
|
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted, provided that the following conditions are met: |
||||
* |
||||
* 1. Redistribution of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. Neither the name of STMicroelectronics nor the names of other
|
||||
* contributors to this software may be used to endorse or promote products
|
||||
* derived from this software without specific written permission. |
||||
* 4. This software, including modifications and/or derivative works of this
|
||||
* software, must execute solely and exclusively on microcontroller or |
||||
* microprocessor devices manufactured by or for STMicroelectronics. |
||||
* 5. Redistribution and use of this software other than as permitted under
|
||||
* this license is void and will automatically terminate your rights under
|
||||
* this license.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY |
||||
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __USB_DEVICE__H__ |
||||
#define __USB_DEVICE__H__ |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32f1xx.h" |
||||
#include "stm32f1xx_hal.h" |
||||
#include "usbd_def.h" |
||||
|
||||
/* USER CODE BEGIN INCLUDE */ |
||||
|
||||
/* USER CODE END INCLUDE */ |
||||
|
||||
/** @addtogroup USBD_OTG_DRIVER
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup USBD_DEVICE USBD_DEVICE
|
||||
* @brief Device file for Usb otg low level driver. |
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup USBD_DEVICE_Exported_Variables USBD_DEVICE_Exported_Variables
|
||||
* @brief Public variables. |
||||
* @{ |
||||
*/ |
||||
|
||||
/** USB device core handle. */ |
||||
extern USBD_HandleTypeDef hUsbDeviceFS; |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_DEVICE_Exported_FunctionsPrototype USBD_DEVICE_Exported_FunctionsPrototype
|
||||
* @brief Declaration of public functions for Usb device. |
||||
* @{ |
||||
*/ |
||||
|
||||
/** USB Device initialization function. */ |
||||
void MX_USB_DEVICE_Init(void); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __USB_DEVICE__H__ */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,158 @@
@@ -0,0 +1,158 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file : usbd_cdc_if.h |
||||
* @version : v2.0_Cube |
||||
* @brief : Header for usbd_cdc_if.c file. |
||||
****************************************************************************** |
||||
* This notice applies to any and all portions of this file |
||||
* that are not between comment pairs USER CODE BEGIN and |
||||
* USER CODE END. Other portions of this file, whether
|
||||
* inserted by the user or by software development tools |
||||
* are owned by their respective copyright owners. |
||||
* |
||||
* Copyright (c) 2018 STMicroelectronics International N.V.
|
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted, provided that the following conditions are met: |
||||
* |
||||
* 1. Redistribution of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. Neither the name of STMicroelectronics nor the names of other
|
||||
* contributors to this software may be used to endorse or promote products
|
||||
* derived from this software without specific written permission. |
||||
* 4. This software, including modifications and/or derivative works of this
|
||||
* software, must execute solely and exclusively on microcontroller or |
||||
* microprocessor devices manufactured by or for STMicroelectronics. |
||||
* 5. Redistribution and use of this software other than as permitted under
|
||||
* this license is void and will automatically terminate your rights under
|
||||
* this license.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY |
||||
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __USBD_CDC_IF_H__ |
||||
#define __USBD_CDC_IF_H__ |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "usbd_cdc.h" |
||||
|
||||
/* USER CODE BEGIN INCLUDE */ |
||||
|
||||
/* USER CODE END INCLUDE */ |
||||
|
||||
/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
|
||||
* @brief For Usb device. |
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup USBD_CDC_IF USBD_CDC_IF
|
||||
* @brief Usb VCP device module |
||||
* @{ |
||||
*/
|
||||
|
||||
/** @defgroup USBD_CDC_IF_Exported_Defines USBD_CDC_IF_Exported_Defines
|
||||
* @brief Defines. |
||||
* @{ |
||||
*/ |
||||
/* USER CODE BEGIN EXPORTED_DEFINES */ |
||||
|
||||
/* USER CODE END EXPORTED_DEFINES */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_CDC_IF_Exported_Types USBD_CDC_IF_Exported_Types
|
||||
* @brief Types. |
||||
* @{ |
||||
*/ |
||||
|
||||
/* USER CODE BEGIN EXPORTED_TYPES */ |
||||
|
||||
/* USER CODE END EXPORTED_TYPES */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_CDC_IF_Exported_Macros USBD_CDC_IF_Exported_Macros
|
||||
* @brief Aliases. |
||||
* @{ |
||||
*/ |
||||
|
||||
/* USER CODE BEGIN EXPORTED_MACRO */ |
||||
|
||||
/* USER CODE END EXPORTED_MACRO */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_CDC_IF_Exported_Variables USBD_CDC_IF_Exported_Variables
|
||||
* @brief Public variables. |
||||
* @{ |
||||
*/ |
||||
|
||||
/** CDC Interface callback. */ |
||||
extern USBD_CDC_ItfTypeDef USBD_Interface_fops_FS; |
||||
|
||||
/* USER CODE BEGIN EXPORTED_VARIABLES */ |
||||
|
||||
/* USER CODE END EXPORTED_VARIABLES */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_CDC_IF_Exported_FunctionsPrototype USBD_CDC_IF_Exported_FunctionsPrototype
|
||||
* @brief Public functions declaration. |
||||
* @{ |
||||
*/ |
||||
|
||||
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len); |
||||
|
||||
/* USER CODE BEGIN EXPORTED_FUNCTIONS */ |
||||
|
||||
/* USER CODE END EXPORTED_FUNCTIONS */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __USBD_CDC_IF_H__ */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,207 @@
@@ -0,0 +1,207 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file : usbd_conf.h |
||||
* @version : v2.0_Cube |
||||
* @brief : Header for usbd_conf.c file. |
||||
****************************************************************************** |
||||
* This notice applies to any and all portions of this file |
||||
* that are not between comment pairs USER CODE BEGIN and |
||||
* USER CODE END. Other portions of this file, whether
|
||||
* inserted by the user or by software development tools |
||||
* are owned by their respective copyright owners. |
||||
* |
||||
* Copyright (c) 2018 STMicroelectronics International N.V.
|
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted, provided that the following conditions are met: |
||||
* |
||||
* 1. Redistribution of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. Neither the name of STMicroelectronics nor the names of other
|
||||
* contributors to this software may be used to endorse or promote products
|
||||
* derived from this software without specific written permission. |
||||
* 4. This software, including modifications and/or derivative works of this
|
||||
* software, must execute solely and exclusively on microcontroller or |
||||
* microprocessor devices manufactured by or for STMicroelectronics. |
||||
* 5. Redistribution and use of this software other than as permitted under
|
||||
* this license is void and will automatically terminate your rights under
|
||||
* this license.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY |
||||
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __USBD_CONF__H__ |
||||
#define __USBD_CONF__H__ |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
#include <string.h> |
||||
#include "stm32f1xx.h" |
||||
#include "stm32f1xx_hal.h" |
||||
#include "usbd_def.h" |
||||
|
||||
/* USER CODE BEGIN INCLUDE */ |
||||
|
||||
/* USER CODE END INCLUDE */ |
||||
|
||||
/** @addtogroup USBD_OTG_DRIVER
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup USBD_CONF USBD_CONF
|
||||
* @brief Configuration file for Usb otg low level driver. |
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup USBD_CONF_Exported_Variables USBD_CONF_Exported_Variables
|
||||
* @brief Public variables. |
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_CONF_Exported_Defines USBD_CONF_Exported_Defines
|
||||
* @brief Defines for configuration of the Usb device. |
||||
* @{ |
||||
*/ |
||||
|
||||
/*---------- -----------*/ |
||||
#define USBD_MAX_NUM_INTERFACES 1 |
||||
/*---------- -----------*/ |
||||
#define USBD_MAX_NUM_CONFIGURATION 1 |
||||
/*---------- -----------*/ |
||||
#define USBD_MAX_STR_DESC_SIZ 512 |
||||
/*---------- -----------*/ |
||||
#define USBD_SUPPORT_USER_STRING 0 |
||||
/*---------- -----------*/ |
||||
#define USBD_DEBUG_LEVEL 0 |
||||
/*---------- -----------*/ |
||||
#define USBD_SELF_POWERED 1 |
||||
/*---------- -----------*/ |
||||
#define MAX_STATIC_ALLOC_SIZE 512 |
||||
|
||||
/****************************************/ |
||||
/* #define for FS and HS identification */ |
||||
#define DEVICE_FS 0 |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_CONF_Exported_Macros USBD_CONF_Exported_Macros
|
||||
* @brief Aliases. |
||||
* @{ |
||||
*/ |
||||
|
||||
/* Memory management macros */ |
||||
|
||||
/** Alias for memory allocation. */ |
||||
#define USBD_malloc (uint32_t *)USBD_static_malloc |
||||
|
||||
/** Alias for memory release. */ |
||||
#define USBD_free USBD_static_free |
||||
|
||||
/** Alias for memory set. */ |
||||
#define USBD_memset /* Not used */ |
||||
|
||||
/** Alias for memory copy. */ |
||||
#define USBD_memcpy /* Not used */ |
||||
|
||||
/** Alias for delay. */ |
||||
#define USBD_Delay HAL_Delay |
||||
|
||||
/* For footprint reasons and since only one allocation is handled in the HID class
|
||||
driver, the malloc/free is changed into a static allocation method */ |
||||
void *USBD_static_malloc(uint32_t size); |
||||
void USBD_static_free(void *p); |
||||
|
||||
/* DEBUG macros */ |
||||
|
||||
#if (USBD_DEBUG_LEVEL > 0) |
||||
#define USBD_UsrLog(...) printf(__VA_ARGS__);\ |
||||
printf("\n"); |
||||
#else |
||||
#define USBD_UsrLog(...) |
||||
#endif |
||||
|
||||
#if (USBD_DEBUG_LEVEL > 1) |
||||
|
||||
#define USBD_ErrLog(...) printf("ERROR: ") ;\ |
||||
printf(__VA_ARGS__);\
|
||||
printf("\n"); |
||||
#else |
||||
#define USBD_ErrLog(...) |
||||
#endif |
||||
|
||||
#if (USBD_DEBUG_LEVEL > 2) |
||||
#define USBD_DbgLog(...) printf("DEBUG : ") ;\ |
||||
printf(__VA_ARGS__);\
|
||||
printf("\n"); |
||||
#else |
||||
#define USBD_DbgLog(...) |
||||
#endif |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_CONF_Exported_Types USBD_CONF_Exported_Types
|
||||
* @brief Types. |
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_CONF_Exported_FunctionsPrototype USBD_CONF_Exported_FunctionsPrototype
|
||||
* @brief Declaration of public functions for Usb device. |
||||
* @{ |
||||
*/ |
||||
|
||||
/* Exported functions -------------------------------------------------------*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __USBD_CONF__H__ */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,155 @@
@@ -0,0 +1,155 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file : usbd_desc.h |
||||
* @version : v2.0_Cube |
||||
* @brief : Header for usbd_conf.c file. |
||||
****************************************************************************** |
||||
* This notice applies to any and all portions of this file |
||||
* that are not between comment pairs USER CODE BEGIN and |
||||
* USER CODE END. Other portions of this file, whether
|
||||
* inserted by the user or by software development tools |
||||
* are owned by their respective copyright owners. |
||||
* |
||||
* Copyright (c) 2018 STMicroelectronics International N.V.
|
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted, provided that the following conditions are met: |
||||
* |
||||
* 1. Redistribution of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. Neither the name of STMicroelectronics nor the names of other
|
||||
* contributors to this software may be used to endorse or promote products
|
||||
* derived from this software without specific written permission. |
||||
* 4. This software, including modifications and/or derivative works of this
|
||||
* software, must execute solely and exclusively on microcontroller or |
||||
* microprocessor devices manufactured by or for STMicroelectronics. |
||||
* 5. Redistribution and use of this software other than as permitted under
|
||||
* this license is void and will automatically terminate your rights under
|
||||
* this license.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY |
||||
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __USBD_DESC__H__ |
||||
#define __USBD_DESC__H__ |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "usbd_def.h" |
||||
|
||||
/* USER CODE BEGIN INCLUDE */ |
||||
|
||||
/* USER CODE END INCLUDE */ |
||||
|
||||
/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup USBD_DESC USBD_DESC
|
||||
* @brief Usb device descriptors module. |
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup USBD_DESC_Exported_Defines USBD_DESC_Exported_Defines
|
||||
* @brief Defines. |
||||
* @{ |
||||
*/ |
||||
|
||||
/* USER CODE BEGIN EXPORTED_DEFINES */ |
||||
|
||||
/* USER CODE END EXPORTED_DEFINES */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_DESC_Exported_TypesDefinitions USBD_DESC_Exported_TypesDefinitions
|
||||
* @brief Types. |
||||
* @{ |
||||
*/ |
||||
|
||||
/* USER CODE BEGIN EXPORTED_TYPES */ |
||||
|
||||
/* USER CODE END EXPORTED_TYPES */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_DESC_Exported_Macros USBD_DESC_Exported_Macros
|
||||
* @brief Aliases. |
||||
* @{ |
||||
*/ |
||||
|
||||
/* USER CODE BEGIN EXPORTED_MACRO */ |
||||
|
||||
/* USER CODE END EXPORTED_MACRO */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_DESC_Exported_Variables USBD_DESC_Exported_Variables
|
||||
* @brief Public variables. |
||||
* @{ |
||||
*/ |
||||
|
||||
/** Descriptor for the Usb device. */ |
||||
extern USBD_DescriptorsTypeDef FS_Desc; |
||||
|
||||
/* USER CODE BEGIN EXPORTED_VARIABLES */ |
||||
|
||||
/* USER CODE END EXPORTED_VARIABLES */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_DESC_Exported_FunctionsPrototype USBD_DESC_Exported_FunctionsPrototype
|
||||
* @brief Public functions declaration. |
||||
* @{ |
||||
*/ |
||||
|
||||
/* USER CODE BEGIN EXPORTED_FUNCTIONS */ |
||||
|
||||
/* USER CODE END EXPORTED_FUNCTIONS */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __USBD_DESC__H__ */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,179 @@
@@ -0,0 +1,179 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file usbd_cdc.h |
||||
* @author MCD Application Team |
||||
* @version V2.4.2 |
||||
* @date 11-December-2015 |
||||
* @brief header file for the usbd_cdc.c file. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT 2015 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. |
||||
* |
||||
****************************************************************************** |
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __USB_CDC_H |
||||
#define __USB_CDC_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "usbd_ioreq.h" |
||||
|
||||
/** @addtogroup STM32_USB_DEVICE_LIBRARY
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup usbd_cdc
|
||||
* @brief This file is the Header file for usbd_cdc.c |
||||
* @{ |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup usbd_cdc_Exported_Defines
|
||||
* @{ |
||||
*/
|
||||
#define CDC_IN_EP 0x81 /* EP1 for data IN */ |
||||
#define CDC_OUT_EP 0x01 /* EP1 for data OUT */ |
||||
#define CDC_CMD_EP 0x82 /* EP2 for CDC commands */ |
||||
|
||||
/* CDC Endpoints parameters: you can fine tune these values depending on the needed baudrates and performance. */ |
||||
#define CDC_DATA_HS_MAX_PACKET_SIZE 512 /* Endpoint IN & OUT Packet size */ |
||||
#define CDC_DATA_FS_MAX_PACKET_SIZE 64 /* Endpoint IN & OUT Packet size */ |
||||
#define CDC_CMD_PACKET_SIZE 8 /* Control Endpoint Packet size */ |
||||
|
||||
#define USB_CDC_CONFIG_DESC_SIZ 67 |
||||
#define CDC_DATA_HS_IN_PACKET_SIZE CDC_DATA_HS_MAX_PACKET_SIZE |
||||
#define CDC_DATA_HS_OUT_PACKET_SIZE CDC_DATA_HS_MAX_PACKET_SIZE |
||||
|
||||
#define CDC_DATA_FS_IN_PACKET_SIZE CDC_DATA_FS_MAX_PACKET_SIZE |
||||
#define CDC_DATA_FS_OUT_PACKET_SIZE CDC_DATA_FS_MAX_PACKET_SIZE |
||||
|
||||
/*---------------------------------------------------------------------*/ |
||||
/* CDC definitions */ |
||||
/*---------------------------------------------------------------------*/ |
||||
#define CDC_SEND_ENCAPSULATED_COMMAND 0x00 |
||||
#define CDC_GET_ENCAPSULATED_RESPONSE 0x01 |
||||
#define CDC_SET_COMM_FEATURE 0x02 |
||||
#define CDC_GET_COMM_FEATURE 0x03 |
||||
#define CDC_CLEAR_COMM_FEATURE 0x04 |
||||
#define CDC_SET_LINE_CODING 0x20 |
||||
#define CDC_GET_LINE_CODING 0x21 |
||||
#define CDC_SET_CONTROL_LINE_STATE 0x22 |
||||
#define CDC_SEND_BREAK 0x23 |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup USBD_CORE_Exported_TypesDefinitions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
typedef struct |
||||
{ |
||||
uint32_t bitrate; |
||||
uint8_t format; |
||||
uint8_t paritytype; |
||||
uint8_t datatype; |
||||
}USBD_CDC_LineCodingTypeDef; |
||||
|
||||
typedef struct _USBD_CDC_Itf |
||||
{ |
||||
int8_t (* Init) (void); |
||||
int8_t (* DeInit) (void); |
||||
int8_t (* Control) (uint8_t, uint8_t * , uint16_t);
|
||||
int8_t (* Receive) (uint8_t *, uint32_t *);
|
||||
|
||||
}USBD_CDC_ItfTypeDef; |
||||
|
||||
|
||||
typedef struct |
||||
{ |
||||
uint32_t data[CDC_DATA_HS_MAX_PACKET_SIZE/4]; /* Force 32bits alignment */ |
||||
uint8_t CmdOpCode; |
||||
uint8_t CmdLength;
|
||||
uint8_t *RxBuffer;
|
||||
uint8_t *TxBuffer;
|
||||
uint32_t RxLength; |
||||
uint32_t TxLength;
|
||||
|
||||
__IO uint32_t TxState;
|
||||
__IO uint32_t RxState;
|
||||
} |
||||
USBD_CDC_HandleTypeDef;
|
||||
|
||||
|
||||
|
||||
/** @defgroup USBD_CORE_Exported_Macros
|
||||
* @{ |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup USBD_CORE_Exported_Variables
|
||||
* @{ |
||||
*/
|
||||
|
||||
extern USBD_ClassTypeDef USBD_CDC; |
||||
#define USBD_CDC_CLASS &USBD_CDC |
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup USB_CORE_Exported_Functions
|
||||
* @{ |
||||
*/ |
||||
uint8_t USBD_CDC_RegisterInterface (USBD_HandleTypeDef *pdev,
|
||||
USBD_CDC_ItfTypeDef *fops); |
||||
|
||||
uint8_t USBD_CDC_SetTxBuffer (USBD_HandleTypeDef *pdev, |
||||
uint8_t *pbuff, |
||||
uint16_t length); |
||||
|
||||
uint8_t USBD_CDC_SetRxBuffer (USBD_HandleTypeDef *pdev, |
||||
uint8_t *pbuff); |
||||
|
||||
uint8_t USBD_CDC_ReceivePacket (USBD_HandleTypeDef *pdev); |
||||
|
||||
uint8_t USBD_CDC_TransmitPacket (USBD_HandleTypeDef *pdev); |
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __USB_CDC_H */ |
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,925 @@
@@ -0,0 +1,925 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file usbd_cdc.c |
||||
* @author MCD Application Team |
||||
* @version V2.4.2 |
||||
* @date 11-December-2015 |
||||
* @brief This file provides the high layer firmware functions to manage the
|
||||
* following functionalities of the USB CDC Class: |
||||
* - Initialization and Configuration of high and low layer |
||||
* - Enumeration as CDC Device (and enumeration for each implemented memory interface) |
||||
* - OUT/IN data transfer |
||||
* - Command IN transfer (class requests management) |
||||
* - Error management |
||||
*
|
||||
* @verbatim |
||||
*
|
||||
* ===================================================================
|
||||
* CDC Class Driver Description |
||||
* ===================================================================
|
||||
* This driver manages the "Universal Serial Bus Class Definitions for Communications Devices |
||||
* Revision 1.2 November 16, 2007" and the sub-protocol specification of "Universal Serial Bus
|
||||
* Communications Class Subclass Specification for PSTN Devices Revision 1.2 February 9, 2007" |
||||
* This driver implements the following aspects of the specification: |
||||
* - Device descriptor management |
||||
* - Configuration descriptor management |
||||
* - Enumeration as CDC device with 2 data endpoints (IN and OUT) and 1 command endpoint (IN) |
||||
* - Requests management (as described in section 6.2 in specification) |
||||
* - Abstract Control Model compliant |
||||
* - Union Functional collection (using 1 IN endpoint for control) |
||||
* - Data interface class |
||||
*
|
||||
* These aspects may be enriched or modified for a specific user application. |
||||
*
|
||||
* This driver doesn't implement the following aspects of the specification
|
||||
* (but it is possible to manage these features with some modifications on this driver): |
||||
* - Any class-specific aspect relative to communication classes should be managed by user application. |
||||
* - All communication classes other than PSTN are not managed |
||||
*
|
||||
* @endverbatim |
||||
*
|
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT 2015 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. |
||||
* |
||||
****************************************************************************** |
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "usbd_cdc.h" |
||||
#include "usbd_desc.h" |
||||
#include "usbd_ctlreq.h" |
||||
|
||||
|
||||
/** @addtogroup STM32_USB_DEVICE_LIBRARY
|
||||
* @{ |
||||
*/ |
||||
|
||||
|
||||
/** @defgroup USBD_CDC
|
||||
* @brief usbd core module |
||||
* @{ |
||||
*/
|
||||
|
||||
/** @defgroup USBD_CDC_Private_TypesDefinitions
|
||||
* @{ |
||||
*/
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup USBD_CDC_Private_Defines
|
||||
* @{ |
||||
*/
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup USBD_CDC_Private_Macros
|
||||
* @{ |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup USBD_CDC_Private_FunctionPrototypes
|
||||
* @{ |
||||
*/ |
||||
|
||||
|
||||
static uint8_t USBD_CDC_Init (USBD_HandleTypeDef *pdev,
|
||||
uint8_t cfgidx); |
||||
|
||||
static uint8_t USBD_CDC_DeInit (USBD_HandleTypeDef *pdev,
|
||||
uint8_t cfgidx); |
||||
|
||||
static uint8_t USBD_CDC_Setup (USBD_HandleTypeDef *pdev,
|
||||
USBD_SetupReqTypedef *req); |
||||
|
||||
static uint8_t USBD_CDC_DataIn (USBD_HandleTypeDef *pdev,
|
||||
uint8_t epnum); |
||||
|
||||
static uint8_t USBD_CDC_DataOut (USBD_HandleTypeDef *pdev,
|
||||
uint8_t epnum); |
||||
|
||||
static uint8_t USBD_CDC_EP0_RxReady (USBD_HandleTypeDef *pdev); |
||||
|
||||
static uint8_t *USBD_CDC_GetFSCfgDesc (uint16_t *length); |
||||
|
||||
static uint8_t *USBD_CDC_GetHSCfgDesc (uint16_t *length); |
||||
|
||||
static uint8_t *USBD_CDC_GetOtherSpeedCfgDesc (uint16_t *length); |
||||
|
||||
static uint8_t *USBD_CDC_GetOtherSpeedCfgDesc (uint16_t *length); |
||||
|
||||
uint8_t *USBD_CDC_GetDeviceQualifierDescriptor (uint16_t *length); |
||||
|
||||
/* USB Standard Device Descriptor */ |
||||
__ALIGN_BEGIN static uint8_t USBD_CDC_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END = |
||||
{ |
||||
USB_LEN_DEV_QUALIFIER_DESC, |
||||
USB_DESC_TYPE_DEVICE_QUALIFIER, |
||||
0x00, |
||||
0x02, |
||||
0x00, |
||||
0x00, |
||||
0x00, |
||||
0x40, |
||||
0x01, |
||||
0x00, |
||||
}; |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup USBD_CDC_Private_Variables
|
||||
* @{ |
||||
*/
|
||||
|
||||
|
||||
/* CDC interface class callbacks structure */ |
||||
USBD_ClassTypeDef USBD_CDC =
|
||||
{ |
||||
USBD_CDC_Init, |
||||
USBD_CDC_DeInit, |
||||
USBD_CDC_Setup, |
||||
NULL, /* EP0_TxSent, */ |
||||
USBD_CDC_EP0_RxReady, |
||||
USBD_CDC_DataIn, |
||||
USBD_CDC_DataOut, |
||||
NULL, |
||||
NULL, |
||||
NULL,
|
||||
USBD_CDC_GetHSCfgDesc,
|
||||
USBD_CDC_GetFSCfgDesc,
|
||||
USBD_CDC_GetOtherSpeedCfgDesc,
|
||||
USBD_CDC_GetDeviceQualifierDescriptor, |
||||
}; |
||||
|
||||
/* USB CDC device Configuration Descriptor */ |
||||
__ALIGN_BEGIN uint8_t USBD_CDC_CfgHSDesc[USB_CDC_CONFIG_DESC_SIZ] __ALIGN_END = |
||||
{ |
||||
/*Configuration Descriptor*/ |
||||
0x09, /* bLength: Configuration Descriptor size */ |
||||
USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */ |
||||
USB_CDC_CONFIG_DESC_SIZ, /* wTotalLength:no of returned bytes */ |
||||
0x00, |
||||
0x02, /* bNumInterfaces: 2 interface */ |
||||
0x01, /* bConfigurationValue: Configuration value */ |
||||
0x00, /* iConfiguration: Index of string descriptor describing the configuration */ |
||||
0xC0, /* bmAttributes: self powered */ |
||||
0x32, /* MaxPower 0 mA */ |
||||
|
||||
/*---------------------------------------------------------------------------*/ |
||||
|
||||
/*Interface Descriptor */ |
||||
0x09, /* bLength: Interface Descriptor size */ |
||||
USB_DESC_TYPE_INTERFACE, /* bDescriptorType: Interface */ |
||||
/* Interface descriptor type */ |
||||
0x00, /* bInterfaceNumber: Number of Interface */ |
||||
0x00, /* bAlternateSetting: Alternate setting */ |
||||
0x01, /* bNumEndpoints: One endpoints used */ |
||||
0x02, /* bInterfaceClass: Communication Interface Class */ |
||||
0x02, /* bInterfaceSubClass: Abstract Control Model */ |
||||
0x01, /* bInterfaceProtocol: Common AT commands */ |
||||
0x00, /* iInterface: */ |
||||
|
||||
/*Header Functional Descriptor*/ |
||||
0x05, /* bLength: Endpoint Descriptor size */ |
||||
0x24, /* bDescriptorType: CS_INTERFACE */ |
||||
0x00, /* bDescriptorSubtype: Header Func Desc */ |
||||
0x10, /* bcdCDC: spec release number */ |
||||
0x01, |
||||
|
||||
/*Call Management Functional Descriptor*/ |
||||
0x05, /* bFunctionLength */ |
||||
0x24, /* bDescriptorType: CS_INTERFACE */ |
||||
0x01, /* bDescriptorSubtype: Call Management Func Desc */ |
||||
0x00, /* bmCapabilities: D0+D1 */ |
||||
0x01, /* bDataInterface: 1 */ |
||||
|
||||
/*ACM Functional Descriptor*/ |
||||
0x04, /* bFunctionLength */ |
||||
0x24, /* bDescriptorType: CS_INTERFACE */ |
||||
0x02, /* bDescriptorSubtype: Abstract Control Management desc */ |
||||
0x02, /* bmCapabilities */ |
||||
|
||||
/*Union Functional Descriptor*/ |
||||
0x05, /* bFunctionLength */ |
||||
0x24, /* bDescriptorType: CS_INTERFACE */ |
||||
0x06, /* bDescriptorSubtype: Union func desc */ |
||||
0x00, /* bMasterInterface: Communication class interface */ |
||||
0x01, /* bSlaveInterface0: Data Class Interface */ |
||||
|
||||
/*Endpoint 2 Descriptor*/ |
||||
0x07, /* bLength: Endpoint Descriptor size */ |
||||
USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */ |
||||
CDC_CMD_EP, /* bEndpointAddress */ |
||||
0x03, /* bmAttributes: Interrupt */ |
||||
LOBYTE(CDC_CMD_PACKET_SIZE), /* wMaxPacketSize: */ |
||||
HIBYTE(CDC_CMD_PACKET_SIZE), |
||||
0x10, /* bInterval: */
|
||||
/*---------------------------------------------------------------------------*/ |
||||
|
||||
/*Data class interface descriptor*/ |
||||
0x09, /* bLength: Endpoint Descriptor size */ |
||||
USB_DESC_TYPE_INTERFACE, /* bDescriptorType: */ |
||||
0x01, /* bInterfaceNumber: Number of Interface */ |
||||
0x00, /* bAlternateSetting: Alternate setting */ |
||||
0x02, /* bNumEndpoints: Two endpoints used */ |
||||
0x0A, /* bInterfaceClass: CDC */ |
||||
0x00, /* bInterfaceSubClass: */ |
||||
0x00, /* bInterfaceProtocol: */ |
||||
0x00, /* iInterface: */ |
||||
|
||||
/*Endpoint OUT Descriptor*/ |
||||
0x07, /* bLength: Endpoint Descriptor size */ |
||||
USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */ |
||||
CDC_OUT_EP, /* bEndpointAddress */ |
||||
0x02, /* bmAttributes: Bulk */ |
||||
LOBYTE(CDC_DATA_HS_MAX_PACKET_SIZE), /* wMaxPacketSize: */ |
||||
HIBYTE(CDC_DATA_HS_MAX_PACKET_SIZE), |
||||
0x00, /* bInterval: ignore for Bulk transfer */ |
||||
|
||||
/*Endpoint IN Descriptor*/ |
||||
0x07, /* bLength: Endpoint Descriptor size */ |
||||
USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */ |
||||
CDC_IN_EP, /* bEndpointAddress */ |
||||
0x02, /* bmAttributes: Bulk */ |
||||
LOBYTE(CDC_DATA_HS_MAX_PACKET_SIZE), /* wMaxPacketSize: */ |
||||
HIBYTE(CDC_DATA_HS_MAX_PACKET_SIZE), |
||||
0x00 /* bInterval: ignore for Bulk transfer */ |
||||
} ; |
||||
|
||||
|
||||
/* USB CDC device Configuration Descriptor */ |
||||
__ALIGN_BEGIN uint8_t USBD_CDC_CfgFSDesc[USB_CDC_CONFIG_DESC_SIZ] __ALIGN_END = |
||||
{ |
||||
/*Configuration Descriptor*/ |
||||
0x09, /* bLength: Configuration Descriptor size */ |
||||
USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */ |
||||
USB_CDC_CONFIG_DESC_SIZ, /* wTotalLength:no of returned bytes */ |
||||
0x00, |
||||
0x02, /* bNumInterfaces: 2 interface */ |
||||
0x01, /* bConfigurationValue: Configuration value */ |
||||
0x00, /* iConfiguration: Index of string descriptor describing the configuration */ |
||||
0xC0, /* bmAttributes: self powered */ |
||||
0x32, /* MaxPower 0 mA */ |
||||
|
||||
/*---------------------------------------------------------------------------*/ |
||||
|
||||
/*Interface Descriptor */ |
||||
0x09, /* bLength: Interface Descriptor size */ |
||||
USB_DESC_TYPE_INTERFACE, /* bDescriptorType: Interface */ |
||||
/* Interface descriptor type */ |
||||
0x00, /* bInterfaceNumber: Number of Interface */ |
||||
0x00, /* bAlternateSetting: Alternate setting */ |
||||
0x01, /* bNumEndpoints: One endpoints used */ |
||||
0x02, /* bInterfaceClass: Communication Interface Class */ |
||||
0x02, /* bInterfaceSubClass: Abstract Control Model */ |
||||
0x01, /* bInterfaceProtocol: Common AT commands */ |
||||
0x00, /* iInterface: */ |
||||
|
||||
/*Header Functional Descriptor*/ |
||||
0x05, /* bLength: Endpoint Descriptor size */ |
||||
0x24, /* bDescriptorType: CS_INTERFACE */ |
||||
0x00, /* bDescriptorSubtype: Header Func Desc */ |
||||
0x10, /* bcdCDC: spec release number */ |
||||
0x01, |
||||
|
||||
/*Call Management Functional Descriptor*/ |
||||
0x05, /* bFunctionLength */ |
||||
0x24, /* bDescriptorType: CS_INTERFACE */ |
||||
0x01, /* bDescriptorSubtype: Call Management Func Desc */ |
||||
0x00, /* bmCapabilities: D0+D1 */ |
||||
0x01, /* bDataInterface: 1 */ |
||||
|
||||
/*ACM Functional Descriptor*/ |
||||
0x04, /* bFunctionLength */ |
||||
0x24, /* bDescriptorType: CS_INTERFACE */ |
||||
0x02, /* bDescriptorSubtype: Abstract Control Management desc */ |
||||
0x02, /* bmCapabilities */ |
||||
|
||||
/*Union Functional Descriptor*/ |
||||
0x05, /* bFunctionLength */ |
||||
0x24, /* bDescriptorType: CS_INTERFACE */ |
||||
0x06, /* bDescriptorSubtype: Union func desc */ |
||||
0x00, /* bMasterInterface: Communication class interface */ |
||||
0x01, /* bSlaveInterface0: Data Class Interface */ |
||||
|
||||
/*Endpoint 2 Descriptor*/ |
||||
0x07, /* bLength: Endpoint Descriptor size */ |
||||
USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */ |
||||
CDC_CMD_EP, /* bEndpointAddress */ |
||||
0x03, /* bmAttributes: Interrupt */ |
||||
LOBYTE(CDC_CMD_PACKET_SIZE), /* wMaxPacketSize: */ |
||||
HIBYTE(CDC_CMD_PACKET_SIZE), |
||||
0x10, /* bInterval: */
|
||||
/*---------------------------------------------------------------------------*/ |
||||
|
||||
/*Data class interface descriptor*/ |
||||
0x09, /* bLength: Endpoint Descriptor size */ |
||||
USB_DESC_TYPE_INTERFACE, /* bDescriptorType: */ |
||||
0x01, /* bInterfaceNumber: Number of Interface */ |
||||
0x00, /* bAlternateSetting: Alternate setting */ |
||||
0x02, /* bNumEndpoints: Two endpoints used */ |
||||
0x0A, /* bInterfaceClass: CDC */ |
||||
0x00, /* bInterfaceSubClass: */ |
||||
0x00, /* bInterfaceProtocol: */ |
||||
0x00, /* iInterface: */ |
||||
|
||||
/*Endpoint OUT Descriptor*/ |
||||
0x07, /* bLength: Endpoint Descriptor size */ |
||||
USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */ |
||||
CDC_OUT_EP, /* bEndpointAddress */ |
||||
0x02, /* bmAttributes: Bulk */ |
||||
LOBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), /* wMaxPacketSize: */ |
||||
HIBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), |
||||
0x00, /* bInterval: ignore for Bulk transfer */ |
||||
|
||||
/*Endpoint IN Descriptor*/ |
||||
0x07, /* bLength: Endpoint Descriptor size */ |
||||
USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */ |
||||
CDC_IN_EP, /* bEndpointAddress */ |
||||
0x02, /* bmAttributes: Bulk */ |
||||
LOBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), /* wMaxPacketSize: */ |
||||
HIBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), |
||||
0x00 /* bInterval: ignore for Bulk transfer */ |
||||
} ; |
||||
|
||||
__ALIGN_BEGIN uint8_t USBD_CDC_OtherSpeedCfgDesc[USB_CDC_CONFIG_DESC_SIZ] __ALIGN_END = |
||||
{
|
||||
0x09, /* bLength: Configuation Descriptor size */ |
||||
USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION,
|
||||
USB_CDC_CONFIG_DESC_SIZ, |
||||
0x00, |
||||
0x02, /* bNumInterfaces: 2 interfaces */ |
||||
0x01, /* bConfigurationValue: */ |
||||
0x04, /* iConfiguration: */ |
||||
0xC0, /* bmAttributes: */ |
||||
0x32, /* MaxPower 100 mA */
|
||||
|
||||
/*Interface Descriptor */ |
||||
0x09, /* bLength: Interface Descriptor size */ |
||||
USB_DESC_TYPE_INTERFACE, /* bDescriptorType: Interface */ |
||||
/* Interface descriptor type */ |
||||
0x00, /* bInterfaceNumber: Number of Interface */ |
||||
0x00, /* bAlternateSetting: Alternate setting */ |
||||
0x01, /* bNumEndpoints: One endpoints used */ |
||||
0x02, /* bInterfaceClass: Communication Interface Class */ |
||||
0x02, /* bInterfaceSubClass: Abstract Control Model */ |
||||
0x01, /* bInterfaceProtocol: Common AT commands */ |
||||
0x00, /* iInterface: */ |
||||
|
||||
/*Header Functional Descriptor*/ |
||||
0x05, /* bLength: Endpoint Descriptor size */ |
||||
0x24, /* bDescriptorType: CS_INTERFACE */ |
||||
0x00, /* bDescriptorSubtype: Header Func Desc */ |
||||
0x10, /* bcdCDC: spec release number */ |
||||
0x01, |
||||
|
||||
/*Call Management Functional Descriptor*/ |
||||
0x05, /* bFunctionLength */ |
||||
0x24, /* bDescriptorType: CS_INTERFACE */ |
||||
0x01, /* bDescriptorSubtype: Call Management Func Desc */ |
||||
0x00, /* bmCapabilities: D0+D1 */ |
||||
0x01, /* bDataInterface: 1 */ |
||||
|
||||
/*ACM Functional Descriptor*/ |
||||
0x04, /* bFunctionLength */ |
||||
0x24, /* bDescriptorType: CS_INTERFACE */ |
||||
0x02, /* bDescriptorSubtype: Abstract Control Management desc */ |
||||
0x02, /* bmCapabilities */ |
||||
|
||||
/*Union Functional Descriptor*/ |
||||
0x05, /* bFunctionLength */ |
||||
0x24, /* bDescriptorType: CS_INTERFACE */ |
||||
0x06, /* bDescriptorSubtype: Union func desc */ |
||||
0x00, /* bMasterInterface: Communication class interface */ |
||||
0x01, /* bSlaveInterface0: Data Class Interface */ |
||||
|
||||
/*Endpoint 2 Descriptor*/ |
||||
0x07, /* bLength: Endpoint Descriptor size */ |
||||
USB_DESC_TYPE_ENDPOINT , /* bDescriptorType: Endpoint */ |
||||
CDC_CMD_EP, /* bEndpointAddress */ |
||||
0x03, /* bmAttributes: Interrupt */ |
||||
LOBYTE(CDC_CMD_PACKET_SIZE), /* wMaxPacketSize: */ |
||||
HIBYTE(CDC_CMD_PACKET_SIZE), |
||||
0xFF, /* bInterval: */ |
||||
|
||||
/*---------------------------------------------------------------------------*/ |
||||
|
||||
/*Data class interface descriptor*/ |
||||
0x09, /* bLength: Endpoint Descriptor size */ |
||||
USB_DESC_TYPE_INTERFACE, /* bDescriptorType: */ |
||||
0x01, /* bInterfaceNumber: Number of Interface */ |
||||
0x00, /* bAlternateSetting: Alternate setting */ |
||||
0x02, /* bNumEndpoints: Two endpoints used */ |
||||
0x0A, /* bInterfaceClass: CDC */ |
||||
0x00, /* bInterfaceSubClass: */ |
||||
0x00, /* bInterfaceProtocol: */ |
||||
0x00, /* iInterface: */ |
||||
|
||||
/*Endpoint OUT Descriptor*/ |
||||
0x07, /* bLength: Endpoint Descriptor size */ |
||||
USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */ |
||||
CDC_OUT_EP, /* bEndpointAddress */ |
||||
0x02, /* bmAttributes: Bulk */ |
||||
0x40, /* wMaxPacketSize: */ |
||||
0x00, |
||||
0x00, /* bInterval: ignore for Bulk transfer */ |
||||
|
||||
/*Endpoint IN Descriptor*/ |
||||
0x07, /* bLength: Endpoint Descriptor size */ |
||||
USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */ |
||||
CDC_IN_EP, /* bEndpointAddress */ |
||||
0x02, /* bmAttributes: Bulk */ |
||||
0x40, /* wMaxPacketSize: */ |
||||
0x00, |
||||
0x00 /* bInterval */ |
||||
}; |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup USBD_CDC_Private_Functions
|
||||
* @{ |
||||
*/
|
||||
|
||||
/**
|
||||
* @brief USBD_CDC_Init |
||||
* Initialize the CDC interface |
||||
* @param pdev: device instance |
||||
* @param cfgidx: Configuration index |
||||
* @retval status |
||||
*/ |
||||
static uint8_t USBD_CDC_Init (USBD_HandleTypeDef *pdev,
|
||||
uint8_t cfgidx) |
||||
{ |
||||
uint8_t ret = 0; |
||||
USBD_CDC_HandleTypeDef *hcdc; |
||||
|
||||
if(pdev->dev_speed == USBD_SPEED_HIGH )
|
||||
{
|
||||
/* Open EP IN */ |
||||
USBD_LL_OpenEP(pdev, |
||||
CDC_IN_EP, |
||||
USBD_EP_TYPE_BULK, |
||||
CDC_DATA_HS_IN_PACKET_SIZE); |
||||
|
||||
/* Open EP OUT */ |
||||
USBD_LL_OpenEP(pdev, |
||||
CDC_OUT_EP, |
||||
USBD_EP_TYPE_BULK, |
||||
CDC_DATA_HS_OUT_PACKET_SIZE); |
||||
|
||||
} |
||||
else |
||||
{ |
||||
/* Open EP IN */ |
||||
USBD_LL_OpenEP(pdev, |
||||
CDC_IN_EP, |
||||
USBD_EP_TYPE_BULK, |
||||
CDC_DATA_FS_IN_PACKET_SIZE); |
||||
|
||||
/* Open EP OUT */ |
||||
USBD_LL_OpenEP(pdev, |
||||
CDC_OUT_EP, |
||||
USBD_EP_TYPE_BULK, |
||||
CDC_DATA_FS_OUT_PACKET_SIZE); |
||||
} |
||||
/* Open Command IN EP */ |
||||
USBD_LL_OpenEP(pdev, |
||||
CDC_CMD_EP, |
||||
USBD_EP_TYPE_INTR, |
||||
CDC_CMD_PACKET_SIZE); |
||||
|
||||
|
||||
pdev->pClassData = USBD_malloc(sizeof (USBD_CDC_HandleTypeDef)); |
||||
|
||||
if(pdev->pClassData == NULL) |
||||
{ |
||||
ret = 1;
|
||||
} |
||||
else |
||||
{ |
||||
hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; |
||||
|
||||
/* Init physical Interface components */ |
||||
((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Init(); |
||||
|
||||
/* Init Xfer states */ |
||||
hcdc->TxState =0; |
||||
hcdc->RxState =0; |
||||
|
||||
if(pdev->dev_speed == USBD_SPEED_HIGH )
|
||||
{
|
||||
/* Prepare Out endpoint to receive next packet */ |
||||
USBD_LL_PrepareReceive(pdev, |
||||
CDC_OUT_EP, |
||||
hcdc->RxBuffer, |
||||
CDC_DATA_HS_OUT_PACKET_SIZE); |
||||
} |
||||
else |
||||
{ |
||||
/* Prepare Out endpoint to receive next packet */ |
||||
USBD_LL_PrepareReceive(pdev, |
||||
CDC_OUT_EP, |
||||
hcdc->RxBuffer, |
||||
CDC_DATA_FS_OUT_PACKET_SIZE); |
||||
} |
||||
|
||||
|
||||
} |
||||
return ret; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_CDC_Init |
||||
* DeInitialize the CDC layer |
||||
* @param pdev: device instance |
||||
* @param cfgidx: Configuration index |
||||
* @retval status |
||||
*/ |
||||
static uint8_t USBD_CDC_DeInit (USBD_HandleTypeDef *pdev,
|
||||
uint8_t cfgidx) |
||||
{ |
||||
uint8_t ret = 0; |
||||
|
||||
/* Open EP IN */ |
||||
USBD_LL_CloseEP(pdev, |
||||
CDC_IN_EP); |
||||
|
||||
/* Open EP OUT */ |
||||
USBD_LL_CloseEP(pdev, |
||||
CDC_OUT_EP); |
||||
|
||||
/* Open Command IN EP */ |
||||
USBD_LL_CloseEP(pdev, |
||||
CDC_CMD_EP); |
||||
|
||||
|
||||
/* DeInit physical Interface components */ |
||||
if(pdev->pClassData != NULL) |
||||
{ |
||||
((USBD_CDC_ItfTypeDef *)pdev->pUserData)->DeInit(); |
||||
USBD_free(pdev->pClassData); |
||||
pdev->pClassData = NULL; |
||||
} |
||||
|
||||
return ret; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_CDC_Setup |
||||
* Handle the CDC specific requests |
||||
* @param pdev: instance |
||||
* @param req: usb requests |
||||
* @retval status |
||||
*/ |
||||
static uint8_t USBD_CDC_Setup (USBD_HandleTypeDef *pdev,
|
||||
USBD_SetupReqTypedef *req) |
||||
{ |
||||
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; |
||||
static uint8_t ifalt = 0; |
||||
|
||||
switch (req->bmRequest & USB_REQ_TYPE_MASK) |
||||
{ |
||||
case USB_REQ_TYPE_CLASS : |
||||
if (req->wLength) |
||||
{ |
||||
if (req->bmRequest & 0x80) |
||||
{ |
||||
((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(req->bRequest, |
||||
(uint8_t *)hcdc->data, |
||||
req->wLength); |
||||
USBD_CtlSendData (pdev,
|
||||
(uint8_t *)hcdc->data, |
||||
req->wLength); |
||||
} |
||||
else |
||||
{ |
||||
hcdc->CmdOpCode = req->bRequest; |
||||
hcdc->CmdLength = req->wLength; |
||||
|
||||
USBD_CtlPrepareRx (pdev,
|
||||
(uint8_t *)hcdc->data, |
||||
req->wLength); |
||||
} |
||||
|
||||
} |
||||
else |
||||
{ |
||||
((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(req->bRequest, |
||||
(uint8_t*)req, |
||||
0); |
||||
} |
||||
break; |
||||
|
||||
case USB_REQ_TYPE_STANDARD: |
||||
switch (req->bRequest) |
||||
{
|
||||
case USB_REQ_GET_INTERFACE : |
||||
USBD_CtlSendData (pdev, |
||||
&ifalt, |
||||
1); |
||||
break; |
||||
|
||||
case USB_REQ_SET_INTERFACE : |
||||
break; |
||||
} |
||||
|
||||
default:
|
||||
break; |
||||
} |
||||
return USBD_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_CDC_DataIn |
||||
* Data sent on non-control IN endpoint |
||||
* @param pdev: device instance |
||||
* @param epnum: endpoint number |
||||
* @retval status |
||||
*/ |
||||
static uint8_t USBD_CDC_DataIn (USBD_HandleTypeDef *pdev, uint8_t epnum) |
||||
{ |
||||
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; |
||||
|
||||
if(pdev->pClassData != NULL) |
||||
{ |
||||
|
||||
hcdc->TxState = 0; |
||||
|
||||
return USBD_OK; |
||||
} |
||||
else |
||||
{ |
||||
return USBD_FAIL; |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_CDC_DataOut |
||||
* Data received on non-control Out endpoint |
||||
* @param pdev: device instance |
||||
* @param epnum: endpoint number |
||||
* @retval status |
||||
*/ |
||||
static uint8_t USBD_CDC_DataOut (USBD_HandleTypeDef *pdev, uint8_t epnum) |
||||
{
|
||||
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; |
||||
|
||||
/* Get the received data length */ |
||||
hcdc->RxLength = USBD_LL_GetRxDataSize (pdev, epnum); |
||||
|
||||
/* USB data will be immediately processed, this allow next USB traffic being
|
||||
NAKed till the end of the application Xfer */ |
||||
if(pdev->pClassData != NULL) |
||||
{ |
||||
((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Receive(hcdc->RxBuffer, &hcdc->RxLength); |
||||
|
||||
return USBD_OK; |
||||
} |
||||
else |
||||
{ |
||||
return USBD_FAIL; |
||||
} |
||||
} |
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief USBD_CDC_DataOut |
||||
* Data received on non-control Out endpoint |
||||
* @param pdev: device instance |
||||
* @param epnum: endpoint number |
||||
* @retval status |
||||
*/ |
||||
static uint8_t USBD_CDC_EP0_RxReady (USBD_HandleTypeDef *pdev) |
||||
{
|
||||
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; |
||||
|
||||
if((pdev->pUserData != NULL) && (hcdc->CmdOpCode != 0xFF)) |
||||
{ |
||||
((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(hcdc->CmdOpCode, |
||||
(uint8_t *)hcdc->data, |
||||
hcdc->CmdLength); |
||||
hcdc->CmdOpCode = 0xFF;
|
||||
|
||||
} |
||||
return USBD_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_CDC_GetFSCfgDesc
|
||||
* Return configuration descriptor |
||||
* @param speed : current device speed |
||||
* @param length : pointer data length |
||||
* @retval pointer to descriptor buffer |
||||
*/ |
||||
static uint8_t *USBD_CDC_GetFSCfgDesc (uint16_t *length) |
||||
{ |
||||
*length = sizeof (USBD_CDC_CfgFSDesc); |
||||
return USBD_CDC_CfgFSDesc; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_CDC_GetHSCfgDesc
|
||||
* Return configuration descriptor |
||||
* @param speed : current device speed |
||||
* @param length : pointer data length |
||||
* @retval pointer to descriptor buffer |
||||
*/ |
||||
static uint8_t *USBD_CDC_GetHSCfgDesc (uint16_t *length) |
||||
{ |
||||
*length = sizeof (USBD_CDC_CfgHSDesc); |
||||
return USBD_CDC_CfgHSDesc; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_CDC_GetCfgDesc
|
||||
* Return configuration descriptor |
||||
* @param speed : current device speed |
||||
* @param length : pointer data length |
||||
* @retval pointer to descriptor buffer |
||||
*/ |
||||
static uint8_t *USBD_CDC_GetOtherSpeedCfgDesc (uint16_t *length) |
||||
{ |
||||
*length = sizeof (USBD_CDC_OtherSpeedCfgDesc); |
||||
return USBD_CDC_OtherSpeedCfgDesc; |
||||
} |
||||
|
||||
/**
|
||||
* @brief DeviceQualifierDescriptor
|
||||
* return Device Qualifier descriptor |
||||
* @param length : pointer data length |
||||
* @retval pointer to descriptor buffer |
||||
*/ |
||||
uint8_t *USBD_CDC_GetDeviceQualifierDescriptor (uint16_t *length) |
||||
{ |
||||
*length = sizeof (USBD_CDC_DeviceQualifierDesc); |
||||
return USBD_CDC_DeviceQualifierDesc; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_CDC_RegisterInterface |
||||
* @param pdev: device instance |
||||
* @param fops: CD Interface callback |
||||
* @retval status |
||||
*/ |
||||
uint8_t USBD_CDC_RegisterInterface (USBD_HandleTypeDef *pdev,
|
||||
USBD_CDC_ItfTypeDef *fops) |
||||
{ |
||||
uint8_t ret = USBD_FAIL; |
||||
|
||||
if(fops != NULL) |
||||
{ |
||||
pdev->pUserData= fops; |
||||
ret = USBD_OK;
|
||||
} |
||||
|
||||
return ret; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_CDC_SetTxBuffer |
||||
* @param pdev: device instance |
||||
* @param pbuff: Tx Buffer |
||||
* @retval status |
||||
*/ |
||||
uint8_t USBD_CDC_SetTxBuffer (USBD_HandleTypeDef *pdev, |
||||
uint8_t *pbuff, |
||||
uint16_t length) |
||||
{ |
||||
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; |
||||
|
||||
hcdc->TxBuffer = pbuff; |
||||
hcdc->TxLength = length;
|
||||
|
||||
return USBD_OK;
|
||||
} |
||||
|
||||
|
||||
/**
|
||||
* @brief USBD_CDC_SetRxBuffer |
||||
* @param pdev: device instance |
||||
* @param pbuff: Rx Buffer |
||||
* @retval status |
||||
*/ |
||||
uint8_t USBD_CDC_SetRxBuffer (USBD_HandleTypeDef *pdev, |
||||
uint8_t *pbuff) |
||||
{ |
||||
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; |
||||
|
||||
hcdc->RxBuffer = pbuff; |
||||
|
||||
return USBD_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_CDC_DataOut |
||||
* Data received on non-control Out endpoint |
||||
* @param pdev: device instance |
||||
* @param epnum: endpoint number |
||||
* @retval status |
||||
*/ |
||||
uint8_t USBD_CDC_TransmitPacket(USBD_HandleTypeDef *pdev) |
||||
{
|
||||
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; |
||||
|
||||
if(pdev->pClassData != NULL) |
||||
{ |
||||
if(hcdc->TxState == 0) |
||||
{ |
||||
/* Tx Transfer in progress */ |
||||
hcdc->TxState = 1; |
||||
|
||||
/* Transmit next packet */ |
||||
USBD_LL_Transmit(pdev, |
||||
CDC_IN_EP, |
||||
hcdc->TxBuffer, |
||||
hcdc->TxLength); |
||||
|
||||
return USBD_OK; |
||||
} |
||||
else |
||||
{ |
||||
return USBD_BUSY; |
||||
} |
||||
} |
||||
else |
||||
{ |
||||
return USBD_FAIL; |
||||
} |
||||
} |
||||
|
||||
|
||||
/**
|
||||
* @brief USBD_CDC_ReceivePacket |
||||
* prepare OUT Endpoint for reception |
||||
* @param pdev: device instance |
||||
* @retval status |
||||
*/ |
||||
uint8_t USBD_CDC_ReceivePacket(USBD_HandleTypeDef *pdev) |
||||
{
|
||||
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; |
||||
|
||||
/* Suspend or Resume USB Out process */ |
||||
if(pdev->pClassData != NULL) |
||||
{ |
||||
if(pdev->dev_speed == USBD_SPEED_HIGH )
|
||||
{
|
||||
/* Prepare Out endpoint to receive next packet */ |
||||
USBD_LL_PrepareReceive(pdev, |
||||
CDC_OUT_EP, |
||||
hcdc->RxBuffer, |
||||
CDC_DATA_HS_OUT_PACKET_SIZE); |
||||
} |
||||
else |
||||
{ |
||||
/* Prepare Out endpoint to receive next packet */ |
||||
USBD_LL_PrepareReceive(pdev, |
||||
CDC_OUT_EP, |
||||
hcdc->RxBuffer, |
||||
CDC_DATA_FS_OUT_PACKET_SIZE); |
||||
} |
||||
return USBD_OK; |
||||
} |
||||
else |
||||
{ |
||||
return USBD_FAIL; |
||||
} |
||||
} |
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,167 @@
@@ -0,0 +1,167 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file usbd_core.h |
||||
* @author MCD Application Team |
||||
* @version V2.4.2 |
||||
* @date 11-December-2015 |
||||
* @brief Header file for usbd_core.c file |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT 2015 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. |
||||
* |
||||
****************************************************************************** |
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __USBD_CORE_H |
||||
#define __USBD_CORE_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "usbd_conf.h" |
||||
#include "usbd_def.h" |
||||
#include "usbd_ioreq.h" |
||||
#include "usbd_ctlreq.h" |
||||
|
||||
/** @addtogroup STM32_USB_DEVICE_LIBRARY
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup USBD_CORE
|
||||
* @brief This file is the Header file for usbd_core.c file |
||||
* @{ |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup USBD_CORE_Exported_Defines
|
||||
* @{ |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup USBD_CORE_Exported_TypesDefinitions
|
||||
* @{ |
||||
*/ |
||||
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
|
||||
/** @defgroup USBD_CORE_Exported_Macros
|
||||
* @{ |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup USBD_CORE_Exported_Variables
|
||||
* @{ |
||||
*/
|
||||
#define USBD_SOF USBD_LL_SOF |
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup USBD_CORE_Exported_FunctionsPrototype
|
||||
* @{ |
||||
*/
|
||||
USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *pdesc, uint8_t id); |
||||
USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev); |
||||
USBD_StatusTypeDef USBD_Start (USBD_HandleTypeDef *pdev); |
||||
USBD_StatusTypeDef USBD_Stop (USBD_HandleTypeDef *pdev); |
||||
USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass); |
||||
|
||||
USBD_StatusTypeDef USBD_RunTestMode (USBD_HandleTypeDef *pdev);
|
||||
USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx); |
||||
USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx); |
||||
|
||||
USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup); |
||||
USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev , uint8_t epnum, uint8_t *pdata); |
||||
USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev , uint8_t epnum, uint8_t *pdata); |
||||
|
||||
USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev); |
||||
USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef speed); |
||||
USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev); |
||||
USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev); |
||||
|
||||
USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev); |
||||
USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum); |
||||
USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum); |
||||
|
||||
USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev); |
||||
USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev); |
||||
|
||||
/* USBD Low Level Driver */ |
||||
USBD_StatusTypeDef USBD_LL_Init (USBD_HandleTypeDef *pdev); |
||||
USBD_StatusTypeDef USBD_LL_DeInit (USBD_HandleTypeDef *pdev); |
||||
USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev); |
||||
USBD_StatusTypeDef USBD_LL_Stop (USBD_HandleTypeDef *pdev); |
||||
USBD_StatusTypeDef USBD_LL_OpenEP (USBD_HandleTypeDef *pdev,
|
||||
uint8_t ep_addr,
|
||||
uint8_t ep_type, |
||||
uint16_t ep_mps); |
||||
|
||||
USBD_StatusTypeDef USBD_LL_CloseEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
|
||||
USBD_StatusTypeDef USBD_LL_FlushEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
|
||||
USBD_StatusTypeDef USBD_LL_StallEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
|
||||
USBD_StatusTypeDef USBD_LL_ClearStallEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
|
||||
uint8_t USBD_LL_IsStallEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
|
||||
USBD_StatusTypeDef USBD_LL_SetUSBAddress (USBD_HandleTypeDef *pdev, uint8_t dev_addr);
|
||||
USBD_StatusTypeDef USBD_LL_Transmit (USBD_HandleTypeDef *pdev,
|
||||
uint8_t ep_addr,
|
||||
uint8_t *pbuf, |
||||
uint16_t size); |
||||
|
||||
USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev,
|
||||
uint8_t ep_addr,
|
||||
uint8_t *pbuf, |
||||
uint16_t size); |
||||
|
||||
uint32_t USBD_LL_GetRxDataSize (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
|
||||
void USBD_LL_Delay (uint32_t Delay); |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __USBD_CORE_H */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
||||
|
||||
|
||||
|
@ -0,0 +1,113 @@
@@ -0,0 +1,113 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file usbd_req.h |
||||
* @author MCD Application Team |
||||
* @version V2.4.2 |
||||
* @date 11-December-2015 |
||||
* @brief Header file for the usbd_req.c file |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT 2015 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. |
||||
* |
||||
****************************************************************************** |
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __USB_REQUEST_H |
||||
#define __USB_REQUEST_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "usbd_def.h" |
||||
|
||||
|
||||
/** @addtogroup STM32_USB_DEVICE_LIBRARY
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup USBD_REQ
|
||||
* @brief header file for the usbd_req.c file |
||||
* @{ |
||||
*/
|
||||
|
||||
/** @defgroup USBD_REQ_Exported_Defines
|
||||
* @{ |
||||
*/
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup USBD_REQ_Exported_Types
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
|
||||
/** @defgroup USBD_REQ_Exported_Macros
|
||||
* @{ |
||||
*/
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup USBD_REQ_Exported_Variables
|
||||
* @{ |
||||
*/
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup USBD_REQ_Exported_FunctionsPrototype
|
||||
* @{ |
||||
*/
|
||||
|
||||
USBD_StatusTypeDef USBD_StdDevReq (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req); |
||||
USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req); |
||||
USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req); |
||||
|
||||
|
||||
void USBD_CtlError (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req); |
||||
|
||||
void USBD_ParseSetupRequest (USBD_SetupReqTypedef *req, uint8_t *pdata); |
||||
|
||||
void USBD_GetString (uint8_t *desc, uint8_t *unicode, uint16_t *len); |
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __USB_REQUEST_H */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,330 @@
@@ -0,0 +1,330 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file usbd_def.h |
||||
* @author MCD Application Team |
||||
* @version V2.4.2 |
||||
* @date 11-December-2015 |
||||
* @brief General defines for the usb device library
|
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT 2015 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. |
||||
* |
||||
****************************************************************************** |
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __USBD_DEF_H |
||||
#define __USBD_DEF_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "usbd_conf.h" |
||||
|
||||
/** @addtogroup STM32_USBD_DEVICE_LIBRARY
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup USB_DEF
|
||||
* @brief general defines for the usb device library file |
||||
* @{ |
||||
*/
|
||||
|
||||
/** @defgroup USB_DEF_Exported_Defines
|
||||
* @{ |
||||
*/
|
||||
|
||||
#ifndef NULL |
||||
#define NULL 0 |
||||
#endif |
||||
|
||||
|
||||
#define USB_LEN_DEV_QUALIFIER_DESC 0x0A |
||||
#define USB_LEN_DEV_DESC 0x12 |
||||
#define USB_LEN_CFG_DESC 0x09 |
||||
#define USB_LEN_IF_DESC 0x09 |
||||
#define USB_LEN_EP_DESC 0x07 |
||||
#define USB_LEN_OTG_DESC 0x03 |
||||
#define USB_LEN_LANGID_STR_DESC 0x04 |
||||
#define USB_LEN_OTHER_SPEED_DESC_SIZ 0x09 |
||||
|
||||
#define USBD_IDX_LANGID_STR 0x00 |
||||
#define USBD_IDX_MFC_STR 0x01 |
||||
#define USBD_IDX_PRODUCT_STR 0x02 |
||||
#define USBD_IDX_SERIAL_STR 0x03 |
||||
#define USBD_IDX_CONFIG_STR 0x04 |
||||
#define USBD_IDX_INTERFACE_STR 0x05 |
||||
|
||||
#define USB_REQ_TYPE_STANDARD 0x00 |
||||
#define USB_REQ_TYPE_CLASS 0x20 |
||||
#define USB_REQ_TYPE_VENDOR 0x40 |
||||
#define USB_REQ_TYPE_MASK 0x60 |
||||
|
||||
#define USB_REQ_RECIPIENT_DEVICE 0x00 |
||||
#define USB_REQ_RECIPIENT_INTERFACE 0x01 |
||||
#define USB_REQ_RECIPIENT_ENDPOINT 0x02 |
||||
#define USB_REQ_RECIPIENT_MASK 0x03 |
||||
|
||||
#define USB_REQ_GET_STATUS 0x00 |
||||
#define USB_REQ_CLEAR_FEATURE 0x01 |
||||
#define USB_REQ_SET_FEATURE 0x03 |
||||
#define USB_REQ_SET_ADDRESS 0x05 |
||||
#define USB_REQ_GET_DESCRIPTOR 0x06 |
||||
#define USB_REQ_SET_DESCRIPTOR 0x07 |
||||
#define USB_REQ_GET_CONFIGURATION 0x08 |
||||
#define USB_REQ_SET_CONFIGURATION 0x09 |
||||
#define USB_REQ_GET_INTERFACE 0x0A |
||||
#define USB_REQ_SET_INTERFACE 0x0B |
||||
#define USB_REQ_SYNCH_FRAME 0x0C |
||||
|
||||
#define USB_DESC_TYPE_DEVICE 1 |
||||
#define USB_DESC_TYPE_CONFIGURATION 2 |
||||
#define USB_DESC_TYPE_STRING 3 |
||||
#define USB_DESC_TYPE_INTERFACE 4 |
||||
#define USB_DESC_TYPE_ENDPOINT 5 |
||||
#define USB_DESC_TYPE_DEVICE_QUALIFIER 6 |
||||
#define USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION 7 |
||||
#define USB_DESC_TYPE_BOS 0x0F |
||||
|
||||
#define USB_CONFIG_REMOTE_WAKEUP 2 |
||||
#define USB_CONFIG_SELF_POWERED 1 |
||||
|
||||
#define USB_FEATURE_EP_HALT 0 |
||||
#define USB_FEATURE_REMOTE_WAKEUP 1 |
||||
#define USB_FEATURE_TEST_MODE 2 |
||||
|
||||
#define USB_DEVICE_CAPABITY_TYPE 0x10 |
||||
|
||||
#define USB_HS_MAX_PACKET_SIZE 512 |
||||
#define USB_FS_MAX_PACKET_SIZE 64 |
||||
#define USB_MAX_EP0_SIZE 64 |
||||
|
||||
/* Device Status */ |
||||
#define USBD_STATE_DEFAULT 1 |
||||
#define USBD_STATE_ADDRESSED 2 |
||||
#define USBD_STATE_CONFIGURED 3 |
||||
#define USBD_STATE_SUSPENDED 4 |
||||
|
||||
|
||||
/* EP0 State */
|
||||
#define USBD_EP0_IDLE 0 |
||||
#define USBD_EP0_SETUP 1 |
||||
#define USBD_EP0_DATA_IN 2 |
||||
#define USBD_EP0_DATA_OUT 3 |
||||
#define USBD_EP0_STATUS_IN 4 |
||||
#define USBD_EP0_STATUS_OUT 5 |
||||
#define USBD_EP0_STALL 6 |
||||
|
||||
#define USBD_EP_TYPE_CTRL 0 |
||||
#define USBD_EP_TYPE_ISOC 1 |
||||
#define USBD_EP_TYPE_BULK 2 |
||||
#define USBD_EP_TYPE_INTR 3 |
||||
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup USBD_DEF_Exported_TypesDefinitions
|
||||
* @{ |
||||
*/ |
||||
|
||||
typedef struct usb_setup_req
|
||||
{ |
||||
|
||||
uint8_t bmRequest;
|
||||
uint8_t bRequest;
|
||||
uint16_t wValue;
|
||||
uint16_t wIndex;
|
||||
uint16_t wLength;
|
||||
}USBD_SetupReqTypedef; |
||||
|
||||
struct _USBD_HandleTypeDef; |
||||
|
||||
typedef struct _Device_cb |
||||
{ |
||||
uint8_t (*Init) (struct _USBD_HandleTypeDef *pdev , uint8_t cfgidx); |
||||
uint8_t (*DeInit) (struct _USBD_HandleTypeDef *pdev , uint8_t cfgidx); |
||||
/* Control Endpoints*/ |
||||
uint8_t (*Setup) (struct _USBD_HandleTypeDef *pdev , USBD_SetupReqTypedef *req);
|
||||
uint8_t (*EP0_TxSent) (struct _USBD_HandleTypeDef *pdev );
|
||||
uint8_t (*EP0_RxReady) (struct _USBD_HandleTypeDef *pdev );
|
||||
/* Class Specific Endpoints*/ |
||||
uint8_t (*DataIn) (struct _USBD_HandleTypeDef *pdev , uint8_t epnum);
|
||||
uint8_t (*DataOut) (struct _USBD_HandleTypeDef *pdev , uint8_t epnum);
|
||||
uint8_t (*SOF) (struct _USBD_HandleTypeDef *pdev);
|
||||
uint8_t (*IsoINIncomplete) (struct _USBD_HandleTypeDef *pdev , uint8_t epnum);
|
||||
uint8_t (*IsoOUTIncomplete) (struct _USBD_HandleTypeDef *pdev , uint8_t epnum);
|
||||
|
||||
uint8_t *(*GetHSConfigDescriptor)(uint16_t *length);
|
||||
uint8_t *(*GetFSConfigDescriptor)(uint16_t *length);
|
||||
uint8_t *(*GetOtherSpeedConfigDescriptor)(uint16_t *length); |
||||
uint8_t *(*GetDeviceQualifierDescriptor)(uint16_t *length); |
||||
#if (USBD_SUPPORT_USER_STRING == 1) |
||||
uint8_t *(*GetUsrStrDescriptor)(struct _USBD_HandleTypeDef *pdev ,uint8_t index, uint16_t *length);
|
||||
#endif |
||||
|
||||
} USBD_ClassTypeDef; |
||||
|
||||
/* Following USB Device Speed */ |
||||
typedef enum
|
||||
{ |
||||
USBD_SPEED_HIGH = 0, |
||||
USBD_SPEED_FULL = 1, |
||||
USBD_SPEED_LOW = 2,
|
||||
}USBD_SpeedTypeDef; |
||||
|
||||
/* Following USB Device status */ |
||||
typedef enum { |
||||
USBD_OK = 0, |
||||
USBD_BUSY, |
||||
USBD_FAIL, |
||||
}USBD_StatusTypeDef; |
||||
|
||||
/* USB Device descriptors structure */ |
||||
typedef struct |
||||
{ |
||||
uint8_t *(*GetDeviceDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
|
||||
uint8_t *(*GetLangIDStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
|
||||
uint8_t *(*GetManufacturerStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
|
||||
uint8_t *(*GetProductStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
|
||||
uint8_t *(*GetSerialStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
|
||||
uint8_t *(*GetConfigurationStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
|
||||
uint8_t *(*GetInterfaceStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
|
||||
#if (USBD_LPM_ENABLED == 1) |
||||
uint8_t *(*GetBOSDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
|
||||
#endif |
||||
} USBD_DescriptorsTypeDef; |
||||
|
||||
/* USB Device handle structure */ |
||||
typedef struct |
||||
{
|
||||
uint32_t status; |
||||
uint32_t total_length;
|
||||
uint32_t rem_length;
|
||||
uint32_t maxpacket;
|
||||
} USBD_EndpointTypeDef; |
||||
|
||||
/* USB Device handle structure */ |
||||
typedef struct _USBD_HandleTypeDef |
||||
{ |
||||
uint8_t id; |
||||
uint32_t dev_config; |
||||
uint32_t dev_default_config; |
||||
uint32_t dev_config_status;
|
||||
USBD_SpeedTypeDef dev_speed;
|
||||
USBD_EndpointTypeDef ep_in[15]; |
||||
USBD_EndpointTypeDef ep_out[15];
|
||||
uint32_t ep0_state;
|
||||
uint32_t ep0_data_len;
|
||||
uint8_t dev_state; |
||||
uint8_t dev_old_state; |
||||
uint8_t dev_address; |
||||
uint8_t dev_connection_status;
|
||||
uint8_t dev_test_mode; |
||||
uint32_t dev_remote_wakeup; |
||||
|
||||
USBD_SetupReqTypedef request; |
||||
USBD_DescriptorsTypeDef *pDesc; |
||||
USBD_ClassTypeDef *pClass; |
||||
void *pClassData;
|
||||
void *pUserData;
|
||||
void *pData;
|
||||
} USBD_HandleTypeDef; |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
|
||||
/** @defgroup USBD_DEF_Exported_Macros
|
||||
* @{ |
||||
*/
|
||||
#define SWAPBYTE(addr) (((uint16_t)(*((uint8_t *)(addr)))) + \ |
||||
(((uint16_t)(*(((uint8_t *)(addr)) + 1))) << 8)) |
||||
|
||||
#define LOBYTE(x) ((uint8_t)(x & 0x00FF)) |
||||
#define HIBYTE(x) ((uint8_t)((x & 0xFF00) >>8)) |
||||
#define MIN(a, b) (((a) < (b)) ? (a) : (b)) |
||||
#define MAX(a, b) (((a) > (b)) ? (a) : (b)) |
||||
|
||||
|
||||
#if defined ( __GNUC__ ) |
||||
#ifndef __weak |
||||
#define __weak __attribute__((weak)) |
||||
#endif /* __weak */ |
||||
#ifndef __packed |
||||
#define __packed __attribute__((__packed__)) |
||||
#endif /* __packed */ |
||||
#endif /* __GNUC__ */ |
||||
|
||||
|
||||
/* In HS mode and when the DMA is used, all variables and data structures dealing
|
||||
with the DMA during the transaction process should be 4-bytes aligned */
|
||||
|
||||
#if defined (__GNUC__) /* GNU Compiler */ |
||||
#define __ALIGN_END __attribute__ ((aligned (4))) |
||||
#define __ALIGN_BEGIN |
||||
#else |
||||
#define __ALIGN_END |
||||
#if defined (__CC_ARM) /* ARM Compiler */ |
||||
#define __ALIGN_BEGIN __align(4) |
||||
#elif defined (__ICCARM__) /* IAR Compiler */ |
||||
#define __ALIGN_BEGIN |
||||
#elif defined (__TASKING__) /* TASKING Compiler */ |
||||
#define __ALIGN_BEGIN __align(4) |
||||
#endif /* __CC_ARM */ |
||||
#endif /* __GNUC__ */ |
||||
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup USBD_DEF_Exported_Variables
|
||||
* @{ |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup USBD_DEF_Exported_FunctionsPrototype
|
||||
* @{ |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __USBD_DEF_H */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,128 @@
@@ -0,0 +1,128 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file usbd_ioreq.h |
||||
* @author MCD Application Team |
||||
* @version V2.4.2 |
||||
* @date 11-December-2015 |
||||
* @brief Header file for the usbd_ioreq.c file |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT 2015 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. |
||||
* |
||||
****************************************************************************** |
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __USBD_IOREQ_H |
||||
#define __USBD_IOREQ_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "usbd_def.h" |
||||
#include "usbd_core.h" |
||||
|
||||
/** @addtogroup STM32_USB_DEVICE_LIBRARY
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup USBD_IOREQ
|
||||
* @brief header file for the usbd_ioreq.c file |
||||
* @{ |
||||
*/
|
||||
|
||||
/** @defgroup USBD_IOREQ_Exported_Defines
|
||||
* @{ |
||||
*/
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup USBD_IOREQ_Exported_Types
|
||||
* @{ |
||||
*/ |
||||
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
|
||||
/** @defgroup USBD_IOREQ_Exported_Macros
|
||||
* @{ |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup USBD_IOREQ_Exported_Variables
|
||||
* @{ |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup USBD_IOREQ_Exported_FunctionsPrototype
|
||||
* @{ |
||||
*/
|
||||
|
||||
USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev,
|
||||
uint8_t *buf, |
||||
uint16_t len); |
||||
|
||||
USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev,
|
||||
uint8_t *pbuf, |
||||
uint16_t len); |
||||
|
||||
USBD_StatusTypeDef USBD_CtlPrepareRx (USBD_HandleTypeDef *pdev,
|
||||
uint8_t *pbuf,
|
||||
uint16_t len); |
||||
|
||||
USBD_StatusTypeDef USBD_CtlContinueRx (USBD_HandleTypeDef *pdev,
|
||||
uint8_t *pbuf,
|
||||
uint16_t len); |
||||
|
||||
USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev); |
||||
|
||||
USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev); |
||||
|
||||
uint16_t USBD_GetRxCount (USBD_HandleTypeDef *pdev ,
|
||||
uint8_t epnum); |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __USBD_IOREQ_H */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,565 @@
@@ -0,0 +1,565 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file usbd_core.c |
||||
* @author MCD Application Team |
||||
* @version V2.4.2 |
||||
* @date 11-December-2015 |
||||
* @brief This file provides all the USBD core functions. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT 2015 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. |
||||
* |
||||
****************************************************************************** |
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "usbd_core.h" |
||||
|
||||
/** @addtogroup STM32_USBD_DEVICE_LIBRARY
|
||||
* @{ |
||||
*/ |
||||
|
||||
|
||||
/** @defgroup USBD_CORE
|
||||
* @brief usbd core module |
||||
* @{ |
||||
*/
|
||||
|
||||
/** @defgroup USBD_CORE_Private_TypesDefinitions
|
||||
* @{ |
||||
*/
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup USBD_CORE_Private_Defines
|
||||
* @{ |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup USBD_CORE_Private_Macros
|
||||
* @{ |
||||
*/
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
/** @defgroup USBD_CORE_Private_FunctionPrototypes
|
||||
* @{ |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup USBD_CORE_Private_Variables
|
||||
* @{ |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup USBD_CORE_Private_Functions
|
||||
* @{ |
||||
*/
|
||||
|
||||
/**
|
||||
* @brief USBD_Init |
||||
* Initializes the device stack and load the class driver |
||||
* @param pdev: device instance |
||||
* @param pdesc: Descriptor structure address |
||||
* @param id: Low level core index |
||||
* @retval None |
||||
*/ |
||||
USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *pdesc, uint8_t id) |
||||
{ |
||||
/* Check whether the USB Host handle is valid */ |
||||
if(pdev == NULL) |
||||
{ |
||||
USBD_ErrLog("Invalid Device handle"); |
||||
return USBD_FAIL;
|
||||
} |
||||
|
||||
/* Unlink previous class*/ |
||||
if(pdev->pClass != NULL) |
||||
{ |
||||
pdev->pClass = NULL; |
||||
} |
||||
|
||||
/* Assign USBD Descriptors */ |
||||
if(pdesc != NULL) |
||||
{ |
||||
pdev->pDesc = pdesc; |
||||
} |
||||
|
||||
/* Set Device initial State */ |
||||
pdev->dev_state = USBD_STATE_DEFAULT; |
||||
pdev->id = id; |
||||
/* Initialize low level driver */ |
||||
USBD_LL_Init(pdev); |
||||
|
||||
return USBD_OK;
|
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_DeInit
|
||||
* Re-Initialize th device library |
||||
* @param pdev: device instance |
||||
* @retval status: status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev) |
||||
{ |
||||
/* Set Default State */ |
||||
pdev->dev_state = USBD_STATE_DEFAULT; |
||||
|
||||
/* Free Class Resources */ |
||||
pdev->pClass->DeInit(pdev, pdev->dev_config);
|
||||
|
||||
/* Stop the low level driver */ |
||||
USBD_LL_Stop(pdev);
|
||||
|
||||
/* Initialize low level driver */ |
||||
USBD_LL_DeInit(pdev); |
||||
|
||||
return USBD_OK; |
||||
} |
||||
|
||||
|
||||
/**
|
||||
* @brief USBD_RegisterClass
|
||||
* Link class driver to Device Core. |
||||
* @param pDevice : Device Handle |
||||
* @param pclass: Class handle |
||||
* @retval USBD Status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass) |
||||
{ |
||||
USBD_StatusTypeDef status = USBD_OK; |
||||
if(pclass != 0) |
||||
{ |
||||
/* link the class to the USB Device handle */ |
||||
pdev->pClass = pclass; |
||||
status = USBD_OK; |
||||
} |
||||
else |
||||
{ |
||||
USBD_ErrLog("Invalid Class handle"); |
||||
status = USBD_FAIL;
|
||||
} |
||||
|
||||
return status; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_Start
|
||||
* Start the USB Device Core. |
||||
* @param pdev: Device Handle |
||||
* @retval USBD Status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_Start (USBD_HandleTypeDef *pdev) |
||||
{ |
||||
|
||||
/* Start the low level driver */ |
||||
USBD_LL_Start(pdev);
|
||||
|
||||
return USBD_OK;
|
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_Stop
|
||||
* Stop the USB Device Core. |
||||
* @param pdev: Device Handle |
||||
* @retval USBD Status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_Stop (USBD_HandleTypeDef *pdev) |
||||
{ |
||||
/* Free Class Resources */ |
||||
pdev->pClass->DeInit(pdev, pdev->dev_config);
|
||||
|
||||
/* Stop the low level driver */ |
||||
USBD_LL_Stop(pdev);
|
||||
|
||||
return USBD_OK;
|
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_RunTestMode
|
||||
* Launch test mode process |
||||
* @param pdev: device instance |
||||
* @retval status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_RunTestMode (USBD_HandleTypeDef *pdev)
|
||||
{ |
||||
return USBD_OK; |
||||
} |
||||
|
||||
|
||||
/**
|
||||
* @brief USBD_SetClassConfig
|
||||
* Configure device and start the interface |
||||
* @param pdev: device instance |
||||
* @param cfgidx: configuration index |
||||
* @retval status |
||||
*/ |
||||
|
||||
USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx) |
||||
{ |
||||
USBD_StatusTypeDef ret = USBD_FAIL; |
||||
|
||||
if(pdev->pClass != NULL) |
||||
{ |
||||
/* Set configuration and Start the Class*/ |
||||
if(pdev->pClass->Init(pdev, cfgidx) == 0) |
||||
{ |
||||
ret = USBD_OK; |
||||
} |
||||
} |
||||
return ret;
|
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_ClrClassConfig
|
||||
* Clear current configuration |
||||
* @param pdev: device instance |
||||
* @param cfgidx: configuration index |
||||
* @retval status: USBD_StatusTypeDef |
||||
*/ |
||||
USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx) |
||||
{ |
||||
/* Clear configuration and De-initialize the Class process*/ |
||||
pdev->pClass->DeInit(pdev, cfgidx);
|
||||
return USBD_OK; |
||||
} |
||||
|
||||
|
||||
/**
|
||||
* @brief USBD_SetupStage
|
||||
* Handle the setup stage |
||||
* @param pdev: device instance |
||||
* @retval status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup) |
||||
{ |
||||
|
||||
USBD_ParseSetupRequest(&pdev->request, psetup); |
||||
|
||||
pdev->ep0_state = USBD_EP0_SETUP; |
||||
pdev->ep0_data_len = pdev->request.wLength; |
||||
|
||||
switch (pdev->request.bmRequest & 0x1F)
|
||||
{ |
||||
case USB_REQ_RECIPIENT_DEVICE:
|
||||
USBD_StdDevReq (pdev, &pdev->request); |
||||
break; |
||||
|
||||
case USB_REQ_RECIPIENT_INTERFACE:
|
||||
USBD_StdItfReq(pdev, &pdev->request); |
||||
break; |
||||
|
||||
case USB_REQ_RECIPIENT_ENDPOINT:
|
||||
USBD_StdEPReq(pdev, &pdev->request);
|
||||
break; |
||||
|
||||
default:
|
||||
USBD_LL_StallEP(pdev , pdev->request.bmRequest & 0x80); |
||||
break; |
||||
}
|
||||
return USBD_OK;
|
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_DataOutStage
|
||||
* Handle data OUT stage |
||||
* @param pdev: device instance |
||||
* @param epnum: endpoint index |
||||
* @retval status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev , uint8_t epnum, uint8_t *pdata) |
||||
{ |
||||
USBD_EndpointTypeDef *pep; |
||||
|
||||
if(epnum == 0)
|
||||
{ |
||||
pep = &pdev->ep_out[0]; |
||||
|
||||
if ( pdev->ep0_state == USBD_EP0_DATA_OUT) |
||||
{ |
||||
if(pep->rem_length > pep->maxpacket) |
||||
{ |
||||
pep->rem_length -= pep->maxpacket; |
||||
|
||||
USBD_CtlContinueRx (pdev,
|
||||
pdata, |
||||
MIN(pep->rem_length ,pep->maxpacket)); |
||||
} |
||||
else |
||||
{ |
||||
if((pdev->pClass->EP0_RxReady != NULL)&& |
||||
(pdev->dev_state == USBD_STATE_CONFIGURED)) |
||||
{ |
||||
pdev->pClass->EP0_RxReady(pdev);
|
||||
} |
||||
USBD_CtlSendStatus(pdev); |
||||
} |
||||
} |
||||
} |
||||
else if((pdev->pClass->DataOut != NULL)&& |
||||
(pdev->dev_state == USBD_STATE_CONFIGURED)) |
||||
{ |
||||
pdev->pClass->DataOut(pdev, epnum);
|
||||
}
|
||||
return USBD_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_DataInStage
|
||||
* Handle data in stage |
||||
* @param pdev: device instance |
||||
* @param epnum: endpoint index |
||||
* @retval status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev ,uint8_t epnum, uint8_t *pdata) |
||||
{ |
||||
USBD_EndpointTypeDef *pep; |
||||
|
||||
if(epnum == 0)
|
||||
{ |
||||
pep = &pdev->ep_in[0]; |
||||
|
||||
if ( pdev->ep0_state == USBD_EP0_DATA_IN) |
||||
{ |
||||
if(pep->rem_length > pep->maxpacket) |
||||
{ |
||||
pep->rem_length -= pep->maxpacket; |
||||
|
||||
USBD_CtlContinueSendData (pdev,
|
||||
pdata,
|
||||
pep->rem_length); |
||||
|
||||
/* Prepare endpoint for premature end of transfer */ |
||||
USBD_LL_PrepareReceive (pdev, |
||||
0, |
||||
NULL, |
||||
0);
|
||||
} |
||||
else |
||||
{ /* last packet is MPS multiple, so send ZLP packet */ |
||||
if((pep->total_length % pep->maxpacket == 0) && |
||||
(pep->total_length >= pep->maxpacket) && |
||||
(pep->total_length < pdev->ep0_data_len )) |
||||
{ |
||||
|
||||
USBD_CtlContinueSendData(pdev , NULL, 0); |
||||
pdev->ep0_data_len = 0; |
||||
|
||||
/* Prepare endpoint for premature end of transfer */ |
||||
USBD_LL_PrepareReceive (pdev, |
||||
0, |
||||
NULL, |
||||
0); |
||||
} |
||||
else |
||||
{ |
||||
if((pdev->pClass->EP0_TxSent != NULL)&& |
||||
(pdev->dev_state == USBD_STATE_CONFIGURED)) |
||||
{ |
||||
pdev->pClass->EP0_TxSent(pdev);
|
||||
}
|
||||
USBD_CtlReceiveStatus(pdev); |
||||
} |
||||
} |
||||
} |
||||
if (pdev->dev_test_mode == 1) |
||||
{ |
||||
USBD_RunTestMode(pdev);
|
||||
pdev->dev_test_mode = 0; |
||||
} |
||||
} |
||||
else if((pdev->pClass->DataIn != NULL)&&
|
||||
(pdev->dev_state == USBD_STATE_CONFIGURED)) |
||||
{ |
||||
pdev->pClass->DataIn(pdev, epnum);
|
||||
}
|
||||
return USBD_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_LL_Reset
|
||||
* Handle Reset event |
||||
* @param pdev: device instance |
||||
* @retval status |
||||
*/ |
||||
|
||||
USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev) |
||||
{ |
||||
/* Open EP0 OUT */ |
||||
USBD_LL_OpenEP(pdev, |
||||
0x00, |
||||
USBD_EP_TYPE_CTRL, |
||||
USB_MAX_EP0_SIZE); |
||||
|
||||
pdev->ep_out[0].maxpacket = USB_MAX_EP0_SIZE; |
||||
|
||||
/* Open EP0 IN */ |
||||
USBD_LL_OpenEP(pdev, |
||||
0x80, |
||||
USBD_EP_TYPE_CTRL, |
||||
USB_MAX_EP0_SIZE); |
||||
|
||||
pdev->ep_in[0].maxpacket = USB_MAX_EP0_SIZE; |
||||
/* Upon Reset call user call back */ |
||||
pdev->dev_state = USBD_STATE_DEFAULT; |
||||
|
||||
if (pdev->pClassData)
|
||||
pdev->pClass->DeInit(pdev, pdev->dev_config);
|
||||
|
||||
|
||||
return USBD_OK; |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief USBD_LL_Reset
|
||||
* Handle Reset event |
||||
* @param pdev: device instance |
||||
* @retval status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef speed) |
||||
{ |
||||
pdev->dev_speed = speed; |
||||
return USBD_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_Suspend
|
||||
* Handle Suspend event |
||||
* @param pdev: device instance |
||||
* @retval status |
||||
*/ |
||||
|
||||
USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev) |
||||
{ |
||||
pdev->dev_old_state = pdev->dev_state; |
||||
pdev->dev_state = USBD_STATE_SUSPENDED; |
||||
return USBD_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_Resume
|
||||
* Handle Resume event |
||||
* @param pdev: device instance |
||||
* @retval status |
||||
*/ |
||||
|
||||
USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev) |
||||
{ |
||||
pdev->dev_state = pdev->dev_old_state;
|
||||
return USBD_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_SOF
|
||||
* Handle SOF event |
||||
* @param pdev: device instance |
||||
* @retval status |
||||
*/ |
||||
|
||||
USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev) |
||||
{ |
||||
if(pdev->dev_state == USBD_STATE_CONFIGURED) |
||||
{ |
||||
if(pdev->pClass->SOF != NULL) |
||||
{ |
||||
pdev->pClass->SOF(pdev); |
||||
} |
||||
} |
||||
return USBD_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_IsoINIncomplete
|
||||
* Handle iso in incomplete event |
||||
* @param pdev: device instance |
||||
* @retval status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum) |
||||
{ |
||||
return USBD_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_IsoOUTIncomplete
|
||||
* Handle iso out incomplete event |
||||
* @param pdev: device instance |
||||
* @retval status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum) |
||||
{ |
||||
return USBD_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_DevConnected
|
||||
* Handle device connection event |
||||
* @param pdev: device instance |
||||
* @retval status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev) |
||||
{ |
||||
return USBD_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_DevDisconnected
|
||||
* Handle device disconnection event |
||||
* @param pdev: device instance |
||||
* @retval status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev) |
||||
{ |
||||
/* Free Class Resources */ |
||||
pdev->dev_state = USBD_STATE_DEFAULT; |
||||
pdev->pClass->DeInit(pdev, pdev->dev_config);
|
||||
|
||||
return USBD_OK; |
||||
} |
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
||||
|
@ -0,0 +1,782 @@
@@ -0,0 +1,782 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file usbd_req.c |
||||
* @author MCD Application Team |
||||
* @version V2.4.2 |
||||
* @date 11-December-2015
|
||||
* @brief This file provides the standard USB requests following chapter 9. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT 2015 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. |
||||
* |
||||
****************************************************************************** |
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "usbd_ctlreq.h" |
||||
#include "usbd_ioreq.h" |
||||
|
||||
|
||||
/** @addtogroup STM32_USBD_STATE_DEVICE_LIBRARY
|
||||
* @{ |
||||
*/ |
||||
|
||||
|
||||
/** @defgroup USBD_REQ
|
||||
* @brief USB standard requests module |
||||
* @{ |
||||
*/
|
||||
|
||||
/** @defgroup USBD_REQ_Private_TypesDefinitions
|
||||
* @{ |
||||
*/
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup USBD_REQ_Private_Defines
|
||||
* @{ |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup USBD_REQ_Private_Macros
|
||||
* @{ |
||||
*/
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup USBD_REQ_Private_Variables
|
||||
* @{ |
||||
*/
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup USBD_REQ_Private_FunctionPrototypes
|
||||
* @{ |
||||
*/
|
||||
static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
|
||||
USBD_SetupReqTypedef *req); |
||||
|
||||
static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
|
||||
USBD_SetupReqTypedef *req); |
||||
|
||||
static void USBD_SetConfig(USBD_HandleTypeDef *pdev ,
|
||||
USBD_SetupReqTypedef *req); |
||||
|
||||
static void USBD_GetConfig(USBD_HandleTypeDef *pdev ,
|
||||
USBD_SetupReqTypedef *req); |
||||
|
||||
static void USBD_GetStatus(USBD_HandleTypeDef *pdev ,
|
||||
USBD_SetupReqTypedef *req); |
||||
|
||||
static void USBD_SetFeature(USBD_HandleTypeDef *pdev ,
|
||||
USBD_SetupReqTypedef *req); |
||||
|
||||
static void USBD_ClrFeature(USBD_HandleTypeDef *pdev ,
|
||||
USBD_SetupReqTypedef *req); |
||||
|
||||
static uint8_t USBD_GetLen(uint8_t *buf); |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup USBD_REQ_Private_Functions
|
||||
* @{ |
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @brief USBD_StdDevReq |
||||
* Handle standard usb device requests |
||||
* @param pdev: device instance |
||||
* @param req: usb request |
||||
* @retval status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_StdDevReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTypedef *req) |
||||
{ |
||||
USBD_StatusTypeDef ret = USBD_OK;
|
||||
|
||||
switch (req->bRequest)
|
||||
{ |
||||
case USB_REQ_GET_DESCRIPTOR:
|
||||
|
||||
USBD_GetDescriptor (pdev, req) ; |
||||
break; |
||||
|
||||
case USB_REQ_SET_ADDRESS:
|
||||
USBD_SetAddress(pdev, req); |
||||
break; |
||||
|
||||
case USB_REQ_SET_CONFIGURATION:
|
||||
USBD_SetConfig (pdev , req); |
||||
break; |
||||
|
||||
case USB_REQ_GET_CONFIGURATION:
|
||||
USBD_GetConfig (pdev , req); |
||||
break; |
||||
|
||||
case USB_REQ_GET_STATUS:
|
||||
USBD_GetStatus (pdev , req); |
||||
break; |
||||
|
||||
|
||||
case USB_REQ_SET_FEATURE:
|
||||
USBD_SetFeature (pdev , req);
|
||||
break; |
||||
|
||||
case USB_REQ_CLEAR_FEATURE:
|
||||
USBD_ClrFeature (pdev , req); |
||||
break; |
||||
|
||||
default:
|
||||
USBD_CtlError(pdev , req); |
||||
break; |
||||
} |
||||
|
||||
return ret; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_StdItfReq |
||||
* Handle standard usb interface requests |
||||
* @param pdev: device instance |
||||
* @param req: usb request |
||||
* @retval status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTypedef *req) |
||||
{ |
||||
USBD_StatusTypeDef ret = USBD_OK;
|
||||
|
||||
switch (pdev->dev_state)
|
||||
{ |
||||
case USBD_STATE_CONFIGURED: |
||||
|
||||
if (LOBYTE(req->wIndex) <= USBD_MAX_NUM_INTERFACES)
|
||||
{ |
||||
pdev->pClass->Setup (pdev, req);
|
||||
|
||||
if((req->wLength == 0)&& (ret == USBD_OK)) |
||||
{ |
||||
USBD_CtlSendStatus(pdev); |
||||
} |
||||
}
|
||||
else
|
||||
{
|
||||
USBD_CtlError(pdev , req); |
||||
} |
||||
break; |
||||
|
||||
default: |
||||
USBD_CtlError(pdev , req); |
||||
break; |
||||
} |
||||
return USBD_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_StdEPReq |
||||
* Handle standard usb endpoint requests |
||||
* @param pdev: device instance |
||||
* @param req: usb request |
||||
* @retval status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTypedef *req) |
||||
{ |
||||
|
||||
uint8_t ep_addr; |
||||
USBD_StatusTypeDef ret = USBD_OK;
|
||||
USBD_EndpointTypeDef *pep; |
||||
ep_addr = LOBYTE(req->wIndex);
|
||||
|
||||
/* Check if it is a class request */ |
||||
if ((req->bmRequest & 0x60) == 0x20) |
||||
{ |
||||
pdev->pClass->Setup (pdev, req); |
||||
|
||||
return USBD_OK; |
||||
} |
||||
|
||||
switch (req->bRequest)
|
||||
{ |
||||
|
||||
case USB_REQ_SET_FEATURE : |
||||
|
||||
switch (pdev->dev_state)
|
||||
{ |
||||
case USBD_STATE_ADDRESSED:
|
||||
if ((ep_addr != 0x00) && (ep_addr != 0x80))
|
||||
{ |
||||
USBD_LL_StallEP(pdev , ep_addr); |
||||
} |
||||
break;
|
||||
|
||||
case USBD_STATE_CONFIGURED:
|
||||
if (req->wValue == USB_FEATURE_EP_HALT) |
||||
{ |
||||
if ((ep_addr != 0x00) && (ep_addr != 0x80))
|
||||
{
|
||||
USBD_LL_StallEP(pdev , ep_addr); |
||||
|
||||
} |
||||
} |
||||
pdev->pClass->Setup (pdev, req);
|
||||
USBD_CtlSendStatus(pdev); |
||||
|
||||
break; |
||||
|
||||
default:
|
||||
USBD_CtlError(pdev , req); |
||||
break;
|
||||
} |
||||
break; |
||||
|
||||
case USB_REQ_CLEAR_FEATURE : |
||||
|
||||
switch (pdev->dev_state)
|
||||
{ |
||||
case USBD_STATE_ADDRESSED:
|
||||
if ((ep_addr != 0x00) && (ep_addr != 0x80))
|
||||
{ |
||||
USBD_LL_StallEP(pdev , ep_addr); |
||||
} |
||||
break;
|
||||
|
||||
case USBD_STATE_CONFIGURED:
|
||||
if (req->wValue == USB_FEATURE_EP_HALT) |
||||
{ |
||||
if ((ep_addr & 0x7F) != 0x00)
|
||||
{
|
||||
USBD_LL_ClearStallEP(pdev , ep_addr); |
||||
pdev->pClass->Setup (pdev, req); |
||||
} |
||||
USBD_CtlSendStatus(pdev); |
||||
} |
||||
break; |
||||
|
||||
default:
|
||||
USBD_CtlError(pdev , req); |
||||
break;
|
||||
} |
||||
break; |
||||
|
||||
case USB_REQ_GET_STATUS:
|
||||
switch (pdev->dev_state)
|
||||
{ |
||||
case USBD_STATE_ADDRESSED:
|
||||
if ((ep_addr & 0x7F) != 0x00)
|
||||
{ |
||||
USBD_LL_StallEP(pdev , ep_addr); |
||||
} |
||||
break;
|
||||
|
||||
case USBD_STATE_CONFIGURED: |
||||
pep = ((ep_addr & 0x80) == 0x80) ? &pdev->ep_in[ep_addr & 0x7F]:\
|
||||
&pdev->ep_out[ep_addr & 0x7F]; |
||||
if(USBD_LL_IsStallEP(pdev, ep_addr)) |
||||
{ |
||||
pep->status = 0x0001;
|
||||
} |
||||
else |
||||
{ |
||||
pep->status = 0x0000;
|
||||
} |
||||
|
||||
USBD_CtlSendData (pdev, |
||||
(uint8_t *)&pep->status, |
||||
2); |
||||
break; |
||||
|
||||
default:
|
||||
USBD_CtlError(pdev , req); |
||||
break; |
||||
} |
||||
break; |
||||
|
||||
default: |
||||
break; |
||||
} |
||||
return ret; |
||||
} |
||||
/**
|
||||
* @brief USBD_GetDescriptor |
||||
* Handle Get Descriptor requests |
||||
* @param pdev: device instance |
||||
* @param req: usb request |
||||
* @retval status |
||||
*/ |
||||
static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
|
||||
USBD_SetupReqTypedef *req) |
||||
{ |
||||
uint16_t len; |
||||
uint8_t *pbuf; |
||||
|
||||
|
||||
switch (req->wValue >> 8) |
||||
{
|
||||
#if (USBD_LPM_ENABLED == 1) |
||||
case USB_DESC_TYPE_BOS: |
||||
pbuf = pdev->pDesc->GetBOSDescriptor(pdev->dev_speed, &len); |
||||
break; |
||||
#endif |
||||
case USB_DESC_TYPE_DEVICE: |
||||
pbuf = pdev->pDesc->GetDeviceDescriptor(pdev->dev_speed, &len); |
||||
break; |
||||
|
||||
case USB_DESC_TYPE_CONFIGURATION:
|
||||
if(pdev->dev_speed == USBD_SPEED_HIGH )
|
||||
{ |
||||
pbuf = (uint8_t *)pdev->pClass->GetHSConfigDescriptor(&len); |
||||
pbuf[1] = USB_DESC_TYPE_CONFIGURATION; |
||||
} |
||||
else |
||||
{ |
||||
pbuf = (uint8_t *)pdev->pClass->GetFSConfigDescriptor(&len); |
||||
pbuf[1] = USB_DESC_TYPE_CONFIGURATION; |
||||
} |
||||
break; |
||||
|
||||
case USB_DESC_TYPE_STRING: |
||||
switch ((uint8_t)(req->wValue)) |
||||
{ |
||||
case USBD_IDX_LANGID_STR: |
||||
pbuf = pdev->pDesc->GetLangIDStrDescriptor(pdev->dev_speed, &len);
|
||||
break; |
||||
|
||||
case USBD_IDX_MFC_STR: |
||||
pbuf = pdev->pDesc->GetManufacturerStrDescriptor(pdev->dev_speed, &len); |
||||
break; |
||||
|
||||
case USBD_IDX_PRODUCT_STR: |
||||
pbuf = pdev->pDesc->GetProductStrDescriptor(pdev->dev_speed, &len); |
||||
break; |
||||
|
||||
case USBD_IDX_SERIAL_STR: |
||||
pbuf = pdev->pDesc->GetSerialStrDescriptor(pdev->dev_speed, &len); |
||||
break; |
||||
|
||||
case USBD_IDX_CONFIG_STR: |
||||
pbuf = pdev->pDesc->GetConfigurationStrDescriptor(pdev->dev_speed, &len); |
||||
break; |
||||
|
||||
case USBD_IDX_INTERFACE_STR: |
||||
pbuf = pdev->pDesc->GetInterfaceStrDescriptor(pdev->dev_speed, &len); |
||||
break; |
||||
|
||||
default: |
||||
#if (USBD_SUPPORT_USER_STRING == 1) |
||||
pbuf = pdev->pClass->GetUsrStrDescriptor(pdev, (req->wValue) , &len); |
||||
break; |
||||
#else |
||||
USBD_CtlError(pdev , req); |
||||
return; |
||||
#endif |
||||
} |
||||
break; |
||||
case USB_DESC_TYPE_DEVICE_QUALIFIER:
|
||||
|
||||
if(pdev->dev_speed == USBD_SPEED_HIGH )
|
||||
{ |
||||
pbuf = (uint8_t *)pdev->pClass->GetDeviceQualifierDescriptor(&len); |
||||
break; |
||||
} |
||||
else |
||||
{ |
||||
USBD_CtlError(pdev , req); |
||||
return; |
||||
}
|
||||
|
||||
case USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION: |
||||
if(pdev->dev_speed == USBD_SPEED_HIGH )
|
||||
{ |
||||
pbuf = (uint8_t *)pdev->pClass->GetOtherSpeedConfigDescriptor(&len); |
||||
pbuf[1] = USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION; |
||||
break;
|
||||
} |
||||
else |
||||
{ |
||||
USBD_CtlError(pdev , req); |
||||
return; |
||||
} |
||||
|
||||
default:
|
||||
USBD_CtlError(pdev , req); |
||||
return; |
||||
} |
||||
|
||||
if((len != 0)&& (req->wLength != 0)) |
||||
{ |
||||
|
||||
len = MIN(len , req->wLength); |
||||
|
||||
USBD_CtlSendData (pdev,
|
||||
pbuf, |
||||
len); |
||||
} |
||||
|
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_SetAddress |
||||
* Set device address |
||||
* @param pdev: device instance |
||||
* @param req: usb request |
||||
* @retval status |
||||
*/ |
||||
static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
|
||||
USBD_SetupReqTypedef *req) |
||||
{ |
||||
uint8_t dev_addr;
|
||||
|
||||
if ((req->wIndex == 0) && (req->wLength == 0))
|
||||
{ |
||||
dev_addr = (uint8_t)(req->wValue) & 0x7F;
|
||||
|
||||
if (pdev->dev_state == USBD_STATE_CONFIGURED)
|
||||
{ |
||||
USBD_CtlError(pdev , req); |
||||
}
|
||||
else
|
||||
{ |
||||
pdev->dev_address = dev_addr; |
||||
USBD_LL_SetUSBAddress(pdev, dev_addr);
|
||||
USBD_CtlSendStatus(pdev);
|
||||
|
||||
if (dev_addr != 0)
|
||||
{ |
||||
pdev->dev_state = USBD_STATE_ADDRESSED; |
||||
}
|
||||
else
|
||||
{ |
||||
pdev->dev_state = USBD_STATE_DEFAULT;
|
||||
} |
||||
} |
||||
}
|
||||
else
|
||||
{ |
||||
USBD_CtlError(pdev , req);
|
||||
}
|
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_SetConfig |
||||
* Handle Set device configuration request |
||||
* @param pdev: device instance |
||||
* @param req: usb request |
||||
* @retval status |
||||
*/ |
||||
static void USBD_SetConfig(USBD_HandleTypeDef *pdev ,
|
||||
USBD_SetupReqTypedef *req) |
||||
{ |
||||
|
||||
static uint8_t cfgidx; |
||||
|
||||
cfgidx = (uint8_t)(req->wValue);
|
||||
|
||||
if (cfgidx > USBD_MAX_NUM_CONFIGURATION )
|
||||
{
|
||||
USBD_CtlError(pdev , req);
|
||||
}
|
||||
else
|
||||
{ |
||||
switch (pdev->dev_state)
|
||||
{ |
||||
case USBD_STATE_ADDRESSED: |
||||
if (cfgidx)
|
||||
{
|
||||
pdev->dev_config = cfgidx; |
||||
pdev->dev_state = USBD_STATE_CONFIGURED; |
||||
if(USBD_SetClassConfig(pdev , cfgidx) == USBD_FAIL) |
||||
{ |
||||
USBD_CtlError(pdev , req);
|
||||
return; |
||||
} |
||||
USBD_CtlSendStatus(pdev); |
||||
} |
||||
else
|
||||
{ |
||||
USBD_CtlSendStatus(pdev); |
||||
} |
||||
break; |
||||
|
||||
case USBD_STATE_CONFIGURED: |
||||
if (cfgidx == 0)
|
||||
{
|
||||
pdev->dev_state = USBD_STATE_ADDRESSED; |
||||
pdev->dev_config = cfgidx;
|
||||
USBD_ClrClassConfig(pdev , cfgidx); |
||||
USBD_CtlSendStatus(pdev); |
||||
|
||||
}
|
||||
else if (cfgidx != pdev->dev_config)
|
||||
{ |
||||
/* Clear old configuration */ |
||||
USBD_ClrClassConfig(pdev , pdev->dev_config); |
||||
|
||||
/* set new configuration */ |
||||
pdev->dev_config = cfgidx; |
||||
if(USBD_SetClassConfig(pdev , cfgidx) == USBD_FAIL) |
||||
{ |
||||
USBD_CtlError(pdev , req);
|
||||
return; |
||||
} |
||||
USBD_CtlSendStatus(pdev); |
||||
} |
||||
else |
||||
{ |
||||
USBD_CtlSendStatus(pdev); |
||||
} |
||||
break; |
||||
|
||||
default:
|
||||
USBD_CtlError(pdev , req);
|
||||
break; |
||||
} |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_GetConfig |
||||
* Handle Get device configuration request |
||||
* @param pdev: device instance |
||||
* @param req: usb request |
||||
* @retval status |
||||
*/ |
||||
static void USBD_GetConfig(USBD_HandleTypeDef *pdev ,
|
||||
USBD_SetupReqTypedef *req) |
||||
{ |
||||
|
||||
if (req->wLength != 1)
|
||||
{
|
||||
USBD_CtlError(pdev , req); |
||||
} |
||||
else
|
||||
{ |
||||
switch (pdev->dev_state )
|
||||
{ |
||||
case USBD_STATE_ADDRESSED:
|
||||
pdev->dev_default_config = 0; |
||||
USBD_CtlSendData (pdev,
|
||||
(uint8_t *)&pdev->dev_default_config, |
||||
1); |
||||
break; |
||||
|
||||
case USBD_STATE_CONFIGURED:
|
||||
|
||||
USBD_CtlSendData (pdev,
|
||||
(uint8_t *)&pdev->dev_config, |
||||
1); |
||||
break; |
||||
|
||||
default: |
||||
USBD_CtlError(pdev , req); |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_GetStatus |
||||
* Handle Get Status request |
||||
* @param pdev: device instance |
||||
* @param req: usb request |
||||
* @retval status |
||||
*/ |
||||
static void USBD_GetStatus(USBD_HandleTypeDef *pdev ,
|
||||
USBD_SetupReqTypedef *req) |
||||
{ |
||||
|
||||
|
||||
switch (pdev->dev_state)
|
||||
{ |
||||
case USBD_STATE_ADDRESSED: |
||||
case USBD_STATE_CONFIGURED: |
||||
|
||||
#if ( USBD_SELF_POWERED == 1) |
||||
pdev->dev_config_status = USB_CONFIG_SELF_POWERED;
|
||||
#else |
||||
pdev->dev_config_status = 0;
|
||||
#endif |
||||
|
||||
if (pdev->dev_remote_wakeup)
|
||||
{ |
||||
pdev->dev_config_status |= USB_CONFIG_REMOTE_WAKEUP;
|
||||
} |
||||
|
||||
USBD_CtlSendData (pdev,
|
||||
(uint8_t *)& pdev->dev_config_status, |
||||
2); |
||||
break; |
||||
|
||||
default : |
||||
USBD_CtlError(pdev , req);
|
||||
break; |
||||
} |
||||
} |
||||
|
||||
|
||||
/**
|
||||
* @brief USBD_SetFeature |
||||
* Handle Set device feature request |
||||
* @param pdev: device instance |
||||
* @param req: usb request |
||||
* @retval status |
||||
*/ |
||||
static void USBD_SetFeature(USBD_HandleTypeDef *pdev ,
|
||||
USBD_SetupReqTypedef *req) |
||||
{ |
||||
|
||||
if (req->wValue == USB_FEATURE_REMOTE_WAKEUP) |
||||
{ |
||||
pdev->dev_remote_wakeup = 1;
|
||||
pdev->pClass->Setup (pdev, req);
|
||||
USBD_CtlSendStatus(pdev); |
||||
} |
||||
|
||||
} |
||||
|
||||
|
||||
/**
|
||||
* @brief USBD_ClrFeature |
||||
* Handle clear device feature request |
||||
* @param pdev: device instance |
||||
* @param req: usb request |
||||
* @retval status |
||||
*/ |
||||
static void USBD_ClrFeature(USBD_HandleTypeDef *pdev ,
|
||||
USBD_SetupReqTypedef *req) |
||||
{ |
||||
switch (pdev->dev_state) |
||||
{ |
||||
case USBD_STATE_ADDRESSED: |
||||
case USBD_STATE_CONFIGURED: |
||||
if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
|
||||
{ |
||||
pdev->dev_remote_wakeup = 0;
|
||||
pdev->pClass->Setup (pdev, req);
|
||||
USBD_CtlSendStatus(pdev); |
||||
} |
||||
break; |
||||
|
||||
default : |
||||
USBD_CtlError(pdev , req); |
||||
break; |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_ParseSetupRequest
|
||||
* Copy buffer into setup structure |
||||
* @param pdev: device instance |
||||
* @param req: usb request |
||||
* @retval None |
||||
*/ |
||||
|
||||
void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata) |
||||
{ |
||||
req->bmRequest = *(uint8_t *) (pdata); |
||||
req->bRequest = *(uint8_t *) (pdata + 1); |
||||
req->wValue = SWAPBYTE (pdata + 2); |
||||
req->wIndex = SWAPBYTE (pdata + 4); |
||||
req->wLength = SWAPBYTE (pdata + 6); |
||||
|
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_CtlError
|
||||
* Handle USB low level Error |
||||
* @param pdev: device instance |
||||
* @param req: usb request |
||||
* @retval None |
||||
*/ |
||||
|
||||
void USBD_CtlError( USBD_HandleTypeDef *pdev , |
||||
USBD_SetupReqTypedef *req) |
||||
{ |
||||
USBD_LL_StallEP(pdev , 0x80); |
||||
USBD_LL_StallEP(pdev , 0); |
||||
} |
||||
|
||||
|
||||
/**
|
||||
* @brief USBD_GetString |
||||
* Convert Ascii string into unicode one |
||||
* @param desc : descriptor buffer |
||||
* @param unicode : Formatted string buffer (unicode) |
||||
* @param len : descriptor length |
||||
* @retval None |
||||
*/ |
||||
void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len) |
||||
{ |
||||
uint8_t idx = 0; |
||||
|
||||
if (desc != NULL)
|
||||
{ |
||||
*len = USBD_GetLen(desc) * 2 + 2;
|
||||
unicode[idx++] = *len; |
||||
unicode[idx++] = USB_DESC_TYPE_STRING; |
||||
|
||||
while (*desc != '\0')
|
||||
{ |
||||
unicode[idx++] = *desc++; |
||||
unicode[idx++] = 0x00; |
||||
} |
||||
}
|
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_GetLen |
||||
* return the string length |
||||
* @param buf : pointer to the ascii string buffer |
||||
* @retval string length |
||||
*/ |
||||
static uint8_t USBD_GetLen(uint8_t *buf) |
||||
{ |
||||
uint8_t len = 0; |
||||
|
||||
while (*buf != '\0')
|
||||
{ |
||||
len++; |
||||
buf++; |
||||
} |
||||
|
||||
return len; |
||||
} |
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,236 @@
@@ -0,0 +1,236 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file usbd_ioreq.c |
||||
* @author MCD Application Team |
||||
* @version V2.4.2 |
||||
* @date 11-December-2015 |
||||
* @brief This file provides the IO requests APIs for control endpoints. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT 2015 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. |
||||
* |
||||
****************************************************************************** |
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "usbd_ioreq.h" |
||||
|
||||
/** @addtogroup STM32_USB_DEVICE_LIBRARY
|
||||
* @{ |
||||
*/ |
||||
|
||||
|
||||
/** @defgroup USBD_IOREQ
|
||||
* @brief control I/O requests module |
||||
* @{ |
||||
*/
|
||||
|
||||
/** @defgroup USBD_IOREQ_Private_TypesDefinitions
|
||||
* @{ |
||||
*/
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup USBD_IOREQ_Private_Defines
|
||||
* @{ |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup USBD_IOREQ_Private_Macros
|
||||
* @{ |
||||
*/
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup USBD_IOREQ_Private_Variables
|
||||
* @{ |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup USBD_IOREQ_Private_FunctionPrototypes
|
||||
* @{ |
||||
*/
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/** @defgroup USBD_IOREQ_Private_Functions
|
||||
* @{ |
||||
*/
|
||||
|
||||
/**
|
||||
* @brief USBD_CtlSendData |
||||
* send data on the ctl pipe |
||||
* @param pdev: device instance |
||||
* @param buff: pointer to data buffer |
||||
* @param len: length of data to be sent |
||||
* @retval status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev,
|
||||
uint8_t *pbuf, |
||||
uint16_t len) |
||||
{ |
||||
/* Set EP0 State */ |
||||
pdev->ep0_state = USBD_EP0_DATA_IN;
|
||||
pdev->ep_in[0].total_length = len; |
||||
pdev->ep_in[0].rem_length = len; |
||||
/* Start the transfer */ |
||||
USBD_LL_Transmit (pdev, 0x00, pbuf, len);
|
||||
|
||||
return USBD_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_CtlContinueSendData |
||||
* continue sending data on the ctl pipe |
||||
* @param pdev: device instance |
||||
* @param buff: pointer to data buffer |
||||
* @param len: length of data to be sent |
||||
* @retval status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev,
|
||||
uint8_t *pbuf, |
||||
uint16_t len) |
||||
{ |
||||
/* Start the next transfer */ |
||||
USBD_LL_Transmit (pdev, 0x00, pbuf, len);
|
||||
|
||||
return USBD_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_CtlPrepareRx |
||||
* receive data on the ctl pipe |
||||
* @param pdev: device instance |
||||
* @param buff: pointer to data buffer |
||||
* @param len: length of data to be received |
||||
* @retval status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_CtlPrepareRx (USBD_HandleTypeDef *pdev, |
||||
uint8_t *pbuf,
|
||||
uint16_t len) |
||||
{ |
||||
/* Set EP0 State */ |
||||
pdev->ep0_state = USBD_EP0_DATA_OUT;
|
||||
pdev->ep_out[0].total_length = len; |
||||
pdev->ep_out[0].rem_length = len; |
||||
/* Start the transfer */ |
||||
USBD_LL_PrepareReceive (pdev, |
||||
0, |
||||
pbuf, |
||||
len); |
||||
|
||||
return USBD_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_CtlContinueRx |
||||
* continue receive data on the ctl pipe |
||||
* @param pdev: device instance |
||||
* @param buff: pointer to data buffer |
||||
* @param len: length of data to be received |
||||
* @retval status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_CtlContinueRx (USBD_HandleTypeDef *pdev,
|
||||
uint8_t *pbuf,
|
||||
uint16_t len) |
||||
{ |
||||
|
||||
USBD_LL_PrepareReceive (pdev, |
||||
0,
|
||||
pbuf,
|
||||
len); |
||||
return USBD_OK; |
||||
} |
||||
/**
|
||||
* @brief USBD_CtlSendStatus |
||||
* send zero lzngth packet on the ctl pipe |
||||
* @param pdev: device instance |
||||
* @retval status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev) |
||||
{ |
||||
|
||||
/* Set EP0 State */ |
||||
pdev->ep0_state = USBD_EP0_STATUS_IN; |
||||
|
||||
/* Start the transfer */ |
||||
USBD_LL_Transmit (pdev, 0x00, NULL, 0);
|
||||
|
||||
return USBD_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief USBD_CtlReceiveStatus |
||||
* receive zero lzngth packet on the ctl pipe |
||||
* @param pdev: device instance |
||||
* @retval status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev) |
||||
{ |
||||
/* Set EP0 State */ |
||||
pdev->ep0_state = USBD_EP0_STATUS_OUT;
|
||||
|
||||
/* Start the transfer */
|
||||
USBD_LL_PrepareReceive ( pdev, |
||||
0, |
||||
NULL, |
||||
0);
|
||||
|
||||
return USBD_OK; |
||||
} |
||||
|
||||
|
||||
/**
|
||||
* @brief USBD_GetRxCount |
||||
* returns the received data length |
||||
* @param pdev: device instance |
||||
* @param ep_addr: endpoint address |
||||
* @retval Rx Data blength |
||||
*/ |
||||
uint16_t USBD_GetRxCount (USBD_HandleTypeDef *pdev , uint8_t ep_addr) |
||||
{ |
||||
return USBD_LL_GetRxDataSize(pdev, ep_addr); |
||||
} |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,121 @@
@@ -0,0 +1,121 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file : usb_device.c |
||||
* @version : v2.0_Cube |
||||
* @brief : This file implements the USB Device |
||||
****************************************************************************** |
||||
* This notice applies to any and all portions of this file |
||||
* that are not between comment pairs USER CODE BEGIN and |
||||
* USER CODE END. Other portions of this file, whether
|
||||
* inserted by the user or by software development tools |
||||
* are owned by their respective copyright owners. |
||||
* |
||||
* Copyright (c) 2018 STMicroelectronics International N.V.
|
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted, provided that the following conditions are met: |
||||
* |
||||
* 1. Redistribution of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. Neither the name of STMicroelectronics nor the names of other
|
||||
* contributors to this software may be used to endorse or promote products
|
||||
* derived from this software without specific written permission. |
||||
* 4. This software, including modifications and/or derivative works of this
|
||||
* software, must execute solely and exclusively on microcontroller or |
||||
* microprocessor devices manufactured by or for STMicroelectronics. |
||||
* 5. Redistribution and use of this software other than as permitted under
|
||||
* this license is void and will automatically terminate your rights under
|
||||
* this license.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY |
||||
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
|
||||
#include "usb_device.h" |
||||
#include "usbd_core.h" |
||||
#include "usbd_desc.h" |
||||
#include "usbd_cdc.h" |
||||
#include "usbd_cdc_if.h" |
||||
|
||||
/* USER CODE BEGIN Includes */ |
||||
|
||||
/* USER CODE END Includes */ |
||||
|
||||
/* USER CODE BEGIN PV */ |
||||
/* Private variables ---------------------------------------------------------*/ |
||||
|
||||
/* USER CODE END PV */ |
||||
|
||||
/* USER CODE BEGIN PFP */ |
||||
/* Private function prototypes -----------------------------------------------*/ |
||||
|
||||
/* USER CODE END PFP */ |
||||
|
||||
/* USB Device Core handle declaration. */ |
||||
USBD_HandleTypeDef hUsbDeviceFS; |
||||
|
||||
/*
|
||||
* -- Insert your variables declaration here -- |
||||
*/ |
||||
/* USER CODE BEGIN 0 */ |
||||
|
||||
/* USER CODE END 0 */ |
||||
|
||||
/*
|
||||
* -- Insert your external function declaration here -- |
||||
*/ |
||||
/* USER CODE BEGIN 1 */ |
||||
|
||||
/* USER CODE END 1 */ |
||||
|
||||
/**
|
||||
* Init USB device Library, add supported class and start the library |
||||
* @retval None |
||||
*/ |
||||
void MX_USB_DEVICE_Init(void) |
||||
{ |
||||
/* USER CODE BEGIN USB_DEVICE_Init_PreTreatment */ |
||||
|
||||
/* USER CODE END USB_DEVICE_Init_PreTreatment */ |
||||
|
||||
/* Init Device Library, add supported class and start the library. */ |
||||
USBD_Init(&hUsbDeviceFS, &FS_Desc, DEVICE_FS); |
||||
|
||||
USBD_RegisterClass(&hUsbDeviceFS, &USBD_CDC); |
||||
|
||||
USBD_CDC_RegisterInterface(&hUsbDeviceFS, &USBD_Interface_fops_FS); |
||||
|
||||
USBD_Start(&hUsbDeviceFS); |
||||
|
||||
/* USER CODE BEGIN USB_DEVICE_Init_PostTreatment */ |
||||
|
||||
/* USER CODE END USB_DEVICE_Init_PostTreatment */ |
||||
} |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,337 @@
@@ -0,0 +1,337 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file : usbd_cdc_if.c |
||||
* @version : v2.0_Cube |
||||
* @brief : Usb device for Virtual Com Port. |
||||
****************************************************************************** |
||||
* This notice applies to any and all portions of this file |
||||
* that are not between comment pairs USER CODE BEGIN and |
||||
* USER CODE END. Other portions of this file, whether
|
||||
* inserted by the user or by software development tools |
||||
* are owned by their respective copyright owners. |
||||
* |
||||
* Copyright (c) 2018 STMicroelectronics International N.V.
|
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted, provided that the following conditions are met: |
||||
* |
||||
* 1. Redistribution of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. Neither the name of STMicroelectronics nor the names of other
|
||||
* contributors to this software may be used to endorse or promote products
|
||||
* derived from this software without specific written permission. |
||||
* 4. This software, including modifications and/or derivative works of this
|
||||
* software, must execute solely and exclusively on microcontroller or |
||||
* microprocessor devices manufactured by or for STMicroelectronics. |
||||
* 5. Redistribution and use of this software other than as permitted under
|
||||
* this license is void and will automatically terminate your rights under
|
||||
* this license.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY |
||||
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "usbd_cdc_if.h" |
||||
|
||||
/* USER CODE BEGIN INCLUDE */ |
||||
|
||||
/* USER CODE END INCLUDE */ |
||||
|
||||
/* Private typedef -----------------------------------------------------------*/ |
||||
/* Private define ------------------------------------------------------------*/ |
||||
/* Private macro -------------------------------------------------------------*/ |
||||
|
||||
/* USER CODE BEGIN PV */ |
||||
/* Private variables ---------------------------------------------------------*/ |
||||
|
||||
/* USER CODE END PV */ |
||||
|
||||
/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
|
||||
* @brief Usb device library. |
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup USBD_CDC_IF
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup USBD_CDC_IF_Private_TypesDefinitions USBD_CDC_IF_Private_TypesDefinitions
|
||||
* @brief Private types. |
||||
* @{ |
||||
*/ |
||||
|
||||
/* USER CODE BEGIN PRIVATE_TYPES */ |
||||
|
||||
/* USER CODE END PRIVATE_TYPES */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_CDC_IF_Private_Defines USBD_CDC_IF_Private_Defines
|
||||
* @brief Private defines. |
||||
* @{ |
||||
*/ |
||||
|
||||
/* USER CODE BEGIN PRIVATE_DEFINES */ |
||||
/* Define size for the receive and transmit buffer over CDC */ |
||||
/* It's up to user to redefine and/or remove those define */ |
||||
#define APP_RX_DATA_SIZE 1000 |
||||
#define APP_TX_DATA_SIZE 1000 |
||||
/* USER CODE END PRIVATE_DEFINES */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_CDC_IF_Private_Macros USBD_CDC_IF_Private_Macros
|
||||
* @brief Private macros. |
||||
* @{ |
||||
*/ |
||||
|
||||
/* USER CODE BEGIN PRIVATE_MACRO */ |
||||
|
||||
/* USER CODE END PRIVATE_MACRO */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_CDC_IF_Private_Variables USBD_CDC_IF_Private_Variables
|
||||
* @brief Private variables. |
||||
* @{ |
||||
*/ |
||||
/* Create buffer for reception and transmission */ |
||||
/* It's up to user to redefine and/or remove those define */ |
||||
/** Received data over USB are stored in this buffer */ |
||||
uint8_t UserRxBufferFS[APP_RX_DATA_SIZE]; |
||||
|
||||
/** Data to send over USB CDC are stored in this buffer */ |
||||
uint8_t UserTxBufferFS[APP_TX_DATA_SIZE]; |
||||
|
||||
/* USER CODE BEGIN PRIVATE_VARIABLES */ |
||||
|
||||
/* USER CODE END PRIVATE_VARIABLES */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_CDC_IF_Exported_Variables USBD_CDC_IF_Exported_Variables
|
||||
* @brief Public variables. |
||||
* @{ |
||||
*/ |
||||
|
||||
extern USBD_HandleTypeDef hUsbDeviceFS; |
||||
|
||||
/* USER CODE BEGIN EXPORTED_VARIABLES */ |
||||
|
||||
/* USER CODE END EXPORTED_VARIABLES */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_CDC_IF_Private_FunctionPrototypes USBD_CDC_IF_Private_FunctionPrototypes
|
||||
* @brief Private functions declaration. |
||||
* @{ |
||||
*/ |
||||
|
||||
static int8_t CDC_Init_FS(void); |
||||
static int8_t CDC_DeInit_FS(void); |
||||
static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length); |
||||
static int8_t CDC_Receive_FS(uint8_t* pbuf, uint32_t *Len); |
||||
|
||||
/* USER CODE BEGIN PRIVATE_FUNCTIONS_DECLARATION */ |
||||
|
||||
/* USER CODE END PRIVATE_FUNCTIONS_DECLARATION */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
USBD_CDC_ItfTypeDef USBD_Interface_fops_FS = |
||||
{ |
||||
CDC_Init_FS, |
||||
CDC_DeInit_FS, |
||||
CDC_Control_FS, |
||||
CDC_Receive_FS |
||||
}; |
||||
|
||||
/* Private functions ---------------------------------------------------------*/ |
||||
/**
|
||||
* @brief Initializes the CDC media low layer over the FS USB IP |
||||
* @retval USBD_OK if all operations are OK else USBD_FAIL |
||||
*/ |
||||
static int8_t CDC_Init_FS(void) |
||||
{ |
||||
/* USER CODE BEGIN 3 */ |
||||
/* Set Application Buffers */ |
||||
USBD_CDC_SetTxBuffer(&hUsbDeviceFS, UserTxBufferFS, 0); |
||||
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, UserRxBufferFS); |
||||
return (USBD_OK); |
||||
/* USER CODE END 3 */ |
||||
} |
||||
|
||||
/**
|
||||
* @brief DeInitializes the CDC media low layer |
||||
* @retval USBD_OK if all operations are OK else USBD_FAIL |
||||
*/ |
||||
static int8_t CDC_DeInit_FS(void) |
||||
{ |
||||
/* USER CODE BEGIN 4 */ |
||||
return (USBD_OK); |
||||
/* USER CODE END 4 */ |
||||
} |
||||
|
||||
/**
|
||||
* @brief Manage the CDC class requests |
||||
* @param cmd: Command code |
||||
* @param pbuf: Buffer containing command data (request parameters) |
||||
* @param length: Number of data to be sent (in bytes) |
||||
* @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL |
||||
*/ |
||||
static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length) |
||||
{ |
||||
/* USER CODE BEGIN 5 */ |
||||
switch(cmd) |
||||
{ |
||||
case CDC_SEND_ENCAPSULATED_COMMAND: |
||||
|
||||
break; |
||||
|
||||
case CDC_GET_ENCAPSULATED_RESPONSE: |
||||
|
||||
break; |
||||
|
||||
case CDC_SET_COMM_FEATURE: |
||||
|
||||
break; |
||||
|
||||
case CDC_GET_COMM_FEATURE: |
||||
|
||||
break; |
||||
|
||||
case CDC_CLEAR_COMM_FEATURE: |
||||
|
||||
break; |
||||
|
||||
/*******************************************************************************/ |
||||
/* Line Coding Structure */ |
||||
/*-----------------------------------------------------------------------------*/ |
||||
/* Offset | Field | Size | Value | Description */ |
||||
/* 0 | dwDTERate | 4 | Number |Data terminal rate, in bits per second*/ |
||||
/* 4 | bCharFormat | 1 | Number | Stop bits */ |
||||
/* 0 - 1 Stop bit */ |
||||
/* 1 - 1.5 Stop bits */ |
||||
/* 2 - 2 Stop bits */ |
||||
/* 5 | bParityType | 1 | Number | Parity */ |
||||
/* 0 - None */ |
||||
/* 1 - Odd */ |
||||
/* 2 - Even */ |
||||
/* 3 - Mark */ |
||||
/* 4 - Space */ |
||||
/* 6 | bDataBits | 1 | Number Data bits (5, 6, 7, 8 or 16). */ |
||||
/*******************************************************************************/ |
||||
case CDC_SET_LINE_CODING: |
||||
|
||||
break; |
||||
|
||||
case CDC_GET_LINE_CODING: |
||||
|
||||
break; |
||||
|
||||
case CDC_SET_CONTROL_LINE_STATE: |
||||
|
||||
break; |
||||
|
||||
case CDC_SEND_BREAK: |
||||
|
||||
break; |
||||
|
||||
default: |
||||
break; |
||||
} |
||||
|
||||
return (USBD_OK); |
||||
/* USER CODE END 5 */ |
||||
} |
||||
|
||||
/**
|
||||
* @brief Data received over USB OUT endpoint are sent over CDC interface |
||||
* through this function. |
||||
* |
||||
* @note |
||||
* This function will block any OUT packet reception on USB endpoint |
||||
* untill exiting this function. If you exit this function before transfer |
||||
* is complete on CDC interface (ie. using DMA controller) it will result |
||||
* in receiving more data while previous ones are still not sent. |
||||
* |
||||
* @param Buf: Buffer of data to be received |
||||
* @param Len: Number of data received (in bytes) |
||||
* @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL |
||||
*/ |
||||
static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len) |
||||
{ |
||||
/* USER CODE BEGIN 6 */ |
||||
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]); |
||||
USBD_CDC_ReceivePacket(&hUsbDeviceFS); |
||||
return (USBD_OK); |
||||
/* USER CODE END 6 */ |
||||
} |
||||
|
||||
/**
|
||||
* @brief CDC_Transmit_FS |
||||
* Data to send over USB IN endpoint are sent over CDC interface |
||||
* through this function. |
||||
* @note |
||||
* |
||||
* |
||||
* @param Buf: Buffer of data to be sent |
||||
* @param Len: Number of data to be sent (in bytes) |
||||
* @retval USBD_OK if all operations are OK else USBD_FAIL or USBD_BUSY |
||||
*/ |
||||
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len) |
||||
{ |
||||
uint8_t result = USBD_OK; |
||||
/* USER CODE BEGIN 7 */ |
||||
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData; |
||||
if (hcdc->TxState != 0){ |
||||
return USBD_BUSY; |
||||
} |
||||
USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf, Len); |
||||
result = USBD_CDC_TransmitPacket(&hUsbDeviceFS); |
||||
/* USER CODE END 7 */ |
||||
return result; |
||||
} |
||||
|
||||
/* USER CODE BEGIN PRIVATE_FUNCTIONS_IMPLEMENTATION */ |
||||
|
||||
/* USER CODE END PRIVATE_FUNCTIONS_IMPLEMENTATION */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,763 @@
@@ -0,0 +1,763 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file : usbd_conf.c |
||||
* @version : v2.0_Cube |
||||
* @brief : This file implements the board support package for the USB device library |
||||
****************************************************************************** |
||||
* This notice applies to any and all portions of this file |
||||
* that are not between comment pairs USER CODE BEGIN and |
||||
* USER CODE END. Other portions of this file, whether
|
||||
* inserted by the user or by software development tools |
||||
* are owned by their respective copyright owners. |
||||
* |
||||
* Copyright (c) 2018 STMicroelectronics International N.V.
|
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted, provided that the following conditions are met: |
||||
* |
||||
* 1. Redistribution of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. Neither the name of STMicroelectronics nor the names of other
|
||||
* contributors to this software may be used to endorse or promote products
|
||||
* derived from this software without specific written permission. |
||||
* 4. This software, including modifications and/or derivative works of this
|
||||
* software, must execute solely and exclusively on microcontroller or |
||||
* microprocessor devices manufactured by or for STMicroelectronics. |
||||
* 5. Redistribution and use of this software other than as permitted under
|
||||
* this license is void and will automatically terminate your rights under
|
||||
* this license.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY |
||||
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32f1xx.h" |
||||
#include "stm32f1xx_hal.h" |
||||
#include "usbd_def.h" |
||||
#include "usbd_core.h" |
||||
#include "usbd_cdc.h" |
||||
|
||||
/* USER CODE BEGIN Includes */ |
||||
|
||||
/* USER CODE END Includes */ |
||||
|
||||
/* Private typedef -----------------------------------------------------------*/ |
||||
/* Private define ------------------------------------------------------------*/ |
||||
/* Private macro -------------------------------------------------------------*/ |
||||
|
||||
/* USER CODE BEGIN PV */ |
||||
/* Private variables ---------------------------------------------------------*/ |
||||
|
||||
/* USER CODE END PV */ |
||||
|
||||
PCD_HandleTypeDef hpcd_USB_FS; |
||||
void _Error_Handler(char * file, int line); |
||||
|
||||
/* USER CODE BEGIN 0 */ |
||||
|
||||
/* USER CODE END 0 */ |
||||
|
||||
/* USER CODE BEGIN PFP */ |
||||
/* Private function prototypes -----------------------------------------------*/ |
||||
|
||||
/* USER CODE END PFP */ |
||||
|
||||
/* Private functions ---------------------------------------------------------*/ |
||||
|
||||
/* USER CODE BEGIN 1 */ |
||||
|
||||
/* USER CODE END 1 */ |
||||
|
||||
void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state); |
||||
|
||||
/*******************************************************************************
|
||||
LL Driver Callbacks (PCD -> USB Device Library) |
||||
*******************************************************************************/ |
||||
/* MSP Init */ |
||||
|
||||
void HAL_PCD_MspInit(PCD_HandleTypeDef* pcdHandle) |
||||
{ |
||||
if(pcdHandle->Instance==USB) |
||||
{ |
||||
/* USER CODE BEGIN USB_MspInit 0 */ |
||||
|
||||
/* USER CODE END USB_MspInit 0 */ |
||||
/* Peripheral clock enable */ |
||||
__HAL_RCC_USB_CLK_ENABLE(); |
||||
|
||||
/* Peripheral interrupt init */ |
||||
HAL_NVIC_SetPriority(USB_LP_CAN1_RX0_IRQn, 0, 0); |
||||
HAL_NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn); |
||||
/* USER CODE BEGIN USB_MspInit 1 */ |
||||
|
||||
/* USER CODE END USB_MspInit 1 */ |
||||
} |
||||
} |
||||
|
||||
void HAL_PCD_MspDeInit(PCD_HandleTypeDef* pcdHandle) |
||||
{ |
||||
if(pcdHandle->Instance==USB) |
||||
{ |
||||
/* USER CODE BEGIN USB_MspDeInit 0 */ |
||||
|
||||
/* USER CODE END USB_MspDeInit 0 */ |
||||
/* Peripheral clock disable */ |
||||
__HAL_RCC_USB_CLK_DISABLE(); |
||||
|
||||
/* Peripheral interrupt Deinit*/ |
||||
HAL_NVIC_DisableIRQ(USB_LP_CAN1_RX0_IRQn); |
||||
|
||||
/* USER CODE BEGIN USB_MspDeInit 1 */ |
||||
|
||||
/* USER CODE END USB_MspDeInit 1 */ |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Setup stage callback |
||||
* @param hpcd: PCD handle |
||||
* @retval None |
||||
*/ |
||||
void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd) |
||||
{ |
||||
USBD_LL_SetupStage((USBD_HandleTypeDef*)hpcd->pData, (uint8_t *)hpcd->Setup); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Data Out stage callback. |
||||
* @param hpcd: PCD handle |
||||
* @param epnum: Endpoint number |
||||
* @retval None |
||||
*/ |
||||
void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) |
||||
{ |
||||
USBD_LL_DataOutStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->OUT_ep[epnum].xfer_buff); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Data In stage callback. |
||||
* @param hpcd: PCD handle |
||||
* @param epnum: Endpoint number |
||||
* @retval None |
||||
*/ |
||||
void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) |
||||
{ |
||||
USBD_LL_DataInStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->IN_ep[epnum].xfer_buff); |
||||
} |
||||
|
||||
/**
|
||||
* @brief SOF callback. |
||||
* @param hpcd: PCD handle |
||||
* @retval None |
||||
*/ |
||||
void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd) |
||||
{ |
||||
USBD_LL_SOF((USBD_HandleTypeDef*)hpcd->pData); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Reset callback. |
||||
* @param hpcd: PCD handle |
||||
* @retval None |
||||
*/ |
||||
void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd) |
||||
{
|
||||
USBD_SpeedTypeDef speed = USBD_SPEED_FULL; |
||||
|
||||
/* Set USB current speed. */ |
||||
switch (hpcd->Init.speed) |
||||
{ |
||||
case PCD_SPEED_FULL: |
||||
speed = USBD_SPEED_FULL; |
||||
break; |
||||
|
||||
default: |
||||
speed = USBD_SPEED_FULL; |
||||
break;
|
||||
} |
||||
USBD_LL_SetSpeed((USBD_HandleTypeDef*)hpcd->pData, speed); |
||||
|
||||
/* Reset Device. */ |
||||
USBD_LL_Reset((USBD_HandleTypeDef*)hpcd->pData); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Suspend callback. |
||||
* When Low power mode is enabled the debug cannot be used (IAR, Keil doesn't support it) |
||||
* @param hpcd: PCD handle |
||||
* @retval None |
||||
*/ |
||||
void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd) |
||||
{ |
||||
/* Inform USB library that core enters in suspend Mode. */ |
||||
USBD_LL_Suspend((USBD_HandleTypeDef*)hpcd->pData); |
||||
/* Enter in STOP mode. */ |
||||
/* USER CODE BEGIN 2 */ |
||||
if (hpcd->Init.low_power_enable) |
||||
{ |
||||
/* Set SLEEPDEEP bit and SleepOnExit of Cortex System Control Register. */ |
||||
SCB->SCR |= (uint32_t)((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk)); |
||||
} |
||||
/* USER CODE END 2 */ |
||||
} |
||||
|
||||
/**
|
||||
* @brief Resume callback. |
||||
* When Low power mode is enabled the debug cannot be used (IAR, Keil doesn't support it) |
||||
* @param hpcd: PCD handle |
||||
* @retval None |
||||
*/ |
||||
void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd) |
||||
{ |
||||
/* USER CODE BEGIN 3 */ |
||||
|
||||
/* USER CODE END 3 */ |
||||
USBD_LL_Resume((USBD_HandleTypeDef*)hpcd->pData); |
||||
} |
||||
|
||||
/**
|
||||
* @brief ISOOUTIncomplete callback. |
||||
* @param hpcd: PCD handle |
||||
* @param epnum: Endpoint number |
||||
* @retval None |
||||
*/ |
||||
void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) |
||||
{ |
||||
USBD_LL_IsoOUTIncomplete((USBD_HandleTypeDef*)hpcd->pData, epnum); |
||||
} |
||||
|
||||
/**
|
||||
* @brief ISOINIncomplete callback. |
||||
* @param hpcd: PCD handle |
||||
* @param epnum: Endpoint number |
||||
* @retval None |
||||
*/ |
||||
void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) |
||||
{ |
||||
USBD_LL_IsoINIncomplete((USBD_HandleTypeDef*)hpcd->pData, epnum); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Connect callback. |
||||
* @param hpcd: PCD handle |
||||
* @retval None |
||||
*/ |
||||
void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd) |
||||
{ |
||||
USBD_LL_DevConnected((USBD_HandleTypeDef*)hpcd->pData); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Disconnect callback. |
||||
* @param hpcd: PCD handle |
||||
* @retval None |
||||
*/ |
||||
void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd) |
||||
{ |
||||
USBD_LL_DevDisconnected((USBD_HandleTypeDef*)hpcd->pData); |
||||
} |
||||
|
||||
/*******************************************************************************
|
||||
LL Driver Interface (USB Device Library --> PCD) |
||||
*******************************************************************************/ |
||||
|
||||
/**
|
||||
* @brief Initializes the low level portion of the device driver. |
||||
* @param pdev: Device handle |
||||
* @retval USBD status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev) |
||||
{ |
||||
/* Init USB Ip. */ |
||||
/* Link the driver to the stack. */ |
||||
hpcd_USB_FS.pData = pdev; |
||||
pdev->pData = &hpcd_USB_FS; |
||||
|
||||
hpcd_USB_FS.Instance = USB; |
||||
hpcd_USB_FS.Init.dev_endpoints = 8; |
||||
hpcd_USB_FS.Init.speed = PCD_SPEED_FULL; |
||||
hpcd_USB_FS.Init.ep0_mps = DEP0CTL_MPS_8; |
||||
hpcd_USB_FS.Init.low_power_enable = DISABLE; |
||||
hpcd_USB_FS.Init.lpm_enable = DISABLE; |
||||
hpcd_USB_FS.Init.battery_charging_enable = DISABLE; |
||||
if (HAL_PCD_Init(&hpcd_USB_FS) != HAL_OK) |
||||
{ |
||||
_Error_Handler(__FILE__, __LINE__); |
||||
} |
||||
|
||||
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x00 , PCD_SNG_BUF, 0x18); |
||||
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x80 , PCD_SNG_BUF, 0x58); |
||||
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x81 , PCD_SNG_BUF, 0xC0); |
||||
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x01 , PCD_SNG_BUF, 0x110); |
||||
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x82 , PCD_SNG_BUF, 0x100); |
||||
return USBD_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief De-Initializes the low level portion of the device driver. |
||||
* @param pdev: Device handle |
||||
* @retval USBD status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev) |
||||
{ |
||||
HAL_StatusTypeDef hal_status = HAL_OK; |
||||
USBD_StatusTypeDef usb_status = USBD_OK; |
||||
|
||||
hal_status = HAL_PCD_DeInit(pdev->pData); |
||||
|
||||
switch (hal_status) { |
||||
case HAL_OK : |
||||
usb_status = USBD_OK; |
||||
break; |
||||
case HAL_ERROR : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
case HAL_BUSY : |
||||
usb_status = USBD_BUSY; |
||||
break; |
||||
case HAL_TIMEOUT : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
default : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
} |
||||
return usb_status;
|
||||
} |
||||
|
||||
/**
|
||||
* @brief Starts the low level portion of the device driver. |
||||
* @param pdev: Device handle |
||||
* @retval USBD status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev) |
||||
{ |
||||
HAL_StatusTypeDef hal_status = HAL_OK; |
||||
USBD_StatusTypeDef usb_status = USBD_OK; |
||||
|
||||
hal_status = HAL_PCD_Start(pdev->pData); |
||||
|
||||
switch (hal_status) { |
||||
case HAL_OK : |
||||
usb_status = USBD_OK; |
||||
break; |
||||
case HAL_ERROR : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
case HAL_BUSY : |
||||
usb_status = USBD_BUSY; |
||||
break; |
||||
case HAL_TIMEOUT : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
default : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
} |
||||
return usb_status; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Stops the low level portion of the device driver. |
||||
* @param pdev: Device handle |
||||
* @retval USBD status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev) |
||||
{ |
||||
HAL_StatusTypeDef hal_status = HAL_OK; |
||||
USBD_StatusTypeDef usb_status = USBD_OK; |
||||
|
||||
hal_status = HAL_PCD_Stop(pdev->pData); |
||||
|
||||
switch (hal_status) { |
||||
case HAL_OK : |
||||
usb_status = USBD_OK; |
||||
break; |
||||
case HAL_ERROR : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
case HAL_BUSY : |
||||
usb_status = USBD_BUSY; |
||||
break; |
||||
case HAL_TIMEOUT : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
default : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
} |
||||
return usb_status; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Opens an endpoint of the low level driver. |
||||
* @param pdev: Device handle |
||||
* @param ep_addr: Endpoint number |
||||
* @param ep_type: Endpoint type |
||||
* @param ep_mps: Endpoint max packet size |
||||
* @retval USBD status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t ep_type, uint16_t ep_mps) |
||||
{ |
||||
HAL_StatusTypeDef hal_status = HAL_OK; |
||||
USBD_StatusTypeDef usb_status = USBD_OK; |
||||
|
||||
hal_status = HAL_PCD_EP_Open(pdev->pData, ep_addr, ep_mps, ep_type); |
||||
|
||||
switch (hal_status) { |
||||
case HAL_OK : |
||||
usb_status = USBD_OK; |
||||
break; |
||||
case HAL_ERROR : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
case HAL_BUSY : |
||||
usb_status = USBD_BUSY; |
||||
break; |
||||
case HAL_TIMEOUT : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
default : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
} |
||||
return usb_status; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Closes an endpoint of the low level driver. |
||||
* @param pdev: Device handle |
||||
* @param ep_addr: Endpoint number |
||||
* @retval USBD status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
||||
{ |
||||
HAL_StatusTypeDef hal_status = HAL_OK; |
||||
USBD_StatusTypeDef usb_status = USBD_OK; |
||||
|
||||
hal_status = HAL_PCD_EP_Close(pdev->pData, ep_addr); |
||||
|
||||
switch (hal_status) { |
||||
case HAL_OK : |
||||
usb_status = USBD_OK; |
||||
break; |
||||
case HAL_ERROR : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
case HAL_BUSY : |
||||
usb_status = USBD_BUSY; |
||||
break; |
||||
case HAL_TIMEOUT : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
default : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
} |
||||
return usb_status;
|
||||
} |
||||
|
||||
/**
|
||||
* @brief Flushes an endpoint of the Low Level Driver. |
||||
* @param pdev: Device handle |
||||
* @param ep_addr: Endpoint number |
||||
* @retval USBD status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
||||
{ |
||||
HAL_StatusTypeDef hal_status = HAL_OK; |
||||
USBD_StatusTypeDef usb_status = USBD_OK; |
||||
|
||||
hal_status = HAL_PCD_EP_Flush(pdev->pData, ep_addr); |
||||
|
||||
switch (hal_status) { |
||||
case HAL_OK : |
||||
usb_status = USBD_OK; |
||||
break; |
||||
case HAL_ERROR : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
case HAL_BUSY : |
||||
usb_status = USBD_BUSY; |
||||
break; |
||||
case HAL_TIMEOUT : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
default : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
} |
||||
return usb_status;
|
||||
} |
||||
|
||||
/**
|
||||
* @brief Sets a Stall condition on an endpoint of the Low Level Driver. |
||||
* @param pdev: Device handle |
||||
* @param ep_addr: Endpoint number |
||||
* @retval USBD status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
||||
{ |
||||
HAL_StatusTypeDef hal_status = HAL_OK; |
||||
USBD_StatusTypeDef usb_status = USBD_OK; |
||||
|
||||
hal_status = HAL_PCD_EP_SetStall(pdev->pData, ep_addr); |
||||
|
||||
switch (hal_status) { |
||||
case HAL_OK : |
||||
usb_status = USBD_OK; |
||||
break; |
||||
case HAL_ERROR : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
case HAL_BUSY : |
||||
usb_status = USBD_BUSY; |
||||
break; |
||||
case HAL_TIMEOUT : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
default : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
} |
||||
return usb_status;
|
||||
} |
||||
|
||||
/**
|
||||
* @brief Clears a Stall condition on an endpoint of the Low Level Driver. |
||||
* @param pdev: Device handle |
||||
* @param ep_addr: Endpoint number |
||||
* @retval USBD status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
||||
{ |
||||
HAL_StatusTypeDef hal_status = HAL_OK; |
||||
USBD_StatusTypeDef usb_status = USBD_OK; |
||||
|
||||
hal_status = HAL_PCD_EP_ClrStall(pdev->pData, ep_addr);
|
||||
|
||||
switch (hal_status) { |
||||
case HAL_OK : |
||||
usb_status = USBD_OK; |
||||
break; |
||||
case HAL_ERROR : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
case HAL_BUSY : |
||||
usb_status = USBD_BUSY; |
||||
break; |
||||
case HAL_TIMEOUT : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
default : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
} |
||||
return usb_status;
|
||||
} |
||||
|
||||
/**
|
||||
* @brief Returns Stall condition. |
||||
* @param pdev: Device handle |
||||
* @param ep_addr: Endpoint number |
||||
* @retval Stall (1: Yes, 0: No) |
||||
*/ |
||||
uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
||||
{ |
||||
PCD_HandleTypeDef *hpcd = (PCD_HandleTypeDef*) pdev->pData; |
||||
|
||||
if((ep_addr & 0x80) == 0x80) |
||||
{ |
||||
return hpcd->IN_ep[ep_addr & 0x7F].is_stall;
|
||||
} |
||||
else |
||||
{ |
||||
return hpcd->OUT_ep[ep_addr & 0x7F].is_stall;
|
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Assigns a USB address to the device. |
||||
* @param pdev: Device handle |
||||
* @param dev_addr: Device address |
||||
* @retval USBD status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr) |
||||
{ |
||||
HAL_StatusTypeDef hal_status = HAL_OK; |
||||
USBD_StatusTypeDef usb_status = USBD_OK; |
||||
|
||||
hal_status = HAL_PCD_SetAddress(pdev->pData, dev_addr); |
||||
|
||||
switch (hal_status) { |
||||
case HAL_OK : |
||||
usb_status = USBD_OK; |
||||
break; |
||||
case HAL_ERROR : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
case HAL_BUSY : |
||||
usb_status = USBD_BUSY; |
||||
break; |
||||
case HAL_TIMEOUT : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
default : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
} |
||||
return usb_status;
|
||||
} |
||||
|
||||
/**
|
||||
* @brief Transmits data over an endpoint. |
||||
* @param pdev: Device handle |
||||
* @param ep_addr: Endpoint number |
||||
* @param pbuf: Pointer to data to be sent |
||||
* @param size: Data size
|
||||
* @retval USBD status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint16_t size) |
||||
{ |
||||
HAL_StatusTypeDef hal_status = HAL_OK; |
||||
USBD_StatusTypeDef usb_status = USBD_OK; |
||||
|
||||
hal_status = HAL_PCD_EP_Transmit(pdev->pData, ep_addr, pbuf, size); |
||||
|
||||
switch (hal_status) { |
||||
case HAL_OK : |
||||
usb_status = USBD_OK; |
||||
break; |
||||
case HAL_ERROR : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
case HAL_BUSY : |
||||
usb_status = USBD_BUSY; |
||||
break; |
||||
case HAL_TIMEOUT : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
default : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
} |
||||
return usb_status;
|
||||
} |
||||
|
||||
/**
|
||||
* @brief Prepares an endpoint for reception. |
||||
* @param pdev: Device handle |
||||
* @param ep_addr: Endpoint number |
||||
* @param pbuf: Pointer to data to be received |
||||
* @param size: Data size |
||||
* @retval USBD status |
||||
*/ |
||||
USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint16_t size) |
||||
{ |
||||
HAL_StatusTypeDef hal_status = HAL_OK; |
||||
USBD_StatusTypeDef usb_status = USBD_OK; |
||||
|
||||
hal_status = HAL_PCD_EP_Receive(pdev->pData, ep_addr, pbuf, size); |
||||
|
||||
switch (hal_status) { |
||||
case HAL_OK : |
||||
usb_status = USBD_OK; |
||||
break; |
||||
case HAL_ERROR : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
case HAL_BUSY : |
||||
usb_status = USBD_BUSY; |
||||
break; |
||||
case HAL_TIMEOUT : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
default : |
||||
usb_status = USBD_FAIL; |
||||
break; |
||||
} |
||||
return usb_status;
|
||||
} |
||||
|
||||
/**
|
||||
* @brief Returns the last transfered packet size. |
||||
* @param pdev: Device handle |
||||
* @param ep_addr: Endpoint number |
||||
* @retval Recived Data Size |
||||
*/ |
||||
uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
||||
{ |
||||
return HAL_PCD_EP_GetRxCount((PCD_HandleTypeDef*) pdev->pData, ep_addr); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Delays routine for the USB device library. |
||||
* @param Delay: Delay in ms |
||||
* @retval None |
||||
*/ |
||||
void USBD_LL_Delay(uint32_t Delay) |
||||
{ |
||||
HAL_Delay(Delay); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Static single allocation. |
||||
* @param size: Size of allocated memory |
||||
* @retval None |
||||
*/ |
||||
void *USBD_static_malloc(uint32_t size) |
||||
{ |
||||
static uint32_t mem[(sizeof(USBD_CDC_HandleTypeDef)/4)+1];/* On 32-bit boundary */ |
||||
return mem; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Dummy memory free |
||||
* @param p: Pointer to allocated memory address |
||||
* @retval None |
||||
*/ |
||||
void USBD_static_free(void *p) |
||||
{ |
||||
|
||||
} |
||||
|
||||
/**
|
||||
* @brief Software Device Connection |
||||
* @param hpcd: PCD handle |
||||
* @param state: Connection state (0: disconnected / 1: connected) |
||||
* @retval None |
||||
*/ |
||||
void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state) |
||||
{ |
||||
/* USER CODE BEGIN 6 */ |
||||
if (state == 1) |
||||
{ |
||||
/* Configure Low connection state. */ |
||||
|
||||
} |
||||
else |
||||
{ |
||||
/* Configure High connection state. */ |
||||
|
||||
} |
||||
/* USER CODE END 6 */ |
||||
} |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,354 @@
@@ -0,0 +1,354 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file : usbd_desc.c |
||||
* @version : v2.0_Cube |
||||
* @brief : This file implements the USB device descriptors. |
||||
****************************************************************************** |
||||
* This notice applies to any and all portions of this file |
||||
* that are not between comment pairs USER CODE BEGIN and |
||||
* USER CODE END. Other portions of this file, whether
|
||||
* inserted by the user or by software development tools |
||||
* are owned by their respective copyright owners. |
||||
* |
||||
* Copyright (c) 2018 STMicroelectronics International N.V.
|
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted, provided that the following conditions are met: |
||||
* |
||||
* 1. Redistribution of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. Neither the name of STMicroelectronics nor the names of other
|
||||
* contributors to this software may be used to endorse or promote products
|
||||
* derived from this software without specific written permission. |
||||
* 4. This software, including modifications and/or derivative works of this
|
||||
* software, must execute solely and exclusively on microcontroller or |
||||
* microprocessor devices manufactured by or for STMicroelectronics. |
||||
* 5. Redistribution and use of this software other than as permitted under
|
||||
* this license is void and will automatically terminate your rights under
|
||||
* this license.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY |
||||
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "usbd_core.h" |
||||
#include "usbd_desc.h" |
||||
#include "usbd_conf.h" |
||||
|
||||
/* USER CODE BEGIN INCLUDE */ |
||||
|
||||
/* USER CODE END INCLUDE */ |
||||
|
||||
/* Private typedef -----------------------------------------------------------*/ |
||||
/* Private define ------------------------------------------------------------*/ |
||||
/* Private macro -------------------------------------------------------------*/ |
||||
|
||||
/* USER CODE BEGIN PV */ |
||||
/* Private variables ---------------------------------------------------------*/ |
||||
|
||||
/* USER CODE END PV */ |
||||
|
||||
/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup USBD_DESC
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup USBD_DESC_Private_TypesDefinitions USBD_DESC_Private_TypesDefinitions
|
||||
* @brief Private types. |
||||
* @{ |
||||
*/ |
||||
|
||||
/* USER CODE BEGIN PRIVATE_TYPES */ |
||||
|
||||
/* USER CODE END PRIVATE_TYPES */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_DESC_Private_Defines USBD_DESC_Private_Defines
|
||||
* @brief Private defines. |
||||
* @{ |
||||
*/ |
||||
|
||||
#define USBD_VID 1155 |
||||
#define USBD_LANGID_STRING 1033 |
||||
#define USBD_MANUFACTURER_STRING "STMicroelectronics" |
||||
#define USBD_PID_FS 22336 |
||||
#define USBD_PRODUCT_STRING_FS "STM32 Virtual ComPort" |
||||
#define USBD_SERIALNUMBER_STRING_FS "00000000001A" |
||||
#define USBD_CONFIGURATION_STRING_FS "CDC Config" |
||||
#define USBD_INTERFACE_STRING_FS "CDC Interface" |
||||
|
||||
/* USER CODE BEGIN PRIVATE_DEFINES */ |
||||
|
||||
/* USER CODE END PRIVATE_DEFINES */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* USER CODE BEGIN 0 */ |
||||
|
||||
/* USER CODE END 0 */ |
||||
|
||||
/** @defgroup USBD_DESC_Private_Macros USBD_DESC_Private_Macros
|
||||
* @brief Private macros. |
||||
* @{ |
||||
*/ |
||||
|
||||
/* USER CODE BEGIN PRIVATE_MACRO */ |
||||
|
||||
/* USER CODE END PRIVATE_MACRO */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_DESC_Private_FunctionPrototypes USBD_DESC_Private_FunctionPrototypes
|
||||
* @brief Private functions declaration. |
||||
* @{ |
||||
*/ |
||||
|
||||
uint8_t * USBD_FS_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); |
||||
uint8_t * USBD_FS_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); |
||||
uint8_t * USBD_FS_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); |
||||
uint8_t * USBD_FS_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); |
||||
uint8_t * USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); |
||||
uint8_t * USBD_FS_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); |
||||
uint8_t * USBD_FS_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); |
||||
|
||||
#ifdef USB_SUPPORT_USER_STRING_DESC |
||||
uint8_t * USBD_FS_USRStringDesc(USBD_SpeedTypeDef speed, uint8_t idx, uint16_t *length); |
||||
#endif /* USB_SUPPORT_USER_STRING_DESC */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_DESC_Private_Variables USBD_DESC_Private_Variables
|
||||
* @brief Private variables. |
||||
* @{ |
||||
*/ |
||||
|
||||
USBD_DescriptorsTypeDef FS_Desc = |
||||
{ |
||||
USBD_FS_DeviceDescriptor |
||||
, USBD_FS_LangIDStrDescriptor |
||||
, USBD_FS_ManufacturerStrDescriptor |
||||
, USBD_FS_ProductStrDescriptor |
||||
, USBD_FS_SerialStrDescriptor |
||||
, USBD_FS_ConfigStrDescriptor |
||||
, USBD_FS_InterfaceStrDescriptor |
||||
}; |
||||
|
||||
#if defined ( __ICCARM__ ) /* IAR Compiler */ |
||||
#pragma data_alignment=4 |
||||
#endif /* defined ( __ICCARM__ ) */ |
||||
/** USB standard device descriptor. */ |
||||
__ALIGN_BEGIN uint8_t USBD_FS_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END = |
||||
{ |
||||
0x12, /*bLength */ |
||||
USB_DESC_TYPE_DEVICE, /*bDescriptorType*/ |
||||
0x00, /*bcdUSB */ |
||||
0x02, |
||||
0x02, /*bDeviceClass*/ |
||||
0x02, /*bDeviceSubClass*/ |
||||
0x00, /*bDeviceProtocol*/ |
||||
USB_MAX_EP0_SIZE, /*bMaxPacketSize*/ |
||||
LOBYTE(USBD_VID), /*idVendor*/ |
||||
HIBYTE(USBD_VID), /*idVendor*/ |
||||
LOBYTE(USBD_PID_FS), /*idProduct*/ |
||||
HIBYTE(USBD_PID_FS), /*idProduct*/ |
||||
0x00, /*bcdDevice rel. 2.00*/ |
||||
0x02, |
||||
USBD_IDX_MFC_STR, /*Index of manufacturer string*/ |
||||
USBD_IDX_PRODUCT_STR, /*Index of product string*/ |
||||
USBD_IDX_SERIAL_STR, /*Index of serial number string*/ |
||||
USBD_MAX_NUM_CONFIGURATION /*bNumConfigurations*/ |
||||
}; |
||||
|
||||
/* USB_DeviceDescriptor */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_DESC_Private_Variables USBD_DESC_Private_Variables
|
||||
* @brief Private variables. |
||||
* @{ |
||||
*/ |
||||
|
||||
#if defined ( __ICCARM__ ) /* IAR Compiler */ |
||||
#pragma data_alignment=4 |
||||
#endif /* defined ( __ICCARM__ ) */ |
||||
|
||||
/** USB lang indentifier descriptor. */ |
||||
__ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC] __ALIGN_END = |
||||
{ |
||||
USB_LEN_LANGID_STR_DESC, |
||||
USB_DESC_TYPE_STRING, |
||||
LOBYTE(USBD_LANGID_STRING), |
||||
HIBYTE(USBD_LANGID_STRING) |
||||
}; |
||||
|
||||
#if defined ( __ICCARM__ ) /* IAR Compiler */ |
||||
#pragma data_alignment=4 |
||||
#endif /* defined ( __ICCARM__ ) */ |
||||
/* Internal string descriptor. */ |
||||
__ALIGN_BEGIN uint8_t USBD_StrDesc[USBD_MAX_STR_DESC_SIZ] __ALIGN_END; |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup USBD_DESC_Private_Functions USBD_DESC_Private_Functions
|
||||
* @brief Private functions. |
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief Return the device descriptor |
||||
* @param speed : Current device speed |
||||
* @param length : Pointer to data length variable |
||||
* @retval Pointer to descriptor buffer |
||||
*/ |
||||
uint8_t * USBD_FS_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) |
||||
{ |
||||
*length = sizeof(USBD_FS_DeviceDesc); |
||||
return USBD_FS_DeviceDesc; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Return the LangID string descriptor |
||||
* @param speed : Current device speed |
||||
* @param length : Pointer to data length variable |
||||
* @retval Pointer to descriptor buffer |
||||
*/ |
||||
uint8_t * USBD_FS_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) |
||||
{ |
||||
*length = sizeof(USBD_LangIDDesc); |
||||
return USBD_LangIDDesc; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Return the product string descriptor |
||||
* @param speed : Current device speed |
||||
* @param length : Pointer to data length variable |
||||
* @retval Pointer to descriptor buffer |
||||
*/ |
||||
uint8_t * USBD_FS_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) |
||||
{ |
||||
if(speed == 0) |
||||
{ |
||||
USBD_GetString((uint8_t *)USBD_PRODUCT_STRING_FS, USBD_StrDesc, length); |
||||
} |
||||
else |
||||
{ |
||||
USBD_GetString((uint8_t *)USBD_PRODUCT_STRING_FS, USBD_StrDesc, length); |
||||
} |
||||
return USBD_StrDesc; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Return the manufacturer string descriptor |
||||
* @param speed : Current device speed |
||||
* @param length : Pointer to data length variable |
||||
* @retval Pointer to descriptor buffer |
||||
*/ |
||||
uint8_t * USBD_FS_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) |
||||
{ |
||||
USBD_GetString((uint8_t *)USBD_MANUFACTURER_STRING, USBD_StrDesc, length); |
||||
return USBD_StrDesc; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Return the serial number string descriptor |
||||
* @param speed : Current device speed |
||||
* @param length : Pointer to data length variable |
||||
* @retval Pointer to descriptor buffer |
||||
*/ |
||||
uint8_t * USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) |
||||
{ |
||||
if(speed == USBD_SPEED_HIGH) |
||||
{ |
||||
USBD_GetString((uint8_t *)USBD_SERIALNUMBER_STRING_FS, USBD_StrDesc, length); |
||||
} |
||||
else |
||||
{ |
||||
USBD_GetString((uint8_t *)USBD_SERIALNUMBER_STRING_FS, USBD_StrDesc, length); |
||||
} |
||||
return USBD_StrDesc; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Return the configuration string descriptor |
||||
* @param speed : Current device speed |
||||
* @param length : Pointer to data length variable |
||||
* @retval Pointer to descriptor buffer |
||||
*/ |
||||
uint8_t * USBD_FS_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) |
||||
{ |
||||
if(speed == USBD_SPEED_HIGH) |
||||
{ |
||||
USBD_GetString((uint8_t *)USBD_CONFIGURATION_STRING_FS, USBD_StrDesc, length); |
||||
} |
||||
else |
||||
{ |
||||
USBD_GetString((uint8_t *)USBD_CONFIGURATION_STRING_FS, USBD_StrDesc, length); |
||||
} |
||||
return USBD_StrDesc; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Return the interface string descriptor |
||||
* @param speed : Current device speed |
||||
* @param length : Pointer to data length variable |
||||
* @retval Pointer to descriptor buffer |
||||
*/ |
||||
uint8_t * USBD_FS_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) |
||||
{ |
||||
if(speed == 0) |
||||
{ |
||||
USBD_GetString((uint8_t *)USBD_INTERFACE_STRING_FS, USBD_StrDesc, length); |
||||
} |
||||
else |
||||
{ |
||||
USBD_GetString((uint8_t *)USBD_INTERFACE_STRING_FS, USBD_StrDesc, length); |
||||
} |
||||
return USBD_StrDesc; |
||||
} |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
Loading…
Reference in new issue