diff options
26 files changed, 6457 insertions, 0 deletions
diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/.cproject b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/.cproject new file mode 100644 index 000000000..f7ae41732 --- /dev/null +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/.cproject @@ -0,0 +1,118 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 +<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
 +	<storageModule moduleId="org.eclipse.cdt.core.settings">
 +		<cconfiguration id="0.1570569554">
 +			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.1570569554" moduleId="org.eclipse.cdt.core.settings" name="Default">
 +				<externalSettings/>
 +				<extensions>
 +					<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
 +					<extension id="org.eclipse.cdt.core.VCErrorParser" 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.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.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +				</extensions>
 +			</storageModule>
 +			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +				<configuration artifactName="${ProjName}" buildProperties="" description="" id="0.1570569554" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
 +					<folderInfo id="0.1570569554." name="/" resourcePath="">
 +						<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.2051275125" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
 +							<targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.eclipse.cdt.build.core.prefbase.toolchain.2051275125.1235631892" name=""/>
 +							<builder id="org.eclipse.cdt.build.core.settings.default.builder.681215945" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.libs.1913618182" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.1359024970" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.648690541" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths"/>
 +								<option id="org.eclipse.cdt.build.core.settings.holder.undef.incpaths.1530801237" name="Undefined Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.undef.incpaths"/>
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.865562104" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.321395526" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.76286563" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths"/>
 +								<option id="org.eclipse.cdt.build.core.settings.holder.undef.incpaths.1772031118" name="Undefined Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.undef.incpaths"/>
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1168908150" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.1390938668" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.684710851" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths"/>
 +								<option id="org.eclipse.cdt.build.core.settings.holder.undef.incpaths.1457542840" name="Undefined Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.undef.incpaths"/>
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.645908401" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +						</toolChain>
 +					</folderInfo>
 +				</configuration>
 +			</storageModule>
 +			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 +		</cconfiguration>
 +		<cconfiguration id="0.1570569554.1629784558">
 +			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.1570569554.1629784558" moduleId="org.eclipse.cdt.core.settings" name="Build for STM32F746-Discovery">
 +				<externalSettings/>
 +				<extensions>
 +					<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
 +					<extension id="org.eclipse.cdt.core.VCErrorParser" 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.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.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +				</extensions>
 +			</storageModule>
 +			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +				<configuration artifactName="${ProjName}" buildProperties="" description="" id="0.1570569554.1629784558" name="Build for STM32F746-Discovery" parent="org.eclipse.cdt.build.core.prefbase.cfg">
 +					<folderInfo id="0.1570569554.1629784558." name="/" resourcePath="">
 +						<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.1578189045" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
 +							<targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.eclipse.cdt.build.core.prefbase.toolchain.1578189045.328762513" name=""/>
 +							<builder arguments="-f Makefile-stm32f746_discovery" command="make" id="org.eclipse.cdt.build.core.settings.default.builder.339968776" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.libs.1142929379" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.1147455862" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.1688616224" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths"/>
 +								<option id="org.eclipse.cdt.build.core.settings.holder.undef.incpaths.1436087980" name="Undefined Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.undef.incpaths"/>
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1474099896" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.1154996865" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.1324760862" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths"/>
 +								<option id="org.eclipse.cdt.build.core.settings.holder.undef.incpaths.1580897186" name="Undefined Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.undef.incpaths"/>
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1011174191" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.1777655289" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.247218436" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths"/>
 +								<option id="org.eclipse.cdt.build.core.settings.holder.undef.incpaths.1400436566" name="Undefined Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.undef.incpaths"/>
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.667143723" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +						</toolChain>
 +					</folderInfo>
 +				</configuration>
 +			</storageModule>
 +			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 +		</cconfiguration>
 +	</storageModule>
 +	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +		<project id="RT-STM32-LWIP-FATFS-USB-HTTPS.null.100047313" name="RT-STM32-LWIP-FATFS-USB-HTTPS"/>
 +	</storageModule>
 +	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 +	<storageModule moduleId="refreshScope" versionNumber="2">
 +		<configuration configurationName="Default">
 +			<resource resourceType="PROJECT" workspacePath="/RT-STM32-LWIP-FATFS-USB-HTTPS"/>
 +		</configuration>
 +		<configuration configurationName="Build for STM32F746-Discovery">
 +			<resource resourceType="PROJECT" workspacePath="/RT-STM32-LWIP-FATFS-USB-HTTPS"/>
 +		</configuration>
 +		<configuration configurationName="Build for STM32F407-Olimex">
 +			<resource resourceType="PROJECT" workspacePath="/RT-STM32-LWIP-FATFS-USB-HTTPS"/>
 +		</configuration>
 +		<configuration configurationName="Build for STM32F107-Goldbull">
 +			<resource resourceType="PROJECT" workspacePath="/RT-STM32-LWIP-FATFS-USB-HTTPS"/>
 +		</configuration>
 +	</storageModule>
 +	<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
 +	<storageModule moduleId="scannerConfiguration">
 +		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 +		<scannerConfigBuildInfo instanceId="0.1570569554">
 +			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
 +		</scannerConfigBuildInfo>
 +		<scannerConfigBuildInfo instanceId="0.1570569554.95389811.2077839933">
 +			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
 +		</scannerConfigBuildInfo>
 +		<scannerConfigBuildInfo instanceId="0.1570569554.1629784558">
 +			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
 +		</scannerConfigBuildInfo>
 +	</storageModule>
 +</cproject>
 diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/.project b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/.project new file mode 100644 index 000000000..8e115a43e --- /dev/null +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/.project @@ -0,0 +1,101 @@ +<?xml version="1.0" encoding="UTF-8"?>
 +<projectDescription>
 +	<name>RT-STM32-LWIP-FATFS-USB-HTTPS</name>
 +	<comment></comment>
 +	<projects>
 +	</projects>
 +	<buildSpec>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
 +			<triggers>clean,full,incremental,</triggers>
 +			<arguments>
 +				<dictionary>
 +					<key>?name?</key>
 +					<value></value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.append_environment</key>
 +					<value>true</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.autoBuildTarget</key>
 +					<value>all</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.buildArguments</key>
 +					<value>-j1</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.buildCommand</key>
 +					<value>make</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
 +					<value>clean</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.contents</key>
 +					<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
 +					<value>false</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
 +					<value>true</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.enableFullBuild</key>
 +					<value>true</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.fullBuildTarget</key>
 +					<value>all</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.stopOnError</key>
 +					<value>true</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
 +					<value>true</value>
 +				</dictionary>
 +			</arguments>
 +		</buildCommand>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
 +			<triggers>full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +	</buildSpec>
 +	<natures>
 +		<nature>org.eclipse.cdt.core.cnature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
 +		<nature>org.eclipse.cdt.core.ccnature</nature>
 +	</natures>
 +	<linkedResources>
 +		<link>
 +			<name>fatfs</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/ext/fatfs</locationURI>
 +		</link>
 +		<link>
 +			<name>lwip</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/ext/lwip</locationURI>
 +		</link>
 +		<link>
 +			<name>os</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/os</locationURI>
 +		</link>
 +		<link>
 +			<name>test</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/test</locationURI>
 +		</link>
 +	</linkedResources>
 +</projectDescription>
 diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/Makefile b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/Makefile new file mode 100644 index 000000000..361f2cafc --- /dev/null +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/Makefile @@ -0,0 +1,18 @@ +############################################################################## +# Multi-project makefile rules +# + +all: +	@echo +	@echo === Building for STM32F746-Discovery =============================== +	@make --no-print-directory -f Makefile-stm32f746_discovery all +	@echo ==================================================================== +	@echo + +clean: +	@echo +	-@make --no-print-directory -f Makefile-stm32f746_discovery clean +	@echo + +# +############################################################################## diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/Makefile-stm32f746_discovery b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/Makefile-stm32f746_discovery new file mode 100644 index 000000000..74079b524 --- /dev/null +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/Makefile-stm32f746_discovery @@ -0,0 +1,241 @@ +############################################################################## +# Build global options +# NOTE: Can be overridden externally. +# + +# Compiler options here. +ifeq ($(USE_OPT),) +  USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16 +endif + +# C specific options here (added to USE_OPT). +ifeq ($(USE_COPT),) +  USE_COPT = -DWOLFSSL_USER_SETTINGS +endif + +# C++ specific options here (added to USE_OPT). +ifeq ($(USE_CPPOPT),) +  USE_CPPOPT = -fno-rtti +endif + +# Enable this if you want the linker to remove unused code and data +ifeq ($(USE_LINK_GC),) +  USE_LINK_GC = yes +endif + +# Linker extra options here. +ifeq ($(USE_LDOPT),) +  USE_LDOPT =  +endif + +# Enable this if you want link time optimizations (LTO) +ifeq ($(USE_LTO),) +  USE_LTO = yes +endif + +# If enabled, this option allows to compile the application in THUMB mode. +ifeq ($(USE_THUMB),) +  USE_THUMB = yes +endif + +# Enable this if you want to see the full log while compiling. +ifeq ($(USE_VERBOSE_COMPILE),) +  USE_VERBOSE_COMPILE = no +endif + +# If enabled, this option makes the build process faster by not compiling +# modules not used in the current configuration. +ifeq ($(USE_SMART_BUILD),) +  USE_SMART_BUILD = yes +endif + +# +# Build global options +############################################################################## + +############################################################################## +# Architecture or project specific options +# + +# Stack size to be allocated to the Cortex-M process stack. This stack is +# the stack used by the main() thread. +ifeq ($(USE_PROCESS_STACKSIZE),) +  USE_PROCESS_STACKSIZE = 0x400 +endif + +# Stack size to the allocated to the Cortex-M main/exceptions stack. This +# stack is used for processing interrupts and exceptions. +ifeq ($(USE_EXCEPTIONS_STACKSIZE),) +  USE_EXCEPTIONS_STACKSIZE = 0x400 +endif + +# Enables the use of FPU (no, softfp, hard). +ifeq ($(USE_FPU),) +  USE_FPU = no +endif + +# FPU-related options. +ifeq ($(USE_FPU_OPT),) +  USE_FPU_OPT = -mfloat-abi=$(USE_FPU) -mfpu=fpv5-sp-d16 -fsingle-precision-constant +endif + +# +# Architecture or project specific options +############################################################################## + +############################################################################## +# Project, sources and paths +# + +# Define project name here +PROJECT = ch +CONFDIR  := ./cfg-stm32f746_discovery +BUILDDIR := ./build-stm32f746_discovery +DEPDIR   := ./.dep-stm32f746_discovery + +# Imported source files and paths +CHIBIOS = ../../.. +# Startup files. +include $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk/startup_stm32f7xx.mk +# HAL-OSAL files (optional). +include $(CHIBIOS)/os/hal/hal.mk +include $(CHIBIOS)/os/hal/ports/STM32/STM32F7xx/platform.mk +include $(CHIBIOS)/os/hal/boards/ST_STM32F746G_DISCOVERY/board.mk +include $(CHIBIOS)/os/hal/osal/rt/osal.mk +# RTOS files (optional). +include $(CHIBIOS)/os/rt/rt.mk +include $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC/mk/port_v7m.mk +# Other files (optional). +include $(CHIBIOS)/test/lib/test.mk +include $(CHIBIOS)/test/rt/rt_test.mk +include $(CHIBIOS)/test/oslib/oslib_test.mk +include $(CHIBIOS)/os/hal/lib/streams/streams.mk +include $(CHIBIOS)/os/various/shell/shell.mk +include $(CHIBIOS)/os/various/lwip_bindings/lwip.mk +include $(CHIBIOS)/os/various/wolfssl_bindings/wolfssl.mk +include $(CHIBIOS)/os/various/fatfs_bindings/fatfs.mk + +# Define linker script file here +LDSCRIPT= $(STARTUPLD)/STM32F746xG_MAX.ld + +# C sources that can be compiled in ARM or THUMB mode depending on the global +# setting. +CSRC = $(STARTUPSRC) \ +       $(KERNSRC) \ +       $(PORTSRC) \ +       $(OSALSRC) \ +       $(HALSRC) \ +       $(PLATFORMSRC) \ +       $(BOARDSRC) \ +       $(TESTSRC) \ +       $(WOLFSRC) \ +       $(LWSRC) \ +       $(FATFSSRC) \ +       $(STREAMSSRC) \ +       $(SHELLSRC) \ +       $(CHIBIOS)/os/various/evtimer.c \ +       $(CONFDIR)/portab.c \ +       src/usbcfg.c main.c web/web.c web/cert.c + +# C++ sources that can be compiled in ARM or THUMB mode depending on the global +# setting. +CPPSRC = + +# C sources to be compiled in ARM mode regardless of the global setting. +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler +#       option that results in lower performance and larger code size. +ACSRC = + +# C++ sources to be compiled in ARM mode regardless of the global setting. +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler +#       option that results in lower performance and larger code size. +ACPPSRC = + +# C sources to be compiled in THUMB mode regardless of the global setting. +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler +#       option that results in lower performance and larger code size. +TCSRC = + +# C sources to be compiled in THUMB mode regardless of the global setting. +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler +#       option that results in lower performance and larger code size. +TCPPSRC = + +# List ASM source files here +ASMSRC = +ASMXSRC = $(STARTUPASM) $(PORTASM) $(OSALASM) + +INCDIR = $(CHIBIOS)/os/license \ +         $(STARTUPINC) $(KERNINC) $(PORTINC) $(OSALINC) \ +         $(HALINC) $(PLATFORMINC) $(BOARDINC) $(TESTINC) \ +         $(STREAMSINC) $(SHELLINC) $(LWINC) $(FATFSINC) $(WOLFINC) \ +         $(CHIBIOS)/os/various $(CONFDIR) ./cfg ./src + +# +# Project, sources and paths +############################################################################## + +############################################################################## +# Compiler settings +# + +MCU  = cortex-m7 + +#TRGT = arm-elf- +TRGT = arm-none-eabi- +CC   = $(TRGT)gcc +CPPC = $(TRGT)g++ +# Enable loading with g++ only if you need C++ runtime support. +# NOTE: You can use C++ even without C++ support if you are careful. C++ +#       runtime support makes code size explode. +LD   = $(TRGT)gcc +#LD   = $(TRGT)g++ +CP   = $(TRGT)objcopy +AS   = $(TRGT)gcc -x assembler-with-cpp +AR   = $(TRGT)ar +OD   = $(TRGT)objdump +SZ   = $(TRGT)size +HEX  = $(CP) -O ihex +BIN  = $(CP) -O binary + +# ARM-specific options here +AOPT = + +# THUMB-specific options here +TOPT = -mthumb -DTHUMB + +# Define C warning options here +CWARN = -Wall -Wextra -Wundef -Wstrict-prototypes + +# Define C++ warning options here +CPPWARN = -Wall -Wextra -Wundef -Wcpp + +# +# Compiler settings +############################################################################## + +############################################################################## +# Start of user section +# + +# List all user C define here, like -D_DEBUG=1 +UDEFS =  + +# Define ASM defines here +UADEFS = + +# List all user directories here +UINCDIR = + +# List the user directory to look for the libraries here +ULIBDIR = + +# List all user libraries here +ULIBS = -lm + +# +# End of user defines +############################################################################## + +RULESPATH = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC +include $(RULESPATH)/rules.mk diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg-stm32f746_discovery/chconf.h b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg-stm32f746_discovery/chconf.h new file mode 100644 index 000000000..f2a2d72c3 --- /dev/null +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg-stm32f746_discovery/chconf.h @@ -0,0 +1,610 @@ +/*
 +    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/chconf.h
 + * @brief   Configuration file template.
 + * @details A copy of this file must be placed in each project directory, it
 + *          contains the application specific kernel settings.
 + *
 + * @addtogroup config
 + * @details Kernel related settings and hooks.
 + * @{
 + */
 +
 +#ifndef CHCONF_H
 +#define CHCONF_H
 +
 +#define _CHIBIOS_RT_CONF_
 +#define _CHIBIOS_RT_CONF_VER_5_0_
 +
 +/*===========================================================================*/
 +/**
 + * @name System timers settings
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   System time counter resolution.
 + * @note    Allowed values are 16 or 32 bits.
 + */
 +#define CH_CFG_ST_RESOLUTION                32
 +
 +/**
 + * @brief   System tick frequency.
 + * @details Frequency of the system timer that drives the system ticks. This
 + *          setting also defines the system tick time unit.
 + */
 +#define CH_CFG_ST_FREQUENCY                 10000
 +
 +/**
 + * @brief   Time intervals data size.
 + * @note    Allowed values are 16, 32 or 64 bits.
 + */
 +#define CH_CFG_INTERVALS_SIZE               32
 +
 +/**
 + * @brief   Time types data size.
 + * @note    Allowed values are 16 or 32 bits.
 + */
 +#define CH_CFG_TIME_TYPES_SIZE              32
 +
 +/**
 + * @brief   Time delta constant for the tick-less mode.
 + * @note    If this value is zero then the system uses the classic
 + *          periodic tick. This value represents the minimum number
 + *          of ticks that is safe to specify in a timeout directive.
 + *          The value one is not valid, timeouts are rounded up to
 + *          this value.
 + */
 +#define CH_CFG_ST_TIMEDELTA                 2
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel parameters and options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Round robin interval.
 + * @details This constant is the number of system ticks allowed for the
 + *          threads before preemption occurs. Setting this value to zero
 + *          disables the preemption for threads with equal priority and the
 + *          round robin becomes cooperative. Note that higher priority
 + *          threads can still preempt, the kernel is always preemptive.
 + * @note    Disabling the round robin preemption makes the kernel more compact
 + *          and generally faster.
 + * @note    The round robin preemption is not supported in tickless mode and
 + *          must be set to zero in that case.
 + */
 +#define CH_CFG_TIME_QUANTUM                 0
 +
 +/**
 + * @brief   Managed RAM size.
 + * @details Size of the RAM area to be managed by the OS. If set to zero
 + *          then the whole available RAM is used. The core memory is made
 + *          available to the heap allocator and/or can be used directly through
 + *          the simplified core memory allocator.
 + *
 + * @note    In order to let the OS manage the whole RAM the linker script must
 + *          provide the @p __heap_base__ and @p __heap_end__ symbols.
 + * @note    Requires @p CH_CFG_USE_MEMCORE.
 + */
 +#define CH_CFG_MEMCORE_SIZE                 0
 +
 +/**
 + * @brief   Idle thread automatic spawn suppression.
 + * @details When this option is activated the function @p chSysInit()
 + *          does not spawn the idle thread. The application @p main()
 + *          function becomes the idle thread and must implement an
 + *          infinite loop.
 + */
 +#define CH_CFG_NO_IDLE_THREAD               FALSE
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Performance options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   OS optimization.
 + * @details If enabled then time efficient rather than space efficient code
 + *          is used when two possible implementations exist.
 + *
 + * @note    This is not related to the compiler optimization options.
 + * @note    The default is @p TRUE.
 + */
 +#define CH_CFG_OPTIMIZE_SPEED               TRUE
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Subsystem options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Time Measurement APIs.
 + * @details If enabled then the time measurement APIs are included in
 + *          the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#define CH_CFG_USE_TM                       TRUE
 +
 +/**
 + * @brief   Threads registry APIs.
 + * @details If enabled then the registry APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#define CH_CFG_USE_REGISTRY                 TRUE
 +
 +/**
 + * @brief   Threads synchronization APIs.
 + * @details If enabled then the @p chThdWait() function is included in
 + *          the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#define CH_CFG_USE_WAITEXIT                 TRUE
 +
 +/**
 + * @brief   Semaphores APIs.
 + * @details If enabled then the Semaphores APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#define CH_CFG_USE_SEMAPHORES               TRUE
 +
 +/**
 + * @brief   Semaphores queuing mode.
 + * @details If enabled then the threads are enqueued on semaphores by
 + *          priority rather than in FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special
 + *          requirements.
 + * @note    Requires @p CH_CFG_USE_SEMAPHORES.
 + */
 +#define CH_CFG_USE_SEMAPHORES_PRIORITY      FALSE
 +
 +/**
 + * @brief   Mutexes APIs.
 + * @details If enabled then the mutexes APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#define CH_CFG_USE_MUTEXES                  TRUE
 +
 +/**
 + * @brief   Enables recursive behavior on mutexes.
 + * @note    Recursive mutexes are heavier and have an increased
 + *          memory footprint.
 + *
 + * @note    The default is @p FALSE.
 + * @note    Requires @p CH_CFG_USE_MUTEXES.
 + */
 +#define CH_CFG_USE_MUTEXES_RECURSIVE        FALSE
 +
 +/**
 + * @brief   Conditional Variables APIs.
 + * @details If enabled then the conditional variables APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_CFG_USE_MUTEXES.
 + */
 +#define CH_CFG_USE_CONDVARS                 TRUE
 +
 +/**
 + * @brief   Conditional Variables APIs with timeout.
 + * @details If enabled then the conditional variables APIs with timeout
 + *          specification are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_CFG_USE_CONDVARS.
 + */
 +#define CH_CFG_USE_CONDVARS_TIMEOUT         TRUE
 +
 +/**
 + * @brief   Events Flags APIs.
 + * @details If enabled then the event flags APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#define CH_CFG_USE_EVENTS                   TRUE
 +
 +/**
 + * @brief   Events Flags APIs with timeout.
 + * @details If enabled then the events APIs with timeout specification
 + *          are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_CFG_USE_EVENTS.
 + */
 +#define CH_CFG_USE_EVENTS_TIMEOUT           TRUE
 +
 +/**
 + * @brief   Synchronous Messages APIs.
 + * @details If enabled then the synchronous messages APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#define CH_CFG_USE_MESSAGES                 TRUE
 +
 +/**
 + * @brief   Synchronous Messages queuing mode.
 + * @details If enabled then messages are served by priority rather than in
 + *          FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special
 + *          requirements.
 + * @note    Requires @p CH_CFG_USE_MESSAGES.
 + */
 +#define CH_CFG_USE_MESSAGES_PRIORITY        FALSE
 +
 +/**
 + * @brief   Mailboxes APIs.
 + * @details If enabled then the asynchronous messages (mailboxes) APIs are
 + *          included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_CFG_USE_SEMAPHORES.
 + */
 +#define CH_CFG_USE_MAILBOXES                TRUE
 +
 +/**
 + * @brief   Core Memory Manager APIs.
 + * @details If enabled then the core memory manager APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#define CH_CFG_USE_MEMCORE                  TRUE
 +
 +/**
 + * @brief   Heap Allocator APIs.
 + * @details If enabled then the memory heap allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
 + *          @p CH_CFG_USE_SEMAPHORES.
 + * @note    Mutexes are recommended.
 + */
 +#define CH_CFG_USE_HEAP                     TRUE
 +
 +/**
 + * @brief   Memory Pools Allocator APIs.
 + * @details If enabled then the memory pools allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#define CH_CFG_USE_MEMPOOLS                 TRUE
 +
 +/**
 + * @brief  Objects FIFOs APIs.
 + * @details If enabled then the objects FIFOs APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#define CH_CFG_USE_OBJ_FIFOS                TRUE
 +
 +/**
 + * @brief   Dynamic Threads APIs.
 + * @details If enabled then the dynamic threads creation APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_CFG_USE_WAITEXIT.
 + * @note    Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
 + */
 +#define CH_CFG_USE_DYNAMIC                  TRUE
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Objects factory options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Objects Factory APIs.
 + * @details If enabled then the objects factory APIs are included in the
 + *          kernel.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#define CH_CFG_USE_FACTORY                  TRUE
 +
 +/**
 + * @brief   Maximum length for object names.
 + * @details If the specified length is zero then the name is stored by
 + *          pointer but this could have unintended side effects.
 + */
 +#define CH_CFG_FACTORY_MAX_NAMES_LENGTH     8
 +
 +/**
 + * @brief   Enables the registry of generic objects.
 + */
 +#define CH_CFG_FACTORY_OBJECTS_REGISTRY     TRUE
 +
 +/**
 + * @brief   Enables factory for generic buffers.
 + */
 +#define CH_CFG_FACTORY_GENERIC_BUFFERS      TRUE
 +
 +/**
 + * @brief   Enables factory for semaphores.
 + */
 +#define CH_CFG_FACTORY_SEMAPHORES           TRUE
 +
 +/**
 + * @brief   Enables factory for mailboxes.
 + */
 +#define CH_CFG_FACTORY_MAILBOXES            TRUE
 +
 +/**
 + * @brief   Enables factory for objects FIFOs.
 + */
 +#define CH_CFG_FACTORY_OBJ_FIFOS            TRUE
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Debug options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Debug option, kernel statistics.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#define CH_DBG_STATISTICS                   FALSE
 +
 +/**
 + * @brief   Debug option, system state check.
 + * @details If enabled the correct call protocol for system APIs is checked
 + *          at runtime.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#define CH_DBG_SYSTEM_STATE_CHECK           FALSE
 +
 +/**
 + * @brief   Debug option, parameters checks.
 + * @details If enabled then the checks on the API functions input
 + *          parameters are activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#define CH_DBG_ENABLE_CHECKS                FALSE
 +
 +/**
 + * @brief   Debug option, consistency checks.
 + * @details If enabled then all the assertions in the kernel code are
 + *          activated. This includes consistency checks inside the kernel,
 + *          runtime anomalies and port-defined checks.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#define CH_DBG_ENABLE_ASSERTS               FALSE
 +
 +/**
 + * @brief   Debug option, trace buffer.
 + * @details If enabled then the trace buffer is activated.
 + *
 + * @note    The default is @p CH_DBG_TRACE_MASK_DISABLED.
 + */
 +#define CH_DBG_TRACE_MASK                   CH_DBG_TRACE_MASK_DISABLED
 +
 +/**
 + * @brief   Trace buffer entries.
 + * @note    The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
 + *          different from @p CH_DBG_TRACE_MASK_DISABLED.
 + */
 +#define CH_DBG_TRACE_BUFFER_SIZE            128
 +
 +/**
 + * @brief   Debug option, stack checks.
 + * @details If enabled then a runtime stack check is performed.
 + *
 + * @note    The default is @p FALSE.
 + * @note    The stack check is performed in a architecture/port dependent way.
 + *          It may not be implemented or some ports.
 + * @note    The default failure mode is to halt the system with the global
 + *          @p panic_msg variable set to @p NULL.
 + */
 +#define CH_DBG_ENABLE_STACK_CHECK           FALSE
 +
 +/**
 + * @brief   Debug option, stacks initialization.
 + * @details If enabled then the threads working area is filled with a byte
 + *          value when a thread is created. This can be useful for the
 + *          runtime measurement of the used stack.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#define CH_DBG_FILL_THREADS                 FALSE
 +
 +/**
 + * @brief   Debug option, threads profiling.
 + * @details If enabled then a field is added to the @p thread_t structure that
 + *          counts the system ticks occurred while executing the thread.
 + *
 + * @note    The default is @p FALSE.
 + * @note    This debug option is not currently compatible with the
 + *          tickless mode.
 + */
 +#define CH_DBG_THREADS_PROFILING            FALSE
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel hooks
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   System structure extension.
 + * @details User fields added to the end of the @p ch_system_t structure.
 + */
 +#define CH_CFG_SYSTEM_EXTRA_FIELDS                                          \
 +  /* Add threads custom fields here.*/
 +
 +/**
 + * @brief   System initialization hook.
 + * @details User initialization code added to the @p chSysInit() function
 + *          just before interrupts are enabled globally.
 + */
 +#define CH_CFG_SYSTEM_INIT_HOOK(tp) {                                       \
 +  /* Add threads initialization code here.*/                                \
 +}
 +
 +/**
 + * @brief   Threads descriptor structure extension.
 + * @details User fields added to the end of the @p thread_t structure.
 + */
 +#define CH_CFG_THREAD_EXTRA_FIELDS                                          \
 +  /* Add threads custom fields here.*/
 +
 +/**
 + * @brief   Threads initialization hook.
 + * @details User initialization code added to the @p _thread_init() function.
 + *
 + * @note    It is invoked from within @p _thread_init() and implicitly from all
 + *          the threads creation APIs.
 + */
 +#define CH_CFG_THREAD_INIT_HOOK(tp) {                                       \
 +  /* Add threads initialization code here.*/                                \
 +}
 +
 +/**
 + * @brief   Threads finalization hook.
 + * @details User finalization code added to the @p chThdExit() API.
 + */
 +#define CH_CFG_THREAD_EXIT_HOOK(tp) {                                       \
 +  /* Add threads finalization code here.*/                                  \
 +}
 +
 +/**
 + * @brief   Context switch hook.
 + * @details This hook is invoked just before switching between threads.
 + */
 +#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
 +  /* Context switch code here.*/                                            \
 +}
 +
 +/**
 + * @brief   ISR enter hook.
 + */
 +#define CH_CFG_IRQ_PROLOGUE_HOOK() {                                        \
 +  /* IRQ prologue code here.*/                                              \
 +}
 +
 +/**
 + * @brief   ISR exit hook.
 + */
 +#define CH_CFG_IRQ_EPILOGUE_HOOK() {                                        \
 +  /* IRQ epilogue code here.*/                                              \
 +}
 +
 +/**
 + * @brief   Idle thread enter hook.
 + * @note    This hook is invoked within a critical zone, no OS functions
 + *          should be invoked from here.
 + * @note    This macro can be used to activate a power saving mode.
 + */
 +#define CH_CFG_IDLE_ENTER_HOOK() {                                          \
 +  /* Idle-enter code here.*/                                                \
 +}
 +
 +/**
 + * @brief   Idle thread leave hook.
 + * @note    This hook is invoked within a critical zone, no OS functions
 + *          should be invoked from here.
 + * @note    This macro can be used to deactivate a power saving mode.
 + */
 +#define CH_CFG_IDLE_LEAVE_HOOK() {                                          \
 +  /* Idle-leave code here.*/                                                \
 +}
 +
 +/**
 + * @brief   Idle Loop hook.
 + * @details This hook is continuously invoked by the idle thread loop.
 + */
 +#define CH_CFG_IDLE_LOOP_HOOK() {                                           \
 +  /* Idle loop code here.*/                                                 \
 +}
 +
 +/**
 + * @brief   System tick event hook.
 + * @details This hook is invoked in the system tick handler immediately
 + *          after processing the virtual timers queue.
 + */
 +#define CH_CFG_SYSTEM_TICK_HOOK() {                                         \
 +  /* System tick event code here.*/                                         \
 +}
 +
 +/**
 + * @brief   System halt hook.
 + * @details This hook is invoked in case to a system halting error before
 + *          the system is halted.
 + */
 +#define CH_CFG_SYSTEM_HALT_HOOK(reason) {                                   \
 +  /* System halt code here.*/                                               \
 +}
 +
 +/**
 + * @brief   Trace hook.
 + * @details This hook is invoked each time a new record is written in the
 + *          trace buffer.
 + */
 +#define CH_CFG_TRACE_HOOK(tep) {                                            \
 +  /* Trace code here.*/                                                     \
 +}
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/* Port-specific settings (override port settings defaulted in chcore.h).    */
 +/*===========================================================================*/
 +
 +#define CORTEX_VTOR_INIT                    0x00200000U
 +
 +#endif  /* CHCONF_H */
 +
 +/** @} */
 diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg-stm32f746_discovery/halconf.h b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg-stm32f746_discovery/halconf.h new file mode 100644 index 000000000..97a71f639 --- /dev/null +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg-stm32f746_discovery/halconf.h @@ -0,0 +1,424 @@ +/*
 +    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/halconf.h
 + * @brief   HAL configuration header.
 + * @details HAL configuration file, this file allows to enable or disable the
 + *          various device drivers from your application. You may also use
 + *          this file in order to override the device drivers default settings.
 + *
 + * @addtogroup HAL_CONF
 + * @{
 + */
 +
 +#ifndef HALCONF_H
 +#define HALCONF_H
 +
 +#include "mcuconf.h"
 +
 +/**
 + * @brief   Enables the TM subsystem.
 + */
 +#if !defined(HAL_USE_TM) || defined(__DOXYGEN__)
 +#define HAL_USE_TM                  TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the PAL subsystem.
 + */
 +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
 +#define HAL_USE_PAL                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the ADC subsystem.
 + */
 +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
 +#define HAL_USE_ADC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the CAN subsystem.
 + */
 +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
 +#define HAL_USE_CAN                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the cryptographic subsystem.
 + */
 +#if !defined(HAL_USE_CRY) || defined(__DOXYGEN__)
 +#define HAL_USE_CRY                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the DAC subsystem.
 + */
 +#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
 +#define HAL_USE_DAC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the EXT subsystem.
 + */
 +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
 +#define HAL_USE_EXT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the GPT subsystem.
 + */
 +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
 +#define HAL_USE_GPT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the I2C subsystem.
 + */
 +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 +#define HAL_USE_I2C                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the I2S subsystem.
 + */
 +#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
 +#define HAL_USE_I2S                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the ICU subsystem.
 + */
 +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
 +#define HAL_USE_ICU                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MAC subsystem.
 + */
 +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
 +#define HAL_USE_MAC                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the MMC_SPI subsystem.
 + */
 +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_MMC_SPI             FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the PWM subsystem.
 + */
 +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
 +#define HAL_USE_PWM                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the QSPI subsystem.
 + */
 +#if !defined(HAL_USE_QSPI) || defined(__DOXYGEN__)
 +#define HAL_USE_QSPI                FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the RTC subsystem.
 + */
 +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
 +#define HAL_USE_RTC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SDC subsystem.
 + */
 +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
 +#define HAL_USE_SDC                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL              FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL over USB subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL_USB          TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the SPI subsystem.
 + */
 +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_SPI                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the UART subsystem.
 + */
 +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
 +#define HAL_USE_UART                FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the USB subsystem.
 + */
 +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_USB                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the WDG subsystem.
 + */
 +#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
 +#define HAL_USE_WDG                 FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* ADC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
 +#define ADC_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define ADC_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* CAN driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Sleep mode related APIs inclusion switch.
 + */
 +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
 +#define CAN_USE_SLEEP_MODE          TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* CRY driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables the SW fall-back of the cryptographic driver.
 + * @details When enabled, this option, activates a fall-back software
 + *          implementation for algorithms not supported by the underlying
 + *          hardware.
 + * @note    Fall-back implementations may not be present for all algorithms.
 + */
 +#if !defined(HAL_CRY_USE_FALLBACK) || defined(__DOXYGEN__)
 +#define HAL_CRY_USE_FALLBACK                FALSE
 +#endif
 +
 +/**
 + * @brief   Makes the driver forcibly use the fall-back implementations.
 + */
 +#if !defined(HAL_CRY_ENFORCE_FALLBACK) || defined(__DOXYGEN__)
 +#define HAL_CRY_ENFORCE_FALLBACK            FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* I2C driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables the mutual exclusion APIs on the I2C bus.
 + */
 +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define I2C_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MAC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
 +#define MAC_USE_ZERO_COPY           FALSE
 +#endif
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
 +#define MAC_USE_EVENTS              TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MMC_SPI driver related settings.                                          */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + *          This option is recommended also if the SPI driver does not
 + *          use a DMA channel and heavily loads the CPU.
 + */
 +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define MMC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SDC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Number of initialization attempts before rejecting the card.
 + * @note    Attempts are performed at 10mS intervals.
 + */
 +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
 +#define SDC_INIT_RETRY              100
 +#endif
 +
 +/**
 + * @brief   Include support for MMC cards.
 + * @note    MMC support is not yet implemented so this option must be kept
 + *          at @p FALSE.
 + */
 +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
 +#define SDC_MMC_SUPPORT             FALSE
 +#endif
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + */
 +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define SDC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SERIAL driver related settings.                                           */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Default bit rate.
 + * @details Configuration parameter, this is the baud rate selected for the
 + *          default configuration.
 + */
 +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
 +#define SERIAL_DEFAULT_BITRATE      38400
 +#endif
 +
 +/**
 + * @brief   Serial buffers size.
 + * @details Configuration parameter, you can change the depth of the queue
 + *          buffers depending on the requirements of your application.
 + * @note    The default is 16 bytes for both the transmission and receive
 + *          buffers.
 + */
 +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
 +#define SERIAL_BUFFERS_SIZE         16
 +#endif
 +
 +/*===========================================================================*/
 +/* SERIAL_USB driver related setting.                                        */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Serial over USB buffers size.
 + * @details Configuration parameter, the buffer size must be a multiple of
 + *          the USB data endpoint maximum packet size.
 + * @note    The default is 256 bytes for both the transmission and receive
 + *          buffers.
 + */
 +#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
 +#define SERIAL_USB_BUFFERS_SIZE     256
 +#endif
 +
 +/**
 + * @brief   Serial over USB number of buffers.
 + * @note    The default is 2 buffers.
 + */
 +#if !defined(SERIAL_USB_BUFFERS_NUMBER) || defined(__DOXYGEN__)
 +#define SERIAL_USB_BUFFERS_NUMBER   2
 +#endif
 +
 +/*===========================================================================*/
 +/* SPI driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
 +#define SPI_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define SPI_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* UART driver related settings.                                             */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(UART_USE_WAIT) || defined(__DOXYGEN__)
 +#define UART_USE_WAIT               FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the @p uartAcquireBus() and @p uartReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(UART_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define UART_USE_MUTUAL_EXCLUSION   FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* USB driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
 +#define USB_USE_WAIT                FALSE
 +#endif
 +
 +#endif /* HALCONF_H */
 +
 +/** @} */
 diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg-stm32f746_discovery/mcuconf.h b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg-stm32f746_discovery/mcuconf.h new file mode 100644 index 000000000..2b95f6ed1 --- /dev/null +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg-stm32f746_discovery/mcuconf.h @@ -0,0 +1,391 @@ +/*
 +    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +#ifndef MCUCONF_H
 +#define MCUCONF_H
 +
 +/*
 + * STM32F7xx drivers configuration.
 + * The following settings override the default settings present in
 + * the various device driver implementation headers.
 + * Note that the settings for each driver only have effect if the whole
 + * driver is enabled in halconf.h.
 + *
 + * IRQ priorities:
 + * 15...0       Lowest...Highest.
 + *
 + * DMA priorities:
 + * 0...3        Lowest...Highest.
 + */
 +
 +#define STM32F7xx_MCUCONF
 +
 +/*
 + * HAL driver system settings.
 + */
 +#define STM32_NO_INIT                       FALSE
 +#define STM32_PVD_ENABLE                    FALSE
 +#define STM32_PLS                           STM32_PLS_LEV0
 +#define STM32_BKPRAM_ENABLE                 FALSE
 +#define STM32_HSI_ENABLED                   TRUE
 +#define STM32_LSI_ENABLED                   FALSE
 +#define STM32_HSE_ENABLED                   TRUE
 +#define STM32_LSE_ENABLED                   TRUE
 +#define STM32_CLOCK48_REQUIRED              TRUE
 +#define STM32_SW                            STM32_SW_PLL
 +#define STM32_PLLSRC                        STM32_PLLSRC_HSE
 +#define STM32_PLLM_VALUE                    25
 +#define STM32_PLLN_VALUE                    432
 +#define STM32_PLLP_VALUE                    2
 +#define STM32_PLLQ_VALUE                    9
 +#define STM32_HPRE                          STM32_HPRE_DIV1
 +#define STM32_PPRE1                         STM32_PPRE1_DIV4
 +#define STM32_PPRE2                         STM32_PPRE2_DIV2
 +#define STM32_RTCSEL                        STM32_RTCSEL_LSE
 +#define STM32_RTCPRE_VALUE                  25
 +#define STM32_MCO1SEL                       STM32_MCO1SEL_HSI
 +#define STM32_MCO1PRE                       STM32_MCO1PRE_DIV1
 +#define STM32_MCO2SEL                       STM32_MCO2SEL_SYSCLK
 +#define STM32_MCO2PRE                       STM32_MCO2PRE_DIV4
 +#define STM32_I2SSRC                        STM32_I2SSRC_OFF
 +#define STM32_PLLI2SN_VALUE                 192
 +#define STM32_PLLI2SP_VALUE                 4
 +#define STM32_PLLI2SQ_VALUE                 4
 +#define STM32_PLLI2SR_VALUE                 4
 +#define STM32_PLLI2SDIVQ_VALUE              2
 +#define STM32_PLLSAIN_VALUE                 192
 +#define STM32_PLLSAIP_VALUE                 4
 +#define STM32_PLLSAIQ_VALUE                 4
 +#define STM32_PLLSAIR_VALUE                 4
 +#define STM32_PLLSAIDIVQ_VALUE              2
 +#define STM32_PLLSAIDIVR_VALUE              2
 +#define STM32_SAI1SEL                       STM32_SAI1SEL_OFF
 +#define STM32_SAI2SEL                       STM32_SAI2SEL_OFF
 +#define STM32_LCDTFT_REQUIRED               FALSE
 +#define STM32_USART1SEL                     STM32_USART1SEL_PCLK2
 +#define STM32_USART2SEL                     STM32_USART2SEL_PCLK1
 +#define STM32_USART3SEL                     STM32_USART3SEL_PCLK1
 +#define STM32_UART4SEL                      STM32_UART4SEL_PCLK1
 +#define STM32_UART5SEL                      STM32_UART5SEL_PCLK1
 +#define STM32_USART6SEL                     STM32_USART6SEL_PCLK2
 +#define STM32_UART7SEL                      STM32_UART7SEL_PCLK1
 +#define STM32_UART8SEL                      STM32_UART8SEL_PCLK1
 +#define STM32_I2C1SEL                       STM32_I2C1SEL_PCLK1
 +#define STM32_I2C2SEL                       STM32_I2C2SEL_PCLK1
 +#define STM32_I2C3SEL                       STM32_I2C3SEL_PCLK1
 +#define STM32_I2C4SEL                       STM32_I2C4SEL_PCLK1
 +#define STM32_LPTIM1SEL                     STM32_LPTIM1SEL_PCLK1
 +#define STM32_CECSEL                        STM32_CECSEL_LSE
 +#define STM32_CK48MSEL                      STM32_CK48MSEL_PLL
 +#define STM32_SDMMCSEL                      STM32_SDMMCSEL_PLL48CLK
 +#define STM32_SRAM2_NOCACHE                 FALSE
 +
 +/*
 + * ADC driver system settings.
 + */
 +#define STM32_ADC_ADCPRE                    ADC_CCR_ADCPRE_DIV4
 +#define STM32_ADC_USE_ADC1                  FALSE
 +#define STM32_ADC_USE_ADC2                  FALSE
 +#define STM32_ADC_USE_ADC3                  FALSE
 +#define STM32_ADC_ADC1_DMA_STREAM           STM32_DMA_STREAM_ID(2, 4)
 +#define STM32_ADC_ADC2_DMA_STREAM           STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_ADC_ADC3_DMA_STREAM           STM32_DMA_STREAM_ID(2, 1)
 +#define STM32_ADC_ADC1_DMA_PRIORITY         2
 +#define STM32_ADC_ADC2_DMA_PRIORITY         2
 +#define STM32_ADC_ADC3_DMA_PRIORITY         2
 +#define STM32_ADC_IRQ_PRIORITY              6
 +#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY     6
 +
 +/*
 + * CAN driver system settings.
 + */
 +#define STM32_CAN_USE_CAN1                  FALSE
 +#define STM32_CAN_USE_CAN2                  FALSE
 +#define STM32_CAN_USE_CAN3                  FALSE
 +#define STM32_CAN_CAN1_IRQ_PRIORITY         11
 +#define STM32_CAN_CAN2_IRQ_PRIORITY         11
 +#define STM32_CAN_CAN3_IRQ_PRIORITY         11
 +
 +/*
 + * DAC driver system settings.
 + */
 +#define STM32_DAC_DUAL_MODE                 FALSE
 +#define STM32_DAC_USE_DAC1_CH1              FALSE
 +#define STM32_DAC_USE_DAC1_CH2              FALSE
 +#define STM32_DAC_DAC1_CH1_IRQ_PRIORITY     10
 +#define STM32_DAC_DAC1_CH2_IRQ_PRIORITY     10
 +#define STM32_DAC_DAC1_CH1_DMA_PRIORITY     2
 +#define STM32_DAC_DAC1_CH2_DMA_PRIORITY     2
 +#define STM32_DAC_DAC1_CH1_DMA_STREAM       STM32_DMA_STREAM_ID(1, 5)
 +#define STM32_DAC_DAC1_CH2_DMA_STREAM       STM32_DMA_STREAM_ID(1, 6)
 +
 +/*
 + * EXT driver system settings.
 + */
 +#define STM32_EXT_EXTI0_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI1_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI2_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI3_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI4_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI5_9_IRQ_PRIORITY      6
 +#define STM32_EXT_EXTI10_15_IRQ_PRIORITY    6
 +#define STM32_EXT_EXTI16_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI17_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI18_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI19_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI20_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI21_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI22_IRQ_PRIORITY       15
 +
 +/*
 + * GPT driver system settings.
 + */
 +#define STM32_GPT_USE_TIM1                  FALSE
 +#define STM32_GPT_USE_TIM2                  FALSE
 +#define STM32_GPT_USE_TIM3                  FALSE
 +#define STM32_GPT_USE_TIM4                  FALSE
 +#define STM32_GPT_USE_TIM5                  FALSE
 +#define STM32_GPT_USE_TIM6                  FALSE
 +#define STM32_GPT_USE_TIM7                  FALSE
 +#define STM32_GPT_USE_TIM8                  FALSE
 +#define STM32_GPT_USE_TIM9                  FALSE
 +#define STM32_GPT_USE_TIM11                 FALSE
 +#define STM32_GPT_USE_TIM12                 FALSE
 +#define STM32_GPT_USE_TIM14                 FALSE
 +#define STM32_GPT_TIM1_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM2_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM3_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM4_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM5_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM6_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM7_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM8_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM9_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM11_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM12_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM14_IRQ_PRIORITY        7
 +
 +/*
 + * I2C driver system settings.
 + */
 +#define STM32_I2C_USE_I2C1                  FALSE
 +#define STM32_I2C_USE_I2C2                  FALSE
 +#define STM32_I2C_USE_I2C3                  FALSE
 +#define STM32_I2C_USE_I2C4                  FALSE
 +#define STM32_I2C_BUSY_TIMEOUT              50
 +#define STM32_I2C_I2C1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_I2C_I2C1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_I2C_I2C2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_I2C_I2C3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_I2C_I2C4_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C4_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 5)
 +#define STM32_I2C_I2C1_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C2_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C3_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C4_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C1_DMA_PRIORITY         3
 +#define STM32_I2C_I2C2_DMA_PRIORITY         3
 +#define STM32_I2C_I2C3_DMA_PRIORITY         3
 +#define STM32_I2C_I2C4_DMA_PRIORITY         3
 +#define STM32_I2C_DMA_ERROR_HOOK(i2cp)      osalSysHalt("DMA failure")
 +
 +/*
 + * ICU driver system settings.
 + */
 +#define STM32_ICU_USE_TIM1                  FALSE
 +#define STM32_ICU_USE_TIM2                  FALSE
 +#define STM32_ICU_USE_TIM3                  FALSE
 +#define STM32_ICU_USE_TIM4                  FALSE
 +#define STM32_ICU_USE_TIM5                  FALSE
 +#define STM32_ICU_USE_TIM8                  FALSE
 +#define STM32_ICU_USE_TIM9                  FALSE
 +#define STM32_ICU_TIM1_IRQ_PRIORITY         7
 +#define STM32_ICU_TIM2_IRQ_PRIORITY         7
 +#define STM32_ICU_TIM3_IRQ_PRIORITY         7
 +#define STM32_ICU_TIM4_IRQ_PRIORITY         7
 +#define STM32_ICU_TIM5_IRQ_PRIORITY         7
 +#define STM32_ICU_TIM8_IRQ_PRIORITY         7
 +#define STM32_ICU_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * MAC driver system settings.
 + */
 +#define STM32_MAC_TRANSMIT_BUFFERS          2
 +#define STM32_MAC_RECEIVE_BUFFERS           4
 +#define STM32_MAC_BUFFERS_SIZE              1522
 +#define STM32_MAC_PHY_TIMEOUT               100
 +#define STM32_MAC_ETH1_CHANGE_PHY_STATE     TRUE
 +#define STM32_MAC_ETH1_IRQ_PRIORITY         13
 +#define STM32_MAC_IP_CHECKSUM_OFFLOAD       0
 +
 +/*
 + * PWM driver system settings.
 + */
 +#define STM32_PWM_USE_ADVANCED              FALSE
 +#define STM32_PWM_USE_TIM1                  FALSE
 +#define STM32_PWM_USE_TIM2                  FALSE
 +#define STM32_PWM_USE_TIM3                  FALSE
 +#define STM32_PWM_USE_TIM4                  FALSE
 +#define STM32_PWM_USE_TIM5                  FALSE
 +#define STM32_PWM_USE_TIM8                  FALSE
 +#define STM32_PWM_USE_TIM9                  FALSE
 +#define STM32_PWM_TIM1_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM2_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM3_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM4_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM5_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM8_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * SDC driver system settings.
 + */
 +#define STM32_SDC_USE_SDMMC1                TRUE
 +#define STM32_SDC_SDMMC_UNALIGNED_SUPPORT   TRUE
 +#define STM32_SDC_SDMMC_WRITE_TIMEOUT       1000
 +#define STM32_SDC_SDMMC_READ_TIMEOUT        1000
 +#define STM32_SDC_SDMMC_CLOCK_DELAY         10
 +#define STM32_SDC_SDMMC1_DMA_STREAM         STM32_DMA_STREAM_ID(2, 3)
 +#define STM32_SDC_SDMMC1_DMA_PRIORITY       3
 +#define STM32_SDC_SDMMC1_IRQ_PRIORITY       9
 +
 +/*
 + * SERIAL driver system settings.
 + */
 +#define STM32_SERIAL_USE_USART1             FALSE
 +#define STM32_SERIAL_USE_USART2             FALSE
 +#define STM32_SERIAL_USE_USART3             FALSE
 +#define STM32_SERIAL_USE_UART4              FALSE
 +#define STM32_SERIAL_USE_UART5              FALSE
 +#define STM32_SERIAL_USE_USART6             FALSE
 +#define STM32_SERIAL_USE_UART7              FALSE
 +#define STM32_SERIAL_USE_UART8              FALSE
 +#define STM32_SERIAL_USART1_PRIORITY        12
 +#define STM32_SERIAL_USART2_PRIORITY        12
 +#define STM32_SERIAL_USART3_PRIORITY        12
 +#define STM32_SERIAL_UART4_PRIORITY         12
 +#define STM32_SERIAL_UART5_PRIORITY         12
 +#define STM32_SERIAL_USART6_PRIORITY        12
 +#define STM32_SERIAL_UART7_PRIORITY         12
 +#define STM32_SERIAL_UART8_PRIORITY         12
 +
 +/*
 + * SPI driver system settings.
 + */
 +#define STM32_SPI_USE_SPI1                  FALSE
 +#define STM32_SPI_USE_SPI2                  FALSE
 +#define STM32_SPI_USE_SPI3                  FALSE
 +#define STM32_SPI_USE_SPI4                  FALSE
 +#define STM32_SPI_USE_SPI5                  FALSE
 +#define STM32_SPI_USE_SPI6                  FALSE
 +#define STM32_SPI_SPI1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 0)
 +#define STM32_SPI_SPI1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 3)
 +#define STM32_SPI_SPI2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_SPI_SPI2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_SPI_SPI3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_SPI_SPI3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_SPI_SPI4_RX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 0)
 +#define STM32_SPI_SPI4_TX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 1)
 +#define STM32_SPI_SPI5_RX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 3)
 +#define STM32_SPI_SPI5_TX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 4)
 +#define STM32_SPI_SPI6_RX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 6)
 +#define STM32_SPI_SPI6_TX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 5)
 +#define STM32_SPI_SPI1_DMA_PRIORITY         1
 +#define STM32_SPI_SPI2_DMA_PRIORITY         1
 +#define STM32_SPI_SPI3_DMA_PRIORITY         1
 +#define STM32_SPI_SPI4_DMA_PRIORITY         1
 +#define STM32_SPI_SPI5_DMA_PRIORITY         1
 +#define STM32_SPI_SPI6_DMA_PRIORITY         1
 +#define STM32_SPI_SPI1_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI2_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI3_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI4_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI5_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI6_IRQ_PRIORITY         10
 +#define STM32_SPI_DMA_ERROR_HOOK(spip)      osalSysHalt("DMA failure")
 +
 +/*
 + * ST driver system settings.
 + */
 +#define STM32_ST_IRQ_PRIORITY               8
 +#define STM32_ST_USE_TIMER                  2
 +
 +/*
 + * UART driver system settings.
 + */
 +#define STM32_UART_USE_USART1               FALSE
 +#define STM32_UART_USE_USART2               FALSE
 +#define STM32_UART_USE_USART3               FALSE
 +#define STM32_UART_USE_UART4                FALSE
 +#define STM32_UART_USE_UART5                FALSE
 +#define STM32_UART_USE_USART6               FALSE
 +#define STM32_UART_USE_UART7                FALSE
 +#define STM32_UART_USE_UART8                FALSE
 +#define STM32_UART_USART1_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 5)
 +#define STM32_UART_USART1_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART2_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 5)
 +#define STM32_UART_USART2_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_UART_USART3_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 1)
 +#define STM32_UART_USART3_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_UART_UART4_RX_DMA_STREAM      STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_UART_UART4_TX_DMA_STREAM      STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_UART_UART5_RX_DMA_STREAM      STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_UART_UART5_TX_DMA_STREAM      STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_UART_USART6_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_UART_USART6_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_UART7_RX_DMA_STREAM      STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_UART_UART7_TX_DMA_STREAM      STM32_DMA_STREAM_ID(1, 1)
 +#define STM32_UART_UART8_RX_DMA_STREAM      STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_UART_UART8_TX_DMA_STREAM      STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_UART_USART1_IRQ_PRIORITY      12
 +#define STM32_UART_USART2_IRQ_PRIORITY      12
 +#define STM32_UART_USART3_IRQ_PRIORITY      12
 +#define STM32_UART_UART4_IRQ_PRIORITY       12
 +#define STM32_UART_UART5_IRQ_PRIORITY       12
 +#define STM32_UART_USART6_IRQ_PRIORITY      12
 +#define STM32_UART_USART1_DMA_PRIORITY      0
 +#define STM32_UART_USART2_DMA_PRIORITY      0
 +#define STM32_UART_USART3_DMA_PRIORITY      0
 +#define STM32_UART_UART4_DMA_PRIORITY       0
 +#define STM32_UART_UART5_DMA_PRIORITY       0
 +#define STM32_UART_USART6_DMA_PRIORITY      0
 +#define STM32_UART_UART7_DMA_PRIORITY       0
 +#define STM32_UART_UART8_DMA_PRIORITY       0
 +#define STM32_UART_DMA_ERROR_HOOK(uartp)    osalSysHalt("DMA failure")
 +
 +/*
 + * USB driver system settings.
 + */
 +#define STM32_USB_USE_OTG1                  FALSE
 +#define STM32_USB_USE_OTG2                  TRUE
 +#define STM32_USB_OTG1_IRQ_PRIORITY         14
 +#define STM32_USB_OTG2_IRQ_PRIORITY         14
 +#define STM32_USB_OTG1_RX_FIFO_SIZE         512
 +#define STM32_USB_OTG2_RX_FIFO_SIZE         1024
 +#define STM32_USB_OTG_THREAD_PRIO           LOWPRIO
 +#define STM32_USB_OTG_THREAD_STACK_SIZE     128
 +#define STM32_USB_OTGFIFO_FILL_BASEPRI      0
 +
 +/*
 + * WDG driver system settings.
 + */
 +#define STM32_WDG_USE_IWDG                  FALSE
 +
 +#endif /* MCUCONF_H */
 diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg-stm32f746_discovery/portab.c b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg-stm32f746_discovery/portab.c new file mode 100644 index 000000000..a3fd920e9 --- /dev/null +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg-stm32f746_discovery/portab.c @@ -0,0 +1,60 @@ +/*
 +    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    portab.c
 + * @brief   Application portability module code.
 + *
 + * @addtogroup application_portability
 + * @{
 + */
 +
 +#include "hal.h"
 +#include "portab.h"
 +
 +/*===========================================================================*/
 +/* Module local definitions.                                                 */
 +/*===========================================================================*/
 +
 +/*===========================================================================*/
 +/* Module exported variables.                                                */
 +/*===========================================================================*/
 +
 +/*===========================================================================*/
 +/* Module local types.                                                       */
 +/*===========================================================================*/
 +
 +/*===========================================================================*/
 +/* Module local variables.                                                   */
 +/*===========================================================================*/
 +
 +/*===========================================================================*/
 +/* Module local functions.                                                   */
 +/*===========================================================================*/
 +
 +/*===========================================================================*/
 +/* Module exported functions.                                                */
 +/*===========================================================================*/
 +
 +void portab_setup(void) {
 +
 +  /*
 +   * Initialize board LED.
 +   */
 +  palSetLineMode(LINE_ARD_D13, PAL_MODE_OUTPUT_PUSHPULL);
 +}
 +
 +/** @} */
 diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg-stm32f746_discovery/portab.h b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg-stm32f746_discovery/portab.h new file mode 100644 index 000000000..56e84c198 --- /dev/null +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg-stm32f746_discovery/portab.h @@ -0,0 +1,72 @@ +/*
 +    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    portab.h
 + * @brief   Application portability macros and structures.
 + *
 + * @addtogroup application_portability
 + * @{
 + */
 +
 +#ifndef PORTAB_H
 +#define PORTAB_H
 +
 +/*===========================================================================*/
 +/* Module constants.                                                         */
 +/*===========================================================================*/
 +
 +#define PORTAB_USB1                 USBD2
 +
 +#define PORTAB_SDU1                 SDU2
 +
 +#define PORTAB_BLINK_LED1           LINE_ARD_D13
 +
 +/*===========================================================================*/
 +/* Module pre-compile time settings.                                         */
 +/*===========================================================================*/
 +
 +/*===========================================================================*/
 +/* Derived constants and error checks.                                       */
 +/*===========================================================================*/
 +
 +/*===========================================================================*/
 +/* Module data structures and types.                                         */
 +/*===========================================================================*/
 +
 +/*===========================================================================*/
 +/* Module macros.                                                            */
 +/*===========================================================================*/
 +
 +/*===========================================================================*/
 +/* External declarations.                                                    */
 +/*===========================================================================*/
 +
 +#ifdef __cplusplus
 +extern "C" {
 +#endif
 +  void portab_setup(void);
 +#ifdef __cplusplus
 +}
 +#endif
 +
 +/*===========================================================================*/
 +/* Module inline functions.                                                  */
 +/*===========================================================================*/
 +
 +#endif /* PORTAB_H */
 +
 +/** @} */
 diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg/ffconf.h b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg/ffconf.h new file mode 100644 index 000000000..18af4c94e --- /dev/null +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg/ffconf.h @@ -0,0 +1,272 @@ +/* CHIBIOS FIX */ +#include "ch.h" + +/*---------------------------------------------------------------------------/ +/  FatFs - Configuration file +/---------------------------------------------------------------------------*/ + +#define FFCONF_DEF 87030	/* Revision ID */ + +/*---------------------------------------------------------------------------/ +/ Function Configurations +/---------------------------------------------------------------------------*/ + +#define FF_FS_READONLY	0 +/* This option switches read-only configuration. (0:Read/Write or 1:Read-only) +/  Read-only configuration removes writing API functions, f_write(), f_sync(), +/  f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree() +/  and optional writing functions as well. */ + + +#define FF_FS_MINIMIZE	0 +/* This option defines minimization level to remove some basic API functions. +/ +/   0: All basic functions are enabled. +/   1: f_stat(), f_getfree(), f_unlink(), f_mkdir(), f_truncate() and f_rename() +/      are removed. +/   2: f_opendir(), f_readdir() and f_closedir() are removed in addition to 1. +/   3: f_lseek() function is removed in addition to 2. */ + + +#define FF_USE_STRFUNC	0 +/* This option switches string functions, f_gets(), f_putc(), f_puts() and f_printf(). +/ +/  0: Disable string functions. +/  1: Enable without LF-CRLF conversion. +/  2: Enable with LF-CRLF conversion. */ + + +#define FF_USE_FIND		0 +/* This option switches filtered directory read functions, f_findfirst() and +/  f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */ + + +#define FF_USE_MKFS		0 +/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */ + + +#define FF_USE_FASTSEEK	0 +/* This option switches fast seek function. (0:Disable or 1:Enable) */ + + +#define FF_USE_EXPAND	0 +/* This option switches f_expand function. (0:Disable or 1:Enable) */ + + +#define FF_USE_CHMOD	0 +/* This option switches attribute manipulation functions, f_chmod() and f_utime(). +/  (0:Disable or 1:Enable) Also FF_FS_READONLY needs to be 0 to enable this option. */ + + +#define FF_USE_LABEL	0 +/* This option switches volume label functions, f_getlabel() and f_setlabel(). +/  (0:Disable or 1:Enable) */ + + +#define FF_USE_FORWARD	0 +/* This option switches f_forward() function. (0:Disable or 1:Enable) */ + + +/*---------------------------------------------------------------------------/ +/ Locale and Namespace Configurations +/---------------------------------------------------------------------------*/ + +#define FF_CODE_PAGE      850 +/* This option specifies the OEM code page to be used on the target system. +/  Incorrect code page setting can cause a file open failure. +/ +/   437 - U.S. +/   720 - Arabic +/   737 - Greek +/   771 - KBL +/   775 - Baltic +/   850 - Latin 1 +/   852 - Latin 2 +/   855 - Cyrillic +/   857 - Turkish +/   860 - Portuguese +/   861 - Icelandic +/   862 - Hebrew +/   863 - Canadian French +/   864 - Arabic +/   865 - Nordic +/   866 - Russian +/   869 - Greek 2 +/   932 - Japanese (DBCS) +/   936 - Simplified Chinese (DBCS) +/   949 - Korean (DBCS) +/   950 - Traditional Chinese (DBCS) +/     0 - Include all code pages above and configured by f_setcp() +*/ + + +#define    FF_USE_LFN    3 +#define    FF_MAX_LFN    255 +/* The FF_USE_LFN switches the support for LFN (long file name). +/ +/   0: Disable LFN. FF_MAX_LFN has no effect. +/   1: Enable LFN with static working buffer on the BSS. Always NOT thread-safe. +/   2: Enable LFN with dynamic working buffer on the STACK. +/   3: Enable LFN with dynamic working buffer on the HEAP. +/ +/  To enable the LFN, Unicode handling functions (option/unicode.c) must be added +/  to the project. The working buffer occupies (FF_MAX_LFN + 1) * 2 bytes and +/  additional 608 bytes at exFAT enabled. FF_MAX_LFN can be in range from 12 to 255. +/  It should be set 255 to support full featured LFN operations. +/  When use stack for the working buffer, take care on stack overflow. When use heap +/  memory for the working buffer, memory management functions, ff_memalloc() and +/  ff_memfree(), must be added to the project. */ + + +#define FF_LFN_UNICODE	0 +/* This option switches character encoding on the API, 0:ANSI/OEM or 1:UTF-16, +/  when LFN is enabled. Also behavior of string I/O functions will be affected by +/  this option. When LFN is not enabled, this option has no effect. +*/ + + +#define FF_STRF_ENCODE	3 +/* When FF_LFN_UNICODE = 1 with LFN enabled, string I/O functions, f_gets(), +/  f_putc(), f_puts and f_printf() convert the character encoding in it. +/  This option selects assumption of character encoding ON THE FILE to be +/  read/written via those functions. +/ +/   0: ANSI/OEM +/   1: UTF-16LE +/   2: UTF-16BE +/   3: UTF-8 +*/ + + +#define FF_FS_RPATH		0 +/* This option configures support for relative path. +/ +/   0: Disable relative path and remove related functions. +/   1: Enable relative path. f_chdir() and f_chdrive() are available. +/   2: f_getcwd() function is available in addition to 1. +*/ + + +/*---------------------------------------------------------------------------/ +/ Drive/Volume Configurations +/---------------------------------------------------------------------------*/ + +#define FF_VOLUMES		1 +/* Number of volumes (logical drives) to be used. (1-10) */ + + +#define FF_STR_VOLUME_ID	0 +#define FF_VOLUME_STRS		"RAM","NAND","CF","SD","SD2","USB","USB2","USB3" +/* FF_STR_VOLUME_ID switches string support for volume ID. +/  When FF_STR_VOLUME_ID is set to 1, also pre-defined strings can be used as drive +/  number in the path name. FF_VOLUME_STRS defines the drive ID strings for each +/  logical drives. Number of items must be equal to FF_VOLUMES. Valid characters for +/  the drive ID strings are: A-Z and 0-9. */ + + +#define FF_MULTI_PARTITION	0 +/* This option switches support for multiple volumes on the physical drive. +/  By default (0), each logical drive number is bound to the same physical drive +/  number and only an FAT volume found on the physical drive will be mounted. +/  When this function is enabled (1), each logical drive number can be bound to +/  arbitrary physical drive and partition listed in the VolToPart[]. Also f_fdisk() +/  funciton will be available. */ + + +#define FF_MIN_SS		512 +#define FF_MAX_SS		512 +/* This set of options configures the range of sector size to be supported. (512, +/  1024, 2048 or 4096) Always set both 512 for most systems, generic memory card and +/  harddisk. But a larger value may be required for on-board flash memory and some +/  type of optical media. When FF_MAX_SS is larger than FF_MIN_SS, FatFs is configured +/  for variable sector size mode and disk_ioctl() function needs to implement +/  GET_SECTOR_SIZE command. */ + + +#define FF_USE_TRIM		0 +/* This option switches support for ATA-TRIM. (0:Disable or 1:Enable) +/  To enable Trim function, also CTRL_TRIM command should be implemented to the +/  disk_ioctl() function. */ + + +#define FF_FS_NOFSINFO	0 +/* If you need to know correct free space on the FAT32 volume, set bit 0 of this +/  option, and f_getfree() function at first time after volume mount will force +/  a full FAT scan. Bit 1 controls the use of last allocated cluster number. +/ +/  bit0=0: Use free cluster count in the FSINFO if available. +/  bit0=1: Do not trust free cluster count in the FSINFO. +/  bit1=0: Use last allocated cluster number in the FSINFO if available. +/  bit1=1: Do not trust last allocated cluster number in the FSINFO. +*/ + + + +/*---------------------------------------------------------------------------/ +/ System Configurations +/---------------------------------------------------------------------------*/ + +#define FF_FS_TINY		0 +/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny) +/  At the tiny configuration, size of file object (FIL) is shrinked FF_MAX_SS bytes. +/  Instead of private sector buffer eliminated from the file object, common sector +/  buffer in the filesystem object (FATFS) is used for the file data transfer. */ + + +#define FF_FS_EXFAT       1 +/* This option switches support for exFAT filesystem. (0:Disable or 1:Enable) +/  When enable exFAT, also LFN needs to be enabled. +/  Note that enabling exFAT discards ANSI C (C89) compatibility. */ + + +#define FF_FS_NORTC       1 +#define FF_NORTC_MON	5 +#define FF_NORTC_MDAY	1 +#define FF_NORTC_YEAR	2017 +/* The option FF_FS_NORTC switches timestamp functiton. If the system does not have +/  any RTC function or valid timestamp is not needed, set FF_FS_NORTC = 1 to disable +/  the timestamp function. All objects modified by FatFs will have a fixed timestamp +/  defined by FF_NORTC_MON, FF_NORTC_MDAY and FF_NORTC_YEAR in local time. +/  To enable timestamp function (FF_FS_NORTC = 0), get_fattime() function need to be +/  added to the project to read current time form real-time clock. FF_NORTC_MON, +/  FF_NORTC_MDAY and FF_NORTC_YEAR have no effect. +/  These options have no effect at read-only configuration (FF_FS_READONLY = 1). */ + + +#define FF_FS_LOCK		0 +/* The option FF_FS_LOCK switches file lock function to control duplicated file open +/  and illegal operation to open objects. This option must be 0 when FF_FS_READONLY +/  is 1. +/ +/  0:  Disable file lock function. To avoid volume corruption, application program +/      should avoid illegal open, remove and rename to the open objects. +/  >0: Enable file lock function. The value defines how many files/sub-directories +/      can be opened simultaneously under file lock control. Note that the file +/      lock control is independent of re-entrancy. */ + + +#define FF_FS_REENTRANT   0 +#define FF_FS_TIMEOUT     MS2ST(1000) +#define FF_SYNC_t         semaphore_t* +/* The option FF_FS_REENTRANT switches the re-entrancy (thread safe) of the FatFs +/  module itself. Note that regardless of this option, file access to different +/  volume is always re-entrant and volume control functions, f_mount(), f_mkfs() +/  and f_fdisk() function, are always not re-entrant. Only file/directory access +/  to the same volume is under control of this function. +/ +/   0: Disable re-entrancy. FF_FS_TIMEOUT and FF_SYNC_t have no effect. +/   1: Enable re-entrancy. Also user provided synchronization handlers, +/      ff_req_grant(), ff_rel_grant(), ff_del_syncobj() and ff_cre_syncobj() +/      function, must be added to the project. Samples are available in +/      option/syscall.c. +/ +/  The FF_FS_TIMEOUT defines timeout period in unit of time tick. +/  The FF_SYNC_t defines O/S dependent sync object type. e.g. HANDLE, ID, OS_EVENT*, +/  SemaphoreHandle_t and etc. A header file for O/S definitions needs to be +/  included somewhere in the scope of ff.h. */ + +/* #include <windows.h>	// O/S definitions  */ + + + +/*--- End of configuration options ---*/ diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg/httpd_opts.h b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg/httpd_opts.h new file mode 100644 index 000000000..340db15f6 --- /dev/null +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg/httpd_opts.h @@ -0,0 +1,323 @@ +/** + * @file + * HTTP server options list + */ + +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * 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. 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. The name of the author may not be used to endorse or promote products + *    derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels <adam@sics.se> + * + * This version of the file has been modified by Texas Instruments to offer + * simple server-side-include (SSI) and Common Gateway Interface (CGI) + * capability. + */ + +#ifndef LWIP_HDR_APPS_HTTPD_OPTS_H +#define LWIP_HDR_APPS_HTTPD_OPTS_H + +#include "lwip/opt.h" + +/** + * @defgroup httpd_opts Options + * @ingroup httpd + * @{ + */ + +/** Set this to 1 to support CGI (old style) */ +#if !defined LWIP_HTTPD_CGI || defined __DOXYGEN__ +#define LWIP_HTTPD_CGI            0 +#endif + +/** Set this to 1 to support CGI (new style) */ +#if !defined LWIP_HTTPD_CGI_SSI || defined __DOXYGEN__ +#define LWIP_HTTPD_CGI_SSI        0 +#endif + +/** Set this to 1 to support SSI (Server-Side-Includes) */ +#if !defined LWIP_HTTPD_SSI || defined __DOXYGEN__ +#define LWIP_HTTPD_SSI            0 +#endif + +/** Set this to 1 to implement an SSI tag handler callback that gets a const char* + * to the tag (instead of an index into a pre-registered array of known tags) */ +#if !defined LWIP_HTTPD_SSI_RAW || defined __DOXYGEN__ +#define LWIP_HTTPD_SSI_RAW        0 +#endif + +/** Set this to 1 to support HTTP POST */ +#if !defined LWIP_HTTPD_SUPPORT_POST || defined __DOXYGEN__ +#define LWIP_HTTPD_SUPPORT_POST   0 +#endif + +/* The maximum number of parameters that the CGI handler can be sent. */ +#if !defined LWIP_HTTPD_MAX_CGI_PARAMETERS || defined __DOXYGEN__ +#define LWIP_HTTPD_MAX_CGI_PARAMETERS 16 +#endif + +/** LWIP_HTTPD_SSI_MULTIPART==1: SSI handler function is called with 2 more + * arguments indicating a counter for insert string that are too long to be + * inserted at once: the SSI handler function must then set 'next_tag_part' + * which will be passed back to it in the next call. */ +#if !defined LWIP_HTTPD_SSI_MULTIPART || defined __DOXYGEN__ +#define LWIP_HTTPD_SSI_MULTIPART    0 +#endif + +/* The maximum length of the string comprising the tag name */ +#if !defined LWIP_HTTPD_MAX_TAG_NAME_LEN || defined __DOXYGEN__ +#define LWIP_HTTPD_MAX_TAG_NAME_LEN 8 +#endif + +/* The maximum length of string that can be returned to replace any given tag */ +#if !defined LWIP_HTTPD_MAX_TAG_INSERT_LEN || defined __DOXYGEN__ +#define LWIP_HTTPD_MAX_TAG_INSERT_LEN 192 +#endif + +#if !defined LWIP_HTTPD_POST_MANUAL_WND || defined __DOXYGEN__ +#define LWIP_HTTPD_POST_MANUAL_WND  0 +#endif + +/** This string is passed in the HTTP header as "Server: " */ +#if !defined HTTPD_SERVER_AGENT || defined __DOXYGEN__ +#define HTTPD_SERVER_AGENT "lwIP/" LWIP_VERSION_STRING " (http://savannah.nongnu.org/projects/lwip)" +#endif + +/** Set this to 1 if you want to include code that creates HTTP headers + * at runtime. Default is off: HTTP headers are then created statically + * by the makefsdata tool. Static headers mean smaller code size, but + * the (readonly) fsdata will grow a bit as every file includes the HTTP + * header. */ +#if !defined LWIP_HTTPD_DYNAMIC_HEADERS || defined __DOXYGEN__ +#define LWIP_HTTPD_DYNAMIC_HEADERS 0 +#endif + +#if !defined HTTPD_DEBUG || defined __DOXYGEN__ +#define HTTPD_DEBUG         LWIP_DBG_OFF +#endif + +/** Set this to 1 to use a memp pool for allocating  + * struct http_state instead of the heap. + */ +#if !defined HTTPD_USE_MEM_POOL || defined __DOXYGEN__ +#define HTTPD_USE_MEM_POOL  0 +#endif + +/** The server port for HTTPD to use */ +#if !defined HTTPD_SERVER_PORT || defined __DOXYGEN__ +#define HTTPD_SERVER_PORT                   80 +#endif + +/** Maximum retries before the connection is aborted/closed. + * - number of times pcb->poll is called -> default is 4*500ms = 2s; + * - reset when pcb->sent is called + */ +#if !defined HTTPD_MAX_RETRIES || defined __DOXYGEN__ +#define HTTPD_MAX_RETRIES                   4 +#endif + +/** The poll delay is X*500ms */ +#if !defined HTTPD_POLL_INTERVAL || defined __DOXYGEN__ +#define HTTPD_POLL_INTERVAL                 4 +#endif + +/** Priority for tcp pcbs created by HTTPD (very low by default). + *  Lower priorities get killed first when running out of memory. + */ +#if !defined HTTPD_TCP_PRIO || defined __DOXYGEN__ +#define HTTPD_TCP_PRIO                      TCP_PRIO_MIN +#endif + +/** Set this to 1 to enable timing each file sent */ +#if !defined LWIP_HTTPD_TIMING || defined __DOXYGEN__ +#define LWIP_HTTPD_TIMING                   0 +#endif +/** Set this to 1 to enable timing each file sent */ +#if !defined HTTPD_DEBUG_TIMING || defined __DOXYGEN__ +#define HTTPD_DEBUG_TIMING                  LWIP_DBG_OFF +#endif + +/** Set this to one to show error pages when parsing a request fails instead +    of simply closing the connection. */ +#if !defined LWIP_HTTPD_SUPPORT_EXTSTATUS || defined __DOXYGEN__ +#define LWIP_HTTPD_SUPPORT_EXTSTATUS        0 +#endif + +/** Set this to 0 to drop support for HTTP/0.9 clients (to save some bytes) */ +#if !defined LWIP_HTTPD_SUPPORT_V09 || defined __DOXYGEN__ +#define LWIP_HTTPD_SUPPORT_V09              1 +#endif + +/** Set this to 1 to enable HTTP/1.1 persistent connections. + * ATTENTION: If the generated file system includes HTTP headers, these must + * include the "Connection: keep-alive" header (pass argument "-11" to makefsdata). + */ +#if !defined LWIP_HTTPD_SUPPORT_11_KEEPALIVE || defined __DOXYGEN__ +#define LWIP_HTTPD_SUPPORT_11_KEEPALIVE     0 +#endif + +/** Set this to 1 to support HTTP request coming in in multiple packets/pbufs */ +#if !defined LWIP_HTTPD_SUPPORT_REQUESTLIST || defined __DOXYGEN__ +#define LWIP_HTTPD_SUPPORT_REQUESTLIST      1 +#endif + +#if LWIP_HTTPD_SUPPORT_REQUESTLIST +/** Number of rx pbufs to enqueue to parse an incoming request (up to the first +    newline) */ +#if !defined LWIP_HTTPD_REQ_QUEUELEN || defined __DOXYGEN__ +#define LWIP_HTTPD_REQ_QUEUELEN             5 +#endif + +/** Number of (TCP payload-) bytes (in pbufs) to enqueue to parse and incoming +    request (up to the first double-newline) */ +#if !defined LWIP_HTTPD_REQ_BUFSIZE || defined __DOXYGEN__ +#define LWIP_HTTPD_REQ_BUFSIZE              LWIP_HTTPD_MAX_REQ_LENGTH +#endif + +/** Defines the maximum length of a HTTP request line (up to the first CRLF, +    copied from pbuf into this a global buffer when pbuf- or packet-queues +    are received - otherwise the input pbuf is used directly) */ +#if !defined LWIP_HTTPD_MAX_REQ_LENGTH || defined __DOXYGEN__ +#define LWIP_HTTPD_MAX_REQ_LENGTH           LWIP_MIN(1023, (LWIP_HTTPD_REQ_QUEUELEN * PBUF_POOL_BUFSIZE)) +#endif +#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ + +/** This is the size of a static buffer used when URIs end with '/'. + * In this buffer, the directory requested is concatenated with all the + * configured default file names. + * Set to 0 to disable checking default filenames on non-root directories. + */ +#if !defined LWIP_HTTPD_MAX_REQUEST_URI_LEN || defined __DOXYGEN__ +#define LWIP_HTTPD_MAX_REQUEST_URI_LEN      63 +#endif + +/** Maximum length of the filename to send as response to a POST request, + * filled in by the application when a POST is finished. + */ +#if !defined LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN || defined __DOXYGEN__ +#define LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN 63 +#endif + +/** Set this to 0 to not send the SSI tag (default is on, so the tag will + * be sent in the HTML page */ +#if !defined LWIP_HTTPD_SSI_INCLUDE_TAG || defined __DOXYGEN__ +#define LWIP_HTTPD_SSI_INCLUDE_TAG           1 +#endif + +/** Set this to 1 to call tcp_abort when tcp_close fails with memory error. + * This can be used to prevent consuming all memory in situations where the + * HTTP server has low priority compared to other communication. */ +#if !defined LWIP_HTTPD_ABORT_ON_CLOSE_MEM_ERROR || defined __DOXYGEN__ +#define LWIP_HTTPD_ABORT_ON_CLOSE_MEM_ERROR  0 +#endif + +/** Set this to 1 to kill the oldest connection when running out of + * memory for 'struct http_state' or 'struct http_ssi_state'. + * ATTENTION: This puts all connections on a linked list, so may be kind of slow. + */ +#if !defined LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED || defined __DOXYGEN__ +#define LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED 0 +#endif + +/** Set this to 1 to send URIs without extension without headers + * (who uses this at all??) */ +#if !defined LWIP_HTTPD_OMIT_HEADER_FOR_EXTENSIONLESS_URI || defined __DOXYGEN__ +#define LWIP_HTTPD_OMIT_HEADER_FOR_EXTENSIONLESS_URI 0 +#endif + +/** Default: Tags are sent from struct http_state and are therefore volatile */ +#if !defined HTTP_IS_TAG_VOLATILE || defined __DOXYGEN__ +#define HTTP_IS_TAG_VOLATILE(ptr) TCP_WRITE_FLAG_COPY +#endif + +/* By default, the httpd is limited to send 2*pcb->mss to keep resource usage low +   when http is not an important protocol in the device. */ +#if !defined HTTPD_LIMIT_SENDING_TO_2MSS || defined __DOXYGEN__ +#define HTTPD_LIMIT_SENDING_TO_2MSS 1 +#endif + +/* Define this to a function that returns the maximum amount of data to enqueue. +   The function have this signature: u16_t fn(struct tcp_pcb* pcb); */ +#if !defined HTTPD_MAX_WRITE_LEN || defined __DOXYGEN__ +#if HTTPD_LIMIT_SENDING_TO_2MSS +#define HTTPD_MAX_WRITE_LEN(pcb)    (2 * tcp_mss(pcb)) +#endif +#endif + +/*------------------- FS OPTIONS -------------------*/ + +/** Set this to 1 and provide the functions: + * - "int fs_open_custom(struct fs_file *file, const char *name)" + *    Called first for every opened file to allow opening files + *    that are not included in fsdata(_custom).c + * - "void fs_close_custom(struct fs_file *file)" + *    Called to free resources allocated by fs_open_custom(). + */ +#if !defined LWIP_HTTPD_CUSTOM_FILES || defined __DOXYGEN__ +#define LWIP_HTTPD_CUSTOM_FILES       0 +#endif + +/** Set this to 1 to support fs_read() to dynamically read file data. + * Without this (default=off), only one-block files are supported, + * and the contents must be ready after fs_open(). + */ +#if !defined LWIP_HTTPD_DYNAMIC_FILE_READ || defined __DOXYGEN__ +#define LWIP_HTTPD_DYNAMIC_FILE_READ  0 +#endif + +/** Set this to 1 to include an application state argument per file + * that is opened. This allows to keep a state per connection/file. + */ +#if !defined LWIP_HTTPD_FILE_STATE || defined __DOXYGEN__ +#define LWIP_HTTPD_FILE_STATE         0 +#endif + +/** HTTPD_PRECALCULATED_CHECKSUM==1: include precompiled checksums for + * predefined (MSS-sized) chunks of the files to prevent having to calculate + * the checksums at runtime. */ +#if !defined HTTPD_PRECALCULATED_CHECKSUM || defined __DOXYGEN__ +#define HTTPD_PRECALCULATED_CHECKSUM  0 +#endif + +/** LWIP_HTTPD_FS_ASYNC_READ==1: support asynchronous read operations + * (fs_read_async returns FS_READ_DELAYED and calls a callback when finished). + */ +#if !defined LWIP_HTTPD_FS_ASYNC_READ || defined __DOXYGEN__ +#define LWIP_HTTPD_FS_ASYNC_READ      0 +#endif + +/** Set this to 1 to include "fsdata_custom.c" instead of "fsdata.c" for the + * file system (to prevent changing the file included in CVS) */ +#if !defined HTTPD_USE_CUSTOM_FSDATA || defined __DOXYGEN__ +#define HTTPD_USE_CUSTOM_FSDATA 0 +#endif + +/** + * @} + */ + +#endif /* LWIP_HDR_APPS_HTTPD_OPTS_H */ diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg/lwipopts.h b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg/lwipopts.h new file mode 100644 index 000000000..cebde0fc4 --- /dev/null +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/cfg/lwipopts.h @@ -0,0 +1,2127 @@ +/** + * @file + * + * lwIP Options Configuration + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * 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. 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. The name of the author may not be used to endorse or promote products + *    derived from this software without specific prior written permission.  + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + *  + * Author: Adam Dunkels <adam@sics.se> + * + */ +#ifndef __LWIPOPT_H__ +#define __LWIPOPT_H__ + + +/* +   ----------------------------------------------- +   ---------- Platform specific locking ---------- +   ----------------------------------------------- +*/ + +/** + * SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain + * critical regions during buffer allocation, deallocation and memory + * allocation and deallocation. + */ +#ifndef SYS_LIGHTWEIGHT_PROT +#define SYS_LIGHTWEIGHT_PROT            0 +#endif + +/**  + * NO_SYS==1: Provides VERY minimal functionality. Otherwise, + * use lwIP facilities. + */ +#ifndef NO_SYS +#define NO_SYS                          0 +#endif + +/** + * NO_SYS_NO_TIMERS==1: Drop support for sys_timeout when NO_SYS==1 + * Mainly for compatibility to old versions. + */ +#ifndef NO_SYS_NO_TIMERS +#define NO_SYS_NO_TIMERS                0 +#endif + +/** + * MEMCPY: override this if you have a faster implementation at hand than the + * one included in your C library + */ +#ifndef MEMCPY +#define MEMCPY(dst,src,len)             memcpy(dst,src,len) +#endif + +/** + * SMEMCPY: override this with care! Some compilers (e.g. gcc) can inline a + * call to memcpy() if the length is known at compile time and is small. + */ +#ifndef SMEMCPY +#define SMEMCPY(dst,src,len)            memcpy(dst,src,len) +#endif + +/* +   ------------------------------------ +   ---------- Memory options ---------- +   ------------------------------------ +*/ +/** + * MEM_LIBC_MALLOC==1: Use malloc/free/realloc provided by your C-library + * instead of the lwip internal allocator. Can save code size if you + * already use it. + */ +#ifndef MEM_LIBC_MALLOC +#define MEM_LIBC_MALLOC                 0 +#endif + +/** +* MEMP_MEM_MALLOC==1: Use mem_malloc/mem_free instead of the lwip pool allocator. +* Especially useful with MEM_LIBC_MALLOC but handle with care regarding execution +* speed and usage from interrupts! +*/ +#ifndef MEMP_MEM_MALLOC +#define MEMP_MEM_MALLOC                 0 +#endif + +/** + * MEM_ALIGNMENT: should be set to the alignment of the CPU + *    4 byte alignment -> #define MEM_ALIGNMENT 4 + *    2 byte alignment -> #define MEM_ALIGNMENT 2 + */ +#ifndef MEM_ALIGNMENT +#define MEM_ALIGNMENT                   4 +#endif + +/** + * MEM_SIZE: the size of the heap memory. If the application will send + * a lot of data that needs to be copied, this should be set high. + */ +#ifndef MEM_SIZE +#define MEM_SIZE                        1600 +#endif + +/** + * MEMP_SEPARATE_POOLS: if defined to 1, each pool is placed in its own array. + * This can be used to individually change the location of each pool. + * Default is one big array for all pools + */ +#ifndef MEMP_SEPARATE_POOLS +#define MEMP_SEPARATE_POOLS             0 +#endif + +/** + * MEMP_OVERFLOW_CHECK: memp overflow protection reserves a configurable + * amount of bytes before and after each memp element in every pool and fills + * it with a prominent default value. + *    MEMP_OVERFLOW_CHECK == 0 no checking + *    MEMP_OVERFLOW_CHECK == 1 checks each element when it is freed + *    MEMP_OVERFLOW_CHECK >= 2 checks each element in every pool every time + *      memp_malloc() or memp_free() is called (useful but slow!) + */ +#ifndef MEMP_OVERFLOW_CHECK +#define MEMP_OVERFLOW_CHECK             0 +#endif + +/** + * MEMP_SANITY_CHECK==1: run a sanity check after each memp_free() to make + * sure that there are no cycles in the linked lists. + */ +#ifndef MEMP_SANITY_CHECK +#define MEMP_SANITY_CHECK               0 +#endif + +/** + * MEM_USE_POOLS==1: Use an alternative to malloc() by allocating from a set + * of memory pools of various sizes. When mem_malloc is called, an element of + * the smallest pool that can provide the length needed is returned. + * To use this, MEMP_USE_CUSTOM_POOLS also has to be enabled. + */ +#ifndef MEM_USE_POOLS +#define MEM_USE_POOLS                   0 +#endif + +/** + * MEM_USE_POOLS_TRY_BIGGER_POOL==1: if one malloc-pool is empty, try the next + * bigger pool - WARNING: THIS MIGHT WASTE MEMORY but it can make a system more + * reliable. */ +#ifndef MEM_USE_POOLS_TRY_BIGGER_POOL +#define MEM_USE_POOLS_TRY_BIGGER_POOL   0 +#endif + +/** + * MEMP_USE_CUSTOM_POOLS==1: whether to include a user file lwippools.h + * that defines additional pools beyond the "standard" ones required + * by lwIP. If you set this to 1, you must have lwippools.h in your  + * inlude path somewhere.  + */ +#ifndef MEMP_USE_CUSTOM_POOLS +#define MEMP_USE_CUSTOM_POOLS           0 +#endif + +/** + * Set this to 1 if you want to free PBUF_RAM pbufs (or call mem_free()) from + * interrupt context (or another context that doesn't allow waiting for a + * semaphore). + * If set to 1, mem_malloc will be protected by a semaphore and SYS_ARCH_PROTECT, + * while mem_free will only use SYS_ARCH_PROTECT. mem_malloc SYS_ARCH_UNPROTECTs + * with each loop so that mem_free can run. + * + * ATTENTION: As you can see from the above description, this leads to dis-/ + * enabling interrupts often, which can be slow! Also, on low memory, mem_malloc + * can need longer. + * + * If you don't want that, at least for NO_SYS=0, you can still use the following + * functions to enqueue a deallocation call which then runs in the tcpip_thread + * context: + * - pbuf_free_callback(p); + * - mem_free_callback(m); + */ +#ifndef LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT +#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 0 +#endif + +/* +   ------------------------------------------------ +   ---------- Internal Memory Pool Sizes ---------- +   ------------------------------------------------ +*/ +/** + * MEMP_NUM_PBUF: the number of memp struct pbufs (used for PBUF_ROM and PBUF_REF). + * If the application sends a lot of data out of ROM (or other static memory), + * this should be set high. + */ +#ifndef MEMP_NUM_PBUF +#define MEMP_NUM_PBUF                   16 +#endif + +/** + * MEMP_NUM_RAW_PCB: Number of raw connection PCBs + * (requires the LWIP_RAW option) + */ +#ifndef MEMP_NUM_RAW_PCB +#define MEMP_NUM_RAW_PCB                4 +#endif + +/** + * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One + * per active UDP "connection". + * (requires the LWIP_UDP option) + */ +#ifndef MEMP_NUM_UDP_PCB +#define MEMP_NUM_UDP_PCB                4 +#endif + +/** + * MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections. + * (requires the LWIP_TCP option) + */ +#ifndef MEMP_NUM_TCP_PCB +#define MEMP_NUM_TCP_PCB                5 +#endif + +/** + * MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections. + * (requires the LWIP_TCP option) + */ +#ifndef MEMP_NUM_TCP_PCB_LISTEN +#define MEMP_NUM_TCP_PCB_LISTEN         8 +#endif + +/** + * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments. + * (requires the LWIP_TCP option) + */ +#ifndef MEMP_NUM_TCP_SEG +#define MEMP_NUM_TCP_SEG                16 +#endif + +/** + * MEMP_NUM_REASSDATA: the number of IP packets simultaneously queued for + * reassembly (whole packets, not fragments!) + */ +#ifndef MEMP_NUM_REASSDATA +#define MEMP_NUM_REASSDATA              5 +#endif + +/** + * MEMP_NUM_FRAG_PBUF: the number of IP fragments simultaneously sent + * (fragments, not whole packets!). + * This is only used with IP_FRAG_USES_STATIC_BUF==0 and + * LWIP_NETIF_TX_SINGLE_PBUF==0 and only has to be > 1 with DMA-enabled MACs + * where the packet is not yet sent when netif->output returns. + */ +#ifndef MEMP_NUM_FRAG_PBUF +#define MEMP_NUM_FRAG_PBUF              15 +#endif + +/** + * MEMP_NUM_ARP_QUEUE: the number of simulateously queued outgoing + * packets (pbufs) that are waiting for an ARP request (to resolve + * their destination address) to finish. + * (requires the ARP_QUEUEING option) + */ +#ifndef MEMP_NUM_ARP_QUEUE +#define MEMP_NUM_ARP_QUEUE              30 +#endif + +/** + * MEMP_NUM_IGMP_GROUP: The number of multicast groups whose network interfaces + * can be members et the same time (one per netif - allsystems group -, plus one + * per netif membership). + * (requires the LWIP_IGMP option) + */ +#ifndef MEMP_NUM_IGMP_GROUP +#define MEMP_NUM_IGMP_GROUP             8 +#endif + +/** + * MEMP_NUM_SYS_TIMEOUT: the number of simulateously active timeouts. + * (requires NO_SYS==0) + * The default number of timeouts is calculated here for all enabled modules. + * The formula expects settings to be either '0' or '1'. + */ +#ifndef MEMP_NUM_SYS_TIMEOUT +#define MEMP_NUM_SYS_TIMEOUT            (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_IGMP + LWIP_DNS + PPP_SUPPORT) +#endif + +/** + * MEMP_NUM_NETBUF: the number of struct netbufs. + * (only needed if you use the sequential API, like api_lib.c) + */ +#ifndef MEMP_NUM_NETBUF +#define MEMP_NUM_NETBUF                 2 +#endif + +/** + * MEMP_NUM_NETCONN: the number of struct netconns. + * (only needed if you use the sequential API, like api_lib.c) + */ +#ifndef MEMP_NUM_NETCONN +#define MEMP_NUM_NETCONN                4 +#endif + +/** + * MEMP_NUM_TCPIP_MSG_API: the number of struct tcpip_msg, which are used + * for callback/timeout API communication.  + * (only needed if you use tcpip.c) + */ +#ifndef MEMP_NUM_TCPIP_MSG_API +#define MEMP_NUM_TCPIP_MSG_API          8 +#endif + +/** + * MEMP_NUM_TCPIP_MSG_INPKT: the number of struct tcpip_msg, which are used + * for incoming packets.  + * (only needed if you use tcpip.c) + */ +#ifndef MEMP_NUM_TCPIP_MSG_INPKT +#define MEMP_NUM_TCPIP_MSG_INPKT        8 +#endif + +/** + * MEMP_NUM_SNMP_NODE: the number of leafs in the SNMP tree. + */ +#ifndef MEMP_NUM_SNMP_NODE +#define MEMP_NUM_SNMP_NODE              50 +#endif + +/** + * MEMP_NUM_SNMP_ROOTNODE: the number of branches in the SNMP tree. + * Every branch has one leaf (MEMP_NUM_SNMP_NODE) at least! + */ +#ifndef MEMP_NUM_SNMP_ROOTNODE +#define MEMP_NUM_SNMP_ROOTNODE          30 +#endif + +/** + * MEMP_NUM_SNMP_VARBIND: the number of concurrent requests (does not have to + * be changed normally) - 2 of these are used per request (1 for input, + * 1 for output) + */ +#ifndef MEMP_NUM_SNMP_VARBIND +#define MEMP_NUM_SNMP_VARBIND           2 +#endif + +/** + * MEMP_NUM_SNMP_VALUE: the number of OID or values concurrently used + * (does not have to be changed normally) - 3 of these are used per request + * (1 for the value read and 2 for OIDs - input and output) + */ +#ifndef MEMP_NUM_SNMP_VALUE +#define MEMP_NUM_SNMP_VALUE             3 +#endif + +/** + * MEMP_NUM_NETDB: the number of concurrently running lwip_addrinfo() calls + * (before freeing the corresponding memory using lwip_freeaddrinfo()). + */ +#ifndef MEMP_NUM_NETDB +#define MEMP_NUM_NETDB                  1 +#endif + +/** + * MEMP_NUM_LOCALHOSTLIST: the number of host entries in the local host list + * if DNS_LOCAL_HOSTLIST_IS_DYNAMIC==1. + */ +#ifndef MEMP_NUM_LOCALHOSTLIST +#define MEMP_NUM_LOCALHOSTLIST          1 +#endif + +/** + * MEMP_NUM_PPPOE_INTERFACES: the number of concurrently active PPPoE + * interfaces (only used with PPPOE_SUPPORT==1) + */ +#ifndef MEMP_NUM_PPPOE_INTERFACES +#define MEMP_NUM_PPPOE_INTERFACES       1 +#endif + +/** + * PBUF_POOL_SIZE: the number of buffers in the pbuf pool.  + */ +#ifndef PBUF_POOL_SIZE +#define PBUF_POOL_SIZE                  16 +#endif + +/* +   --------------------------------- +   ---------- ARP options ---------- +   --------------------------------- +*/ +/** + * LWIP_ARP==1: Enable ARP functionality. + */ +#ifndef LWIP_ARP +#define LWIP_ARP                        1 +#endif + +/** + * ARP_TABLE_SIZE: Number of active MAC-IP address pairs cached. + */ +#ifndef ARP_TABLE_SIZE +#define ARP_TABLE_SIZE                  10 +#endif + +/** + * ARP_QUEUEING==1: Multiple outgoing packets are queued during hardware address + * resolution. By default, only the most recent packet is queued per IP address. + * This is sufficient for most protocols and mainly reduces TCP connection + * startup time. Set this to 1 if you know your application sends more than one + * packet in a row to an IP address that is not in the ARP cache. + */ +#ifndef ARP_QUEUEING +#define ARP_QUEUEING                    0 +#endif + +/** + * ETHARP_TRUST_IP_MAC==1: Incoming IP packets cause the ARP table to be + * updated with the source MAC and IP addresses supplied in the packet. + * You may want to disable this if you do not trust LAN peers to have the + * correct addresses, or as a limited approach to attempt to handle + * spoofing. If disabled, lwIP will need to make a new ARP request if + * the peer is not already in the ARP table, adding a little latency. + * The peer *is* in the ARP table if it requested our address before. + * Also notice that this slows down input processing of every IP packet! + */ +#ifndef ETHARP_TRUST_IP_MAC +#define ETHARP_TRUST_IP_MAC             0 +#endif + +/** + * ETHARP_SUPPORT_VLAN==1: support receiving ethernet packets with VLAN header. + * Additionally, you can define ETHARP_VLAN_CHECK to an u16_t VLAN ID to check. + * If ETHARP_VLAN_CHECK is defined, only VLAN-traffic for this VLAN is accepted. + * If ETHARP_VLAN_CHECK is not defined, all traffic is accepted. + * Alternatively, define a function/define ETHARP_VLAN_CHECK_FN(eth_hdr, vlan) + * that returns 1 to accept a packet or 0 to drop a packet. + */ +#ifndef ETHARP_SUPPORT_VLAN +#define ETHARP_SUPPORT_VLAN             0 +#endif + +/** LWIP_ETHERNET==1: enable ethernet support for PPPoE even though ARP + * might be disabled + */ +#ifndef LWIP_ETHERNET +#define LWIP_ETHERNET                   (LWIP_ARP || PPPOE_SUPPORT) +#endif + +/** ETH_PAD_SIZE: number of bytes added before the ethernet header to ensure + * alignment of payload after that header. Since the header is 14 bytes long, + * without this padding e.g. addresses in the IP header will not be aligned + * on a 32-bit boundary, so setting this to 2 can speed up 32-bit-platforms. + */ +#ifndef ETH_PAD_SIZE +#define ETH_PAD_SIZE                    0 +#endif + +/** ETHARP_SUPPORT_STATIC_ENTRIES==1: enable code to support static ARP table + * entries (using etharp_add_static_entry/etharp_remove_static_entry). + */ +#ifndef ETHARP_SUPPORT_STATIC_ENTRIES +#define ETHARP_SUPPORT_STATIC_ENTRIES   0 +#endif + + +/* +   -------------------------------- +   ---------- IP options ---------- +   -------------------------------- +*/ +/** + * IP_FORWARD==1: Enables the ability to forward IP packets across network + * interfaces. If you are going to run lwIP on a device with only one network + * interface, define this to 0. + */ +#ifndef IP_FORWARD +#define IP_FORWARD                      0 +#endif + +/** + * IP_OPTIONS_ALLOWED: Defines the behavior for IP options. + *      IP_OPTIONS_ALLOWED==0: All packets with IP options are dropped. + *      IP_OPTIONS_ALLOWED==1: IP options are allowed (but not parsed). + */ +#ifndef IP_OPTIONS_ALLOWED +#define IP_OPTIONS_ALLOWED              1 +#endif + +/** + * IP_REASSEMBLY==1: Reassemble incoming fragmented IP packets. Note that + * this option does not affect outgoing packet sizes, which can be controlled + * via IP_FRAG. + */ +#ifndef IP_REASSEMBLY +#define IP_REASSEMBLY                   1 +#endif + +/** + * IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note + * that this option does not affect incoming packet sizes, which can be + * controlled via IP_REASSEMBLY. + */ +#ifndef IP_FRAG +#define IP_FRAG                         1 +#endif + +/** + * IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally) + * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived + * in this time, the whole packet is discarded. + */ +#ifndef IP_REASS_MAXAGE +#define IP_REASS_MAXAGE                 3 +#endif + +/** + * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled. + * Since the received pbufs are enqueued, be sure to configure + * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive + * packets even if the maximum amount of fragments is enqueued for reassembly! + */ +#ifndef IP_REASS_MAX_PBUFS +#define IP_REASS_MAX_PBUFS              10 +#endif + +/** + * IP_FRAG_USES_STATIC_BUF==1: Use a static MTU-sized buffer for IP + * fragmentation. Otherwise pbufs are allocated and reference the original + * packet data to be fragmented (or with LWIP_NETIF_TX_SINGLE_PBUF==1, + * new PBUF_RAM pbufs are used for fragments). + * ATTENTION: IP_FRAG_USES_STATIC_BUF==1 may not be used for DMA-enabled MACs! + */ +#ifndef IP_FRAG_USES_STATIC_BUF +#define IP_FRAG_USES_STATIC_BUF         0 +#endif + +/** + * IP_FRAG_MAX_MTU: Assumed max MTU on any interface for IP frag buffer + * (requires IP_FRAG_USES_STATIC_BUF==1) + */ +#if IP_FRAG_USES_STATIC_BUF && !defined(IP_FRAG_MAX_MTU) +#define IP_FRAG_MAX_MTU                 1500 +#endif + +/** + * IP_DEFAULT_TTL: Default value for Time-To-Live used by transport layers. + */ +#ifndef IP_DEFAULT_TTL +#define IP_DEFAULT_TTL                  255 +#endif + +/** + * IP_SOF_BROADCAST=1: Use the SOF_BROADCAST field to enable broadcast + * filter per pcb on udp and raw send operations. To enable broadcast filter + * on recv operations, you also have to set IP_SOF_BROADCAST_RECV=1. + */ +#ifndef IP_SOF_BROADCAST +#define IP_SOF_BROADCAST                0 +#endif + +/** + * IP_SOF_BROADCAST_RECV (requires IP_SOF_BROADCAST=1) enable the broadcast + * filter on recv operations. + */ +#ifndef IP_SOF_BROADCAST_RECV +#define IP_SOF_BROADCAST_RECV           0 +#endif + +/** + * IP_FORWARD_ALLOW_TX_ON_RX_NETIF==1: allow ip_forward() to send packets back + * out on the netif where it was received. This should only be used for + * wireless networks. + * ATTENTION: When this is 1, make sure your netif driver correctly marks incoming + * link-layer-broadcast/multicast packets as such using the corresponding pbuf flags! + */ +#ifndef IP_FORWARD_ALLOW_TX_ON_RX_NETIF +#define IP_FORWARD_ALLOW_TX_ON_RX_NETIF 0 +#endif + +/** + * LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS==1: randomize the local port for the first + * local TCP/UDP pcb (default==0). This can prevent creating predictable port + * numbers after booting a device. + */ +#ifndef LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS +#define LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS 0 +#endif + +/* +   ---------------------------------- +   ---------- ICMP options ---------- +   ---------------------------------- +*/ +/** + * LWIP_ICMP==1: Enable ICMP module inside the IP stack. + * Be careful, disable that make your product non-compliant to RFC1122 + */ +#ifndef LWIP_ICMP +#define LWIP_ICMP                       1 +#endif + +/** + * ICMP_TTL: Default value for Time-To-Live used by ICMP packets. + */ +#ifndef ICMP_TTL +#define ICMP_TTL                       (IP_DEFAULT_TTL) +#endif + +/** + * LWIP_BROADCAST_PING==1: respond to broadcast pings (default is unicast only) + */ +#ifndef LWIP_BROADCAST_PING +#define LWIP_BROADCAST_PING             0 +#endif + +/** + * LWIP_MULTICAST_PING==1: respond to multicast pings (default is unicast only) + */ +#ifndef LWIP_MULTICAST_PING +#define LWIP_MULTICAST_PING             0 +#endif + +/* +   --------------------------------- +   ---------- RAW options ---------- +   --------------------------------- +*/ +/** + * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. + */ +#ifndef LWIP_RAW +#define LWIP_RAW                        1 +#endif + +/** + * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. + */ +#ifndef RAW_TTL +#define RAW_TTL                        (IP_DEFAULT_TTL) +#endif + +/* +   ---------------------------------- +   ---------- DHCP options ---------- +   ---------------------------------- +*/ +/** + * LWIP_DHCP==1: Enable DHCP module. + */ +#ifndef LWIP_DHCP +#define LWIP_DHCP                       0 +#endif + +/** + * DHCP_DOES_ARP_CHECK==1: Do an ARP check on the offered address. + */ +#ifndef DHCP_DOES_ARP_CHECK +#define DHCP_DOES_ARP_CHECK             ((LWIP_DHCP) && (LWIP_ARP)) +#endif + +/* +   ------------------------------------ +   ---------- AUTOIP options ---------- +   ------------------------------------ +*/ +/** + * LWIP_AUTOIP==1: Enable AUTOIP module. + */ +#ifndef LWIP_AUTOIP +#define LWIP_AUTOIP                     0 +#endif + +/** + * LWIP_DHCP_AUTOIP_COOP==1: Allow DHCP and AUTOIP to be both enabled on + * the same interface at the same time. + */ +#ifndef LWIP_DHCP_AUTOIP_COOP +#define LWIP_DHCP_AUTOIP_COOP           0 +#endif + +/** + * LWIP_DHCP_AUTOIP_COOP_TRIES: Set to the number of DHCP DISCOVER probes + * that should be sent before falling back on AUTOIP. This can be set + * as low as 1 to get an AutoIP address very quickly, but you should + * be prepared to handle a changing IP address when DHCP overrides + * AutoIP. + */ +#ifndef LWIP_DHCP_AUTOIP_COOP_TRIES +#define LWIP_DHCP_AUTOIP_COOP_TRIES     9 +#endif + +/* +   ---------------------------------- +   ---------- SNMP options ---------- +   ---------------------------------- +*/ +/** + * LWIP_SNMP==1: Turn on SNMP module. UDP must be available for SNMP + * transport. + */ +#ifndef LWIP_SNMP +#define LWIP_SNMP                       0 +#endif + +/** + * SNMP_CONCURRENT_REQUESTS: Number of concurrent requests the module will + * allow. At least one request buffer is required. + * Does not have to be changed unless external MIBs answer request asynchronously + */ +#ifndef SNMP_CONCURRENT_REQUESTS +#define SNMP_CONCURRENT_REQUESTS        1 +#endif + +/** + * SNMP_TRAP_DESTINATIONS: Number of trap destinations. At least one trap + * destination is required + */ +#ifndef SNMP_TRAP_DESTINATIONS +#define SNMP_TRAP_DESTINATIONS          1 +#endif + +/** + * SNMP_PRIVATE_MIB:  + * When using a private MIB, you have to create a file 'private_mib.h' that contains + * a 'struct mib_array_node mib_private' which contains your MIB. + */ +#ifndef SNMP_PRIVATE_MIB +#define SNMP_PRIVATE_MIB                0 +#endif + +/** + * Only allow SNMP write actions that are 'safe' (e.g. disabeling netifs is not + * a safe action and disabled when SNMP_SAFE_REQUESTS = 1). + * Unsafe requests are disabled by default! + */ +#ifndef SNMP_SAFE_REQUESTS +#define SNMP_SAFE_REQUESTS              1 +#endif + +/** + * The maximum length of strings used. This affects the size of + * MEMP_SNMP_VALUE elements. + */ +#ifndef SNMP_MAX_OCTET_STRING_LEN +#define SNMP_MAX_OCTET_STRING_LEN       127 +#endif + +/** + * The maximum depth of the SNMP tree. + * With private MIBs enabled, this depends on your MIB! + * This affects the size of MEMP_SNMP_VALUE elements. + */ +#ifndef SNMP_MAX_TREE_DEPTH +#define SNMP_MAX_TREE_DEPTH             15 +#endif + +/** + * The size of the MEMP_SNMP_VALUE elements, normally calculated from + * SNMP_MAX_OCTET_STRING_LEN and SNMP_MAX_TREE_DEPTH. + */ +#ifndef SNMP_MAX_VALUE_SIZE +#define SNMP_MAX_VALUE_SIZE             LWIP_MAX((SNMP_MAX_OCTET_STRING_LEN)+1, sizeof(s32_t)*(SNMP_MAX_TREE_DEPTH)) +#endif + +/* +   ---------------------------------- +   ---------- IGMP options ---------- +   ---------------------------------- +*/ +/** + * LWIP_IGMP==1: Turn on IGMP module.  + */ +#ifndef LWIP_IGMP +#define LWIP_IGMP                       0 +#endif + +/* +   ---------------------------------- +   ---------- DNS options ----------- +   ---------------------------------- +*/ +/** + * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS + * transport. + */ +#ifndef LWIP_DNS +#define LWIP_DNS                        0 +#endif + +/** DNS maximum number of entries to maintain locally. */ +#ifndef DNS_TABLE_SIZE +#define DNS_TABLE_SIZE                  4 +#endif + +/** DNS maximum host name length supported in the name table. */ +#ifndef DNS_MAX_NAME_LENGTH +#define DNS_MAX_NAME_LENGTH             256 +#endif + +/** The maximum of DNS servers */ +#ifndef DNS_MAX_SERVERS +#define DNS_MAX_SERVERS                 2 +#endif + +/** DNS do a name checking between the query and the response. */ +#ifndef DNS_DOES_NAME_CHECK +#define DNS_DOES_NAME_CHECK             1 +#endif + +/** DNS message max. size. Default value is RFC compliant. */ +#ifndef DNS_MSG_SIZE +#define DNS_MSG_SIZE                    512 +#endif + +/** DNS_LOCAL_HOSTLIST: Implements a local host-to-address list. If enabled, + *  you have to define + *    #define DNS_LOCAL_HOSTLIST_INIT {{"host1", 0x123}, {"host2", 0x234}} + *  (an array of structs name/address, where address is an u32_t in network + *  byte order). + * + *  Instead, you can also use an external function: + *  #define DNS_LOOKUP_LOCAL_EXTERN(x) extern u32_t my_lookup_function(const char *name) + *  that returns the IP address or INADDR_NONE if not found. + */ +#ifndef DNS_LOCAL_HOSTLIST +#define DNS_LOCAL_HOSTLIST              0 +#endif /* DNS_LOCAL_HOSTLIST */ + +/** If this is turned on, the local host-list can be dynamically changed + *  at runtime. */ +#ifndef DNS_LOCAL_HOSTLIST_IS_DYNAMIC +#define DNS_LOCAL_HOSTLIST_IS_DYNAMIC   0 +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + +/* +   --------------------------------- +   ---------- UDP options ---------- +   --------------------------------- +*/ +/** + * LWIP_UDP==1: Turn on UDP. + */ +#ifndef LWIP_UDP +#define LWIP_UDP                        1 +#endif + +/** + * LWIP_UDPLITE==1: Turn on UDP-Lite. (Requires LWIP_UDP) + */ +#ifndef LWIP_UDPLITE +#define LWIP_UDPLITE                    0 +#endif + +/** + * UDP_TTL: Default Time-To-Live value. + */ +#ifndef UDP_TTL +#define UDP_TTL                         (IP_DEFAULT_TTL) +#endif + +/** + * LWIP_NETBUF_RECVINFO==1: append destination addr and port to every netbuf. + */ +#ifndef LWIP_NETBUF_RECVINFO +#define LWIP_NETBUF_RECVINFO            0 +#endif + +/* +   --------------------------------- +   ---------- TCP options ---------- +   --------------------------------- +*/ +/** + * LWIP_TCP==1: Turn on TCP. + */ +#ifndef LWIP_TCP +#define LWIP_TCP                        1 +#endif + +/** + * TCP_TTL: Default Time-To-Live value. + */ +#ifndef TCP_TTL +#define TCP_TTL                         (IP_DEFAULT_TTL) +#endif + +/** + * TCP_WND: The size of a TCP window.  This must be at least  + * (2 * TCP_MSS) for things to work well + */ +#ifndef TCP_WND +#define TCP_WND                         (4 * TCP_MSS) +#endif  + +/** + * TCP_MAXRTX: Maximum number of retransmissions of data segments. + */ +#ifndef TCP_MAXRTX +#define TCP_MAXRTX                      12 +#endif + +/** + * TCP_SYNMAXRTX: Maximum number of retransmissions of SYN segments. + */ +#ifndef TCP_SYNMAXRTX +#define TCP_SYNMAXRTX                   6 +#endif + +/** + * TCP_QUEUE_OOSEQ==1: TCP will queue segments that arrive out of order. + * Define to 0 if your device is low on memory. + */ +#ifndef TCP_QUEUE_OOSEQ +#define TCP_QUEUE_OOSEQ                 (LWIP_TCP) +#endif + +/** + * TCP_MSS: TCP Maximum segment size. (default is 536, a conservative default, + * you might want to increase this.) + * For the receive side, this MSS is advertised to the remote side + * when opening a connection. For the transmit size, this MSS sets + * an upper limit on the MSS advertised by the remote host. + */ +#ifndef TCP_MSS +#define TCP_MSS                         1480 +#endif + +/** + * TCP_CALCULATE_EFF_SEND_MSS: "The maximum size of a segment that TCP really + * sends, the 'effective send MSS,' MUST be the smaller of the send MSS (which + * reflects the available reassembly buffer size at the remote host) and the + * largest size permitted by the IP layer" (RFC 1122) + * Setting this to 1 enables code that checks TCP_MSS against the MTU of the + * netif used for a connection and limits the MSS if it would be too big otherwise. + */ +#ifndef TCP_CALCULATE_EFF_SEND_MSS +#define TCP_CALCULATE_EFF_SEND_MSS      1 +#endif + + +/** + * TCP_SND_BUF: TCP sender buffer space (bytes). + * To achieve good performance, this should be at least 2 * TCP_MSS. + */ +#ifndef TCP_SND_BUF +#define TCP_SND_BUF                     (2 * TCP_MSS) +#endif + +/** + * TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least + * as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. + */ +#ifndef TCP_SND_QUEUELEN +#define TCP_SND_QUEUELEN                ((4 * (TCP_SND_BUF) + (TCP_MSS - 1))/(TCP_MSS)) +#endif + +/** + * TCP_SNDLOWAT: TCP writable space (bytes). This must be less than + * TCP_SND_BUF. It is the amount of space which must be available in the + * TCP snd_buf for select to return writable (combined with TCP_SNDQUEUELOWAT). + */ +#ifndef TCP_SNDLOWAT +#define TCP_SNDLOWAT                    LWIP_MIN(LWIP_MAX(((TCP_SND_BUF)/2), (2 * TCP_MSS) + 1), (TCP_SND_BUF) - 1) +#endif + +/** + * TCP_SNDQUEUELOWAT: TCP writable bufs (pbuf count). This must be less + * than TCP_SND_QUEUELEN. If the number of pbufs queued on a pcb drops below + * this number, select returns writable (combined with TCP_SNDLOWAT). + */ +#ifndef TCP_SNDQUEUELOWAT +#define TCP_SNDQUEUELOWAT               LWIP_MAX(((TCP_SND_QUEUELEN)/2), 5) +#endif + +/** + * TCP_OOSEQ_MAX_BYTES: The maximum number of bytes queued on ooseq per pcb. + * Default is 0 (no limit). Only valid for TCP_QUEUE_OOSEQ==0. + */ +#ifndef TCP_OOSEQ_MAX_BYTES +#define TCP_OOSEQ_MAX_BYTES             0 +#endif + +/** + * TCP_OOSEQ_MAX_PBUFS: The maximum number of pbufs queued on ooseq per pcb. + * Default is 0 (no limit). Only valid for TCP_QUEUE_OOSEQ==0. + */ +#ifndef TCP_OOSEQ_MAX_PBUFS +#define TCP_OOSEQ_MAX_PBUFS             0 +#endif + +/** + * TCP_LISTEN_BACKLOG: Enable the backlog option for tcp listen pcb. + */ +#ifndef TCP_LISTEN_BACKLOG +#define TCP_LISTEN_BACKLOG              0 +#endif + +/** + * The maximum allowed backlog for TCP listen netconns. + * This backlog is used unless another is explicitly specified. + * 0xff is the maximum (u8_t). + */ +#ifndef TCP_DEFAULT_LISTEN_BACKLOG +#define TCP_DEFAULT_LISTEN_BACKLOG      0xff +#endif + +/** + * TCP_OVERSIZE: The maximum number of bytes that tcp_write may + * allocate ahead of time in an attempt to create shorter pbuf chains + * for transmission. The meaningful range is 0 to TCP_MSS. Some + * suggested values are: + * + * 0:         Disable oversized allocation. Each tcp_write() allocates a new +              pbuf (old behaviour). + * 1:         Allocate size-aligned pbufs with minimal excess. Use this if your + *            scatter-gather DMA requires aligned fragments. + * 128:       Limit the pbuf/memory overhead to 20%. + * TCP_MSS:   Try to create unfragmented TCP packets. + * TCP_MSS/4: Try to create 4 fragments or less per TCP packet. + */ +#ifndef TCP_OVERSIZE +#define TCP_OVERSIZE                    TCP_MSS +#endif + +/** + * LWIP_TCP_TIMESTAMPS==1: support the TCP timestamp option. + */ +#ifndef LWIP_TCP_TIMESTAMPS +#define LWIP_TCP_TIMESTAMPS             0 +#endif + +/** + * TCP_WND_UPDATE_THRESHOLD: difference in window to trigger an + * explicit window update + */ +#ifndef TCP_WND_UPDATE_THRESHOLD +#define TCP_WND_UPDATE_THRESHOLD   (TCP_WND / 4) +#endif + +/** + * LWIP_EVENT_API and LWIP_CALLBACK_API: Only one of these should be set to 1. + *     LWIP_EVENT_API==1: The user defines lwip_tcp_event() to receive all + *         events (accept, sent, etc) that happen in the system. + *     LWIP_CALLBACK_API==1: The PCB callback function is called directly + *         for the event. This is the default. + */ +#if !defined(LWIP_EVENT_API) && !defined(LWIP_CALLBACK_API) +#define LWIP_EVENT_API                  0 +#define LWIP_CALLBACK_API               1 +#endif + + +/* +   ---------------------------------- +   ---------- Pbuf options ---------- +   ---------------------------------- +*/ +/** + * PBUF_LINK_HLEN: the number of bytes that should be allocated for a + * link level header. The default is 14, the standard value for + * Ethernet. + */ +#ifndef PBUF_LINK_HLEN +#define PBUF_LINK_HLEN                  (14 + ETH_PAD_SIZE) +#endif + +/** + * PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. The default is + * designed to accomodate single full size TCP frame in one pbuf, including + * TCP_MSS, IP header, and link header. + */ +#ifndef PBUF_POOL_BUFSIZE +#define PBUF_POOL_BUFSIZE               LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN) +#endif + +/* +   ------------------------------------------------ +   ---------- Network Interfaces options ---------- +   ------------------------------------------------ +*/ +/** + * LWIP_NETIF_HOSTNAME==1: use DHCP_OPTION_HOSTNAME with netif's hostname + * field. + */ +#ifndef LWIP_NETIF_HOSTNAME +#define LWIP_NETIF_HOSTNAME             0 +#endif + +/** + * LWIP_NETIF_API==1: Support netif api (in netifapi.c) + */ +#ifndef LWIP_NETIF_API +#define LWIP_NETIF_API                  0 +#endif + +/** + * LWIP_NETIF_STATUS_CALLBACK==1: Support a callback function whenever an interface + * changes its up/down status (i.e., due to DHCP IP acquistion) + */ +#ifndef LWIP_NETIF_STATUS_CALLBACK +#define LWIP_NETIF_STATUS_CALLBACK      0 +#endif + +/** + * LWIP_NETIF_LINK_CALLBACK==1: Support a callback function from an interface + * whenever the link changes (i.e., link down) + */ +#ifndef LWIP_NETIF_LINK_CALLBACK +#define LWIP_NETIF_LINK_CALLBACK        0 +#endif + +/** + * LWIP_NETIF_REMOVE_CALLBACK==1: Support a callback function that is called + * when a netif has been removed + */ +#ifndef LWIP_NETIF_REMOVE_CALLBACK +#define LWIP_NETIF_REMOVE_CALLBACK      0 +#endif + +/** + * LWIP_NETIF_HWADDRHINT==1: Cache link-layer-address hints (e.g. table + * indices) in struct netif. TCP and UDP can make use of this to prevent + * scanning the ARP table for every sent packet. While this is faster for big + * ARP tables or many concurrent connections, it might be counterproductive + * if you have a tiny ARP table or if there never are concurrent connections. + */ +#ifndef LWIP_NETIF_HWADDRHINT +#define LWIP_NETIF_HWADDRHINT           0 +#endif + +/** + * LWIP_NETIF_LOOPBACK==1: Support sending packets with a destination IP + * address equal to the netif IP address, looping them back up the stack. + */ +#ifndef LWIP_NETIF_LOOPBACK +#define LWIP_NETIF_LOOPBACK             0 +#endif + +/** + * LWIP_LOOPBACK_MAX_PBUFS: Maximum number of pbufs on queue for loopback + * sending for each netif (0 = disabled) + */ +#ifndef LWIP_LOOPBACK_MAX_PBUFS +#define LWIP_LOOPBACK_MAX_PBUFS         0 +#endif + +/** + * LWIP_NETIF_LOOPBACK_MULTITHREADING: Indicates whether threading is enabled in + * the system, as netifs must change how they behave depending on this setting + * for the LWIP_NETIF_LOOPBACK option to work. + * Setting this is needed to avoid reentering non-reentrant functions like + * tcp_input(). + *    LWIP_NETIF_LOOPBACK_MULTITHREADING==1: Indicates that the user is using a + *       multithreaded environment like tcpip.c. In this case, netif->input() + *       is called directly. + *    LWIP_NETIF_LOOPBACK_MULTITHREADING==0: Indicates a polling (or NO_SYS) setup. + *       The packets are put on a list and netif_poll() must be called in + *       the main application loop. + */ +#ifndef LWIP_NETIF_LOOPBACK_MULTITHREADING +#define LWIP_NETIF_LOOPBACK_MULTITHREADING    (!NO_SYS) +#endif + +/** + * LWIP_NETIF_TX_SINGLE_PBUF: if this is set to 1, lwIP tries to put all data + * to be sent into one single pbuf. This is for compatibility with DMA-enabled + * MACs that do not support scatter-gather. + * Beware that this might involve CPU-memcpy before transmitting that would not + * be needed without this flag! Use this only if you need to! + * + * @todo: TCP and IP-frag do not work with this, yet: + */ +#ifndef LWIP_NETIF_TX_SINGLE_PBUF +#define LWIP_NETIF_TX_SINGLE_PBUF             0 +#endif /* LWIP_NETIF_TX_SINGLE_PBUF */ + +/* +   ------------------------------------ +   ---------- LOOPIF options ---------- +   ------------------------------------ +*/ +/** + * LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1) and loopif.c + */ +#ifndef LWIP_HAVE_LOOPIF +#define LWIP_HAVE_LOOPIF                0 +#endif + +/* +   ------------------------------------ +   ---------- SLIPIF options ---------- +   ------------------------------------ +*/ +/** + * LWIP_HAVE_SLIPIF==1: Support slip interface and slipif.c + */ +#ifndef LWIP_HAVE_SLIPIF +#define LWIP_HAVE_SLIPIF                0 +#endif + +/* +   ------------------------------------ +   ---------- Thread options ---------- +   ------------------------------------ +*/ +/** + * TCPIP_THREAD_NAME: The name assigned to the main tcpip thread. + */ +#ifndef TCPIP_THREAD_NAME +#define TCPIP_THREAD_NAME              "tcpip_thread" +#endif + +/** + * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef TCPIP_THREAD_STACKSIZE +#define TCPIP_THREAD_STACKSIZE          1024 +#endif + +/** + * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef TCPIP_THREAD_PRIO +#define TCPIP_THREAD_PRIO               (LOWPRIO + 1) +#endif + +/** + * TCPIP_MBOX_SIZE: The mailbox size for the tcpip thread messages + * The queue size value itself is platform-dependent, but is passed to + * sys_mbox_new() when tcpip_init is called. + */ +#ifndef TCPIP_MBOX_SIZE +#define TCPIP_MBOX_SIZE                 MEMP_NUM_PBUF +#endif + +/** + * SLIPIF_THREAD_NAME: The name assigned to the slipif_loop thread. + */ +#ifndef SLIPIF_THREAD_NAME +#define SLIPIF_THREAD_NAME             "slipif_loop" +#endif + +/** + * SLIP_THREAD_STACKSIZE: The stack size used by the slipif_loop thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef SLIPIF_THREAD_STACKSIZE +#define SLIPIF_THREAD_STACKSIZE         1024 +#endif + +/** + * SLIPIF_THREAD_PRIO: The priority assigned to the slipif_loop thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef SLIPIF_THREAD_PRIO +#define SLIPIF_THREAD_PRIO              (LOWPRIO + 1) +#endif + +/** + * PPP_THREAD_NAME: The name assigned to the pppInputThread. + */ +#ifndef PPP_THREAD_NAME +#define PPP_THREAD_NAME                "pppInputThread" +#endif + +/** + * PPP_THREAD_STACKSIZE: The stack size used by the pppInputThread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef PPP_THREAD_STACKSIZE +#define PPP_THREAD_STACKSIZE            1024 +#endif + +/** + * PPP_THREAD_PRIO: The priority assigned to the pppInputThread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef PPP_THREAD_PRIO +#define PPP_THREAD_PRIO                 (LOWPRIO + 1) +#endif + +/** + * DEFAULT_THREAD_NAME: The name assigned to any other lwIP thread. + */ +#ifndef DEFAULT_THREAD_NAME +#define DEFAULT_THREAD_NAME            "lwIP" +#endif + +/** + * DEFAULT_THREAD_STACKSIZE: The stack size used by any other lwIP thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef DEFAULT_THREAD_STACKSIZE +#define DEFAULT_THREAD_STACKSIZE        1024 +#endif + +/** + * DEFAULT_THREAD_PRIO: The priority assigned to any other lwIP thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef DEFAULT_THREAD_PRIO +#define DEFAULT_THREAD_PRIO             (LOWPRIO + 1) +#endif + +/** + * DEFAULT_RAW_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_RAW. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#ifndef DEFAULT_RAW_RECVMBOX_SIZE +#define DEFAULT_RAW_RECVMBOX_SIZE       4 +#endif + +/** + * DEFAULT_UDP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_UDP. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#ifndef DEFAULT_UDP_RECVMBOX_SIZE +#define DEFAULT_UDP_RECVMBOX_SIZE       4 +#endif + +/** + * DEFAULT_TCP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_TCP. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#ifndef DEFAULT_TCP_RECVMBOX_SIZE +#define DEFAULT_TCP_RECVMBOX_SIZE       40 +#endif + +/** + * DEFAULT_ACCEPTMBOX_SIZE: The mailbox size for the incoming connections. + * The queue size value itself is platform-dependent, but is passed to + * sys_mbox_new() when the acceptmbox is created. + */ +#ifndef DEFAULT_ACCEPTMBOX_SIZE +#define DEFAULT_ACCEPTMBOX_SIZE         4 +#endif + +/* +   ---------------------------------------------- +   ---------- Sequential layer options ---------- +   ---------------------------------------------- +*/ +/** + * LWIP_TCPIP_CORE_LOCKING: (EXPERIMENTAL!) + * Don't use it if you're not an active lwIP project member + */ +#ifndef LWIP_TCPIP_CORE_LOCKING +#define LWIP_TCPIP_CORE_LOCKING         0 +#endif + +/** + * LWIP_TCPIP_CORE_LOCKING_INPUT: (EXPERIMENTAL!) + * Don't use it if you're not an active lwIP project member + */ +#ifndef LWIP_TCPIP_CORE_LOCKING_INPUT +#define LWIP_TCPIP_CORE_LOCKING_INPUT   0 +#endif + +/** + * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c) + */ +#ifndef LWIP_NETCONN +#define LWIP_NETCONN                    1 +#endif + +/** LWIP_TCPIP_TIMEOUT==1: Enable tcpip_timeout/tcpip_untimeout tod create + * timers running in tcpip_thread from another thread. + */ +#ifndef LWIP_TCPIP_TIMEOUT +#define LWIP_TCPIP_TIMEOUT              1 +#endif + +/* +   ------------------------------------ +   ---------- Socket options ---------- +   ------------------------------------ +*/ +/** + * LWIP_SOCKET==1: Enable Socket API (require to use sockets.c) + */ +#ifndef LWIP_SOCKET +#define LWIP_SOCKET                     1 +#endif + +/** + * LWIP_COMPAT_SOCKETS==1: Enable BSD-style sockets functions names. + * (only used if you use sockets.c) + */ +#ifndef LWIP_COMPAT_SOCKETS +#define LWIP_COMPAT_SOCKETS             1 +#endif + +/** + * LWIP_POSIX_SOCKETS_IO_NAMES==1: Enable POSIX-style sockets functions names. + * Disable this option if you use a POSIX operating system that uses the same + * names (read, write & close). (only used if you use sockets.c) + */ +#ifndef LWIP_POSIX_SOCKETS_IO_NAMES +#define LWIP_POSIX_SOCKETS_IO_NAMES     1 +#endif + +/** + * LWIP_TCP_KEEPALIVE==1: Enable TCP_KEEPIDLE, TCP_KEEPINTVL and TCP_KEEPCNT + * options processing. Note that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set + * in seconds. (does not require sockets.c, and will affect tcp.c) + */ +#ifndef LWIP_TCP_KEEPALIVE +#define LWIP_TCP_KEEPALIVE              0 +#endif + +/** + * LWIP_SO_SNDTIMEO==1: Enable send timeout for sockets/netconns and + * SO_SNDTIMEO processing. + */ +#ifndef LWIP_SO_SNDTIMEO +#define LWIP_SO_SNDTIMEO                0 +#endif + +/** + * LWIP_SO_RCVTIMEO==1: Enable receive timeout for sockets/netconns and + * SO_RCVTIMEO processing. + */ +#ifndef LWIP_SO_RCVTIMEO +#define LWIP_SO_RCVTIMEO                0 +#endif + +/** + * LWIP_SO_RCVBUF==1: Enable SO_RCVBUF processing. + */ +#ifndef LWIP_SO_RCVBUF +#define LWIP_SO_RCVBUF                  0 +#endif + +/** + * If LWIP_SO_RCVBUF is used, this is the default value for recv_bufsize. + */ +#ifndef RECV_BUFSIZE_DEFAULT +#define RECV_BUFSIZE_DEFAULT            INT_MAX +#endif + +/** + * SO_REUSE==1: Enable SO_REUSEADDR option. + */ +#ifndef SO_REUSE +#define SO_REUSE                        0 +#endif + +/** + * SO_REUSE_RXTOALL==1: Pass a copy of incoming broadcast/multicast packets + * to all local matches if SO_REUSEADDR is turned on. + * WARNING: Adds a memcpy for every packet if passing to more than one pcb! + */ +#ifndef SO_REUSE_RXTOALL +#define SO_REUSE_RXTOALL                0 +#endif + +/* +   ---------------------------------------- +   ---------- Statistics options ---------- +   ---------------------------------------- +*/ +/** + * LWIP_STATS==1: Enable statistics collection in lwip_stats. + */ +#ifndef LWIP_STATS +#define LWIP_STATS                      1 +#endif + +#if LWIP_STATS + +/** + * LWIP_STATS_DISPLAY==1: Compile in the statistics output functions. + */ +#ifndef LWIP_STATS_DISPLAY +#define LWIP_STATS_DISPLAY              0 +#endif + +/** + * LINK_STATS==1: Enable link stats. + */ +#ifndef LINK_STATS +#define LINK_STATS                      1 +#endif + +/** + * ETHARP_STATS==1: Enable etharp stats. + */ +#ifndef ETHARP_STATS +#define ETHARP_STATS                    (LWIP_ARP) +#endif + +/** + * IP_STATS==1: Enable IP stats. + */ +#ifndef IP_STATS +#define IP_STATS                        1 +#endif + +/** + * IPFRAG_STATS==1: Enable IP fragmentation stats. Default is + * on if using either frag or reass. + */ +#ifndef IPFRAG_STATS +#define IPFRAG_STATS                    (IP_REASSEMBLY || IP_FRAG) +#endif + +/** + * ICMP_STATS==1: Enable ICMP stats. + */ +#ifndef ICMP_STATS +#define ICMP_STATS                      1 +#endif + +/** + * IGMP_STATS==1: Enable IGMP stats. + */ +#ifndef IGMP_STATS +#define IGMP_STATS                      (LWIP_IGMP) +#endif + +/** + * UDP_STATS==1: Enable UDP stats. Default is on if + * UDP enabled, otherwise off. + */ +#ifndef UDP_STATS +#define UDP_STATS                       (LWIP_UDP) +#endif + +/** + * TCP_STATS==1: Enable TCP stats. Default is on if TCP + * enabled, otherwise off. + */ +#ifndef TCP_STATS +#define TCP_STATS                       (LWIP_TCP) +#endif + +/** + * MEM_STATS==1: Enable mem.c stats. + */ +#ifndef MEM_STATS +#define MEM_STATS                       ((MEM_LIBC_MALLOC == 0) && (MEM_USE_POOLS == 0)) +#endif + +/** + * MEMP_STATS==1: Enable memp.c pool stats. + */ +#ifndef MEMP_STATS +#define MEMP_STATS                      (MEMP_MEM_MALLOC == 0) +#endif + +/** + * SYS_STATS==1: Enable system stats (sem and mbox counts, etc). + */ +#ifndef SYS_STATS +#define SYS_STATS                       (NO_SYS == 0) +#endif + +#else + +#define LINK_STATS                      0 +#define IP_STATS                        0 +#define IPFRAG_STATS                    0 +#define ICMP_STATS                      0 +#define IGMP_STATS                      0 +#define UDP_STATS                       0 +#define TCP_STATS                       0 +#define MEM_STATS                       0 +#define MEMP_STATS                      0 +#define SYS_STATS                       0 +#define LWIP_STATS_DISPLAY              0 + +#endif /* LWIP_STATS */ + +/* +   --------------------------------- +   ---------- PPP options ---------- +   --------------------------------- +*/ +/** + * PPP_SUPPORT==1: Enable PPP. + */ +#ifndef PPP_SUPPORT +#define PPP_SUPPORT                     0 +#endif + +/** + * PPPOE_SUPPORT==1: Enable PPP Over Ethernet + */ +#ifndef PPPOE_SUPPORT +#define PPPOE_SUPPORT                   0 +#endif + +/** + * PPPOS_SUPPORT==1: Enable PPP Over Serial + */ +#ifndef PPPOS_SUPPORT +#define PPPOS_SUPPORT                   PPP_SUPPORT +#endif + +#if PPP_SUPPORT + +/** + * NUM_PPP: Max PPP sessions. + */ +#ifndef NUM_PPP +#define NUM_PPP                         1 +#endif + +/** + * PAP_SUPPORT==1: Support PAP. + */ +#ifndef PAP_SUPPORT +#define PAP_SUPPORT                     0 +#endif + +/** + * CHAP_SUPPORT==1: Support CHAP. + */ +#ifndef CHAP_SUPPORT +#define CHAP_SUPPORT                    0 +#endif + +/** + * MSCHAP_SUPPORT==1: Support MSCHAP. CURRENTLY NOT SUPPORTED! DO NOT SET! + */ +#ifndef MSCHAP_SUPPORT +#define MSCHAP_SUPPORT                  0 +#endif + +/** + * CBCP_SUPPORT==1: Support CBCP. CURRENTLY NOT SUPPORTED! DO NOT SET! + */ +#ifndef CBCP_SUPPORT +#define CBCP_SUPPORT                    0 +#endif + +/** + * CCP_SUPPORT==1: Support CCP. CURRENTLY NOT SUPPORTED! DO NOT SET! + */ +#ifndef CCP_SUPPORT +#define CCP_SUPPORT                     0 +#endif + +/** + * VJ_SUPPORT==1: Support VJ header compression. + */ +#ifndef VJ_SUPPORT +#define VJ_SUPPORT                      0 +#endif + +/** + * MD5_SUPPORT==1: Support MD5 (see also CHAP). + */ +#ifndef MD5_SUPPORT +#define MD5_SUPPORT                     0 +#endif + +/* + * Timeouts + */ +#ifndef FSM_DEFTIMEOUT +#define FSM_DEFTIMEOUT                  6       /* Timeout time in seconds */ +#endif + +#ifndef FSM_DEFMAXTERMREQS +#define FSM_DEFMAXTERMREQS              2       /* Maximum Terminate-Request transmissions */ +#endif + +#ifndef FSM_DEFMAXCONFREQS +#define FSM_DEFMAXCONFREQS              10      /* Maximum Configure-Request transmissions */ +#endif + +#ifndef FSM_DEFMAXNAKLOOPS +#define FSM_DEFMAXNAKLOOPS              5       /* Maximum number of nak loops */ +#endif + +#ifndef UPAP_DEFTIMEOUT +#define UPAP_DEFTIMEOUT                 6       /* Timeout (seconds) for retransmitting req */ +#endif + +#ifndef UPAP_DEFREQTIME +#define UPAP_DEFREQTIME                 30      /* Time to wait for auth-req from peer */ +#endif + +#ifndef CHAP_DEFTIMEOUT +#define CHAP_DEFTIMEOUT                 6       /* Timeout time in seconds */ +#endif + +#ifndef CHAP_DEFTRANSMITS +#define CHAP_DEFTRANSMITS               10      /* max # times to send challenge */ +#endif + +/* Interval in seconds between keepalive echo requests, 0 to disable. */ +#ifndef LCP_ECHOINTERVAL +#define LCP_ECHOINTERVAL                0 +#endif + +/* Number of unanswered echo requests before failure. */ +#ifndef LCP_MAXECHOFAILS +#define LCP_MAXECHOFAILS                3 +#endif + +/* Max Xmit idle time (in jiffies) before resend flag char. */ +#ifndef PPP_MAXIDLEFLAG +#define PPP_MAXIDLEFLAG                 100 +#endif + +/* + * Packet sizes + * + * Note - lcp shouldn't be allowed to negotiate stuff outside these + *    limits.  See lcp.h in the pppd directory. + * (XXX - these constants should simply be shared by lcp.c instead + *    of living in lcp.h) + */ +#define PPP_MTU                         1500     /* Default MTU (size of Info field) */ +#ifndef PPP_MAXMTU +/* #define PPP_MAXMTU  65535 - (PPP_HDRLEN + PPP_FCSLEN) */ +#define PPP_MAXMTU                      1500 /* Largest MTU we allow */ +#endif +#define PPP_MINMTU                      64 +#define PPP_MRU                         1500     /* default MRU = max length of info field */ +#define PPP_MAXMRU                      1500     /* Largest MRU we allow */ +#ifndef PPP_DEFMRU +#define PPP_DEFMRU                      296             /* Try for this */ +#endif +#define PPP_MINMRU                      128             /* No MRUs below this */ + +#ifndef MAXNAMELEN +#define MAXNAMELEN                      256     /* max length of hostname or name for auth */ +#endif +#ifndef MAXSECRETLEN +#define MAXSECRETLEN                    256     /* max length of password or secret */ +#endif + +#endif /* PPP_SUPPORT */ + +/* +   -------------------------------------- +   ---------- Checksum options ---------- +   -------------------------------------- +*/ +/** + * CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets. + */ +#ifndef CHECKSUM_GEN_IP +#define CHECKSUM_GEN_IP                 1 +#endif +  +/** + * CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets. + */ +#ifndef CHECKSUM_GEN_UDP +#define CHECKSUM_GEN_UDP                1 +#endif +  +/** + * CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets. + */ +#ifndef CHECKSUM_GEN_TCP +#define CHECKSUM_GEN_TCP                1 +#endif + +/** + * CHECKSUM_GEN_ICMP==1: Generate checksums in software for outgoing ICMP packets. + */ +#ifndef CHECKSUM_GEN_ICMP +#define CHECKSUM_GEN_ICMP               1 +#endif +  +/** + * CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets. + */ +#ifndef CHECKSUM_CHECK_IP +#define CHECKSUM_CHECK_IP               1 +#endif +  +/** + * CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets. + */ +#ifndef CHECKSUM_CHECK_UDP +#define CHECKSUM_CHECK_UDP              1 +#endif + +/** + * CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets. + */ +#ifndef CHECKSUM_CHECK_TCP +#define CHECKSUM_CHECK_TCP              1 +#endif + +/** + * LWIP_CHECKSUM_ON_COPY==1: Calculate checksum when copying data from + * application buffers to pbufs. + */ +#ifndef LWIP_CHECKSUM_ON_COPY +#define LWIP_CHECKSUM_ON_COPY           0 +#endif + +/* +   --------------------------------------- +   ---------- Hook options --------------- +   --------------------------------------- +*/ + +/* Hooks are undefined by default, define them to a function if you need them. */ + +/** + * LWIP_HOOK_IP4_INPUT(pbuf, input_netif): + * - called from ip_input() (IPv4) + * - pbuf: received struct pbuf passed to ip_input() + * - input_netif: struct netif on which the packet has been received + * Return values: + * - 0: Hook has not consumed the packet, packet is processed as normal + * - != 0: Hook has consumed the packet. + * If the hook consumed the packet, 'pbuf' is in the responsibility of the hook + * (i.e. free it when done). + */ + +/** + * LWIP_HOOK_IP4_ROUTE(dest): + * - called from ip_route() (IPv4) + * - dest: destination IPv4 address + * Returns the destination netif or NULL if no destination netif is found. In + * that case, ip_route() continues as normal. + */ + +/* +   --------------------------------------- +   ---------- Debugging options ---------- +   --------------------------------------- +*/ +/** + * LWIP_DBG_MIN_LEVEL: After masking, the value of the debug is + * compared against this value. If it is smaller, then debugging + * messages are written. + */ +#ifndef LWIP_DBG_MIN_LEVEL +#define LWIP_DBG_MIN_LEVEL              LWIP_DBG_LEVEL_ALL +#endif + +/** + * LWIP_DBG_TYPES_ON: A mask that can be used to globally enable/disable + * debug messages of certain types. + */ +#ifndef LWIP_DBG_TYPES_ON +#define LWIP_DBG_TYPES_ON               LWIP_DBG_ON +#endif + +/** + * ETHARP_DEBUG: Enable debugging in etharp.c. + */ +#ifndef ETHARP_DEBUG +#define ETHARP_DEBUG                    LWIP_DBG_OFF +#endif + +/** + * NETIF_DEBUG: Enable debugging in netif.c. + */ +#ifndef NETIF_DEBUG +#define NETIF_DEBUG                     LWIP_DBG_OFF +#endif + +/** + * PBUF_DEBUG: Enable debugging in pbuf.c. + */ +#ifndef PBUF_DEBUG +#define PBUF_DEBUG                      LWIP_DBG_OFF +#endif + +/** + * API_LIB_DEBUG: Enable debugging in api_lib.c. + */ +#ifndef API_LIB_DEBUG +#define API_LIB_DEBUG                   LWIP_DBG_OFF +#endif + +/** + * API_MSG_DEBUG: Enable debugging in api_msg.c. + */ +#ifndef API_MSG_DEBUG +#define API_MSG_DEBUG                   LWIP_DBG_OFF +#endif + +/** + * SOCKETS_DEBUG: Enable debugging in sockets.c. + */ +#ifndef SOCKETS_DEBUG +#define SOCKETS_DEBUG                   LWIP_DBG_OFF +#endif + +/** + * ICMP_DEBUG: Enable debugging in icmp.c. + */ +#ifndef ICMP_DEBUG +#define ICMP_DEBUG                      LWIP_DBG_OFF +#endif + +/** + * IGMP_DEBUG: Enable debugging in igmp.c. + */ +#ifndef IGMP_DEBUG +#define IGMP_DEBUG                      LWIP_DBG_OFF +#endif + +/** + * INET_DEBUG: Enable debugging in inet.c. + */ +#ifndef INET_DEBUG +#define INET_DEBUG                      LWIP_DBG_OFF +#endif + +/** + * IP_DEBUG: Enable debugging for IP. + */ +#ifndef IP_DEBUG +#define IP_DEBUG                        LWIP_DBG_OFF +#endif + +/** + * IP_REASS_DEBUG: Enable debugging in ip_frag.c for both frag & reass. + */ +#ifndef IP_REASS_DEBUG +#define IP_REASS_DEBUG                  LWIP_DBG_OFF +#endif + +/** + * RAW_DEBUG: Enable debugging in raw.c. + */ +#ifndef RAW_DEBUG +#define RAW_DEBUG                       LWIP_DBG_OFF +#endif + +/** + * MEM_DEBUG: Enable debugging in mem.c. + */ +#ifndef MEM_DEBUG +#define MEM_DEBUG                       LWIP_DBG_OFF +#endif + +/** + * MEMP_DEBUG: Enable debugging in memp.c. + */ +#ifndef MEMP_DEBUG +#define MEMP_DEBUG                      LWIP_DBG_OFF +#endif + +/** + * SYS_DEBUG: Enable debugging in sys.c. + */ +#ifndef SYS_DEBUG +#define SYS_DEBUG                       LWIP_DBG_OFF +#endif + +/** + * TIMERS_DEBUG: Enable debugging in timers.c. + */ +#ifndef TIMERS_DEBUG +#define TIMERS_DEBUG                    LWIP_DBG_OFF +#endif + +/** + * TCP_DEBUG: Enable debugging for TCP. + */ +#ifndef TCP_DEBUG +#define TCP_DEBUG                       LWIP_DBG_OFF +#endif + +/** + * TCP_INPUT_DEBUG: Enable debugging in tcp_in.c for incoming debug. + */ +#ifndef TCP_INPUT_DEBUG +#define TCP_INPUT_DEBUG                 LWIP_DBG_OFF +#endif + +/** + * TCP_FR_DEBUG: Enable debugging in tcp_in.c for fast retransmit. + */ +#ifndef TCP_FR_DEBUG +#define TCP_FR_DEBUG                    LWIP_DBG_OFF +#endif + +/** + * TCP_RTO_DEBUG: Enable debugging in TCP for retransmit + * timeout. + */ +#ifndef TCP_RTO_DEBUG +#define TCP_RTO_DEBUG                   LWIP_DBG_OFF +#endif + +/** + * TCP_CWND_DEBUG: Enable debugging for TCP congestion window. + */ +#ifndef TCP_CWND_DEBUG +#define TCP_CWND_DEBUG                  LWIP_DBG_OFF +#endif + +/** + * TCP_WND_DEBUG: Enable debugging in tcp_in.c for window updating. + */ +#ifndef TCP_WND_DEBUG +#define TCP_WND_DEBUG                   LWIP_DBG_OFF +#endif + +/** + * TCP_OUTPUT_DEBUG: Enable debugging in tcp_out.c output functions. + */ +#ifndef TCP_OUTPUT_DEBUG +#define TCP_OUTPUT_DEBUG                LWIP_DBG_OFF +#endif + +/** + * TCP_RST_DEBUG: Enable debugging for TCP with the RST message. + */ +#ifndef TCP_RST_DEBUG +#define TCP_RST_DEBUG                   LWIP_DBG_OFF +#endif + +/** + * TCP_QLEN_DEBUG: Enable debugging for TCP queue lengths. + */ +#ifndef TCP_QLEN_DEBUG +#define TCP_QLEN_DEBUG                  LWIP_DBG_OFF +#endif + +/** + * UDP_DEBUG: Enable debugging in UDP. + */ +#ifndef UDP_DEBUG +#define UDP_DEBUG                       LWIP_DBG_OFF +#endif + +/** + * TCPIP_DEBUG: Enable debugging in tcpip.c. + */ +#ifndef TCPIP_DEBUG +#define TCPIP_DEBUG                     LWIP_DBG_OFF +#endif + +/** + * PPP_DEBUG: Enable debugging for PPP. + */ +#ifndef PPP_DEBUG +#define PPP_DEBUG                       LWIP_DBG_OFF +#endif + +/** + * SLIP_DEBUG: Enable debugging in slipif.c. + */ +#ifndef SLIP_DEBUG +#define SLIP_DEBUG                      LWIP_DBG_OFF +#endif + +/** + * DHCP_DEBUG: Enable debugging in dhcp.c. + */ +#ifndef DHCP_DEBUG +#define DHCP_DEBUG                      LWIP_DBG_OFF +#endif + +/** + * AUTOIP_DEBUG: Enable debugging in autoip.c. + */ +#ifndef AUTOIP_DEBUG +#define AUTOIP_DEBUG                    LWIP_DBG_OFF +#endif + +/** + * SNMP_MSG_DEBUG: Enable debugging for SNMP messages. + */ +#ifndef SNMP_MSG_DEBUG +#define SNMP_MSG_DEBUG                  LWIP_DBG_OFF +#endif + +/** + * SNMP_MIB_DEBUG: Enable debugging for SNMP MIBs. + */ +#ifndef SNMP_MIB_DEBUG +#define SNMP_MIB_DEBUG                  LWIP_DBG_OFF +#endif + +/** + * DNS_DEBUG: Enable debugging for DNS. + */ +#ifndef DNS_DEBUG +#define DNS_DEBUG                       LWIP_DBG_OFF +#endif + +#endif /* __LWIPOPT_H__ */ diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/main.c b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/main.c new file mode 100644 index 000000000..e9d4051d0 --- /dev/null +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/main.c @@ -0,0 +1,348 @@ +/* +    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + +    Licensed under the Apache License, Version 2.0 (the "License"); +    you may not use this file except in compliance with the License. +    You may obtain a copy of the License at + +        http://www.apache.org/licenses/LICENSE-2.0 + +    Unless required by applicable law or agreed to in writing, software +    distributed under the License is distributed on an "AS IS" BASIS, +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +    See the License for the specific language governing permissions and +    limitations under the License. +*/ + +#include <stdio.h> +#include <string.h> + +#include "ch.h" +#include "hal.h" +#include "rt_test_root.h" + +#include "chprintf.h" +#include "shell.h" + +#include "lwipthread.h" +#include "web/web.h" + +#include "ff.h" + +#include "portab.h" +#include "usbcfg.h" + +/*===========================================================================*/ +/* Card insertion monitor.                                                   */ +/*===========================================================================*/ + +#define POLLING_INTERVAL                10 +#define POLLING_DELAY                   10 + +/** + * @brief   Card monitor timer. + */ +static virtual_timer_t tmr; + +/** + * @brief   Debounce counter. + */ +static unsigned cnt; + +/** + * @brief   Card event sources. + */ +static event_source_t inserted_event, removed_event; + +/** + * @brief   Insertion monitor timer callback function. + * + * @param[in] p         pointer to the @p BaseBlockDevice object + * + * @notapi + */ +static void tmrfunc(void *p) { +  BaseBlockDevice *bbdp = p; + +  chSysLockFromISR(); +  if (cnt > 0) { +    if (blkIsInserted(bbdp)) { +      if (--cnt == 0) { +        chEvtBroadcastI(&inserted_event); +      } +    } +    else +      cnt = POLLING_INTERVAL; +  } +  else { +    if (!blkIsInserted(bbdp)) { +      cnt = POLLING_INTERVAL; +      chEvtBroadcastI(&removed_event); +    } +  } +  chVTSetI(&tmr, TIME_MS2I(POLLING_DELAY), tmrfunc, bbdp); +  chSysUnlockFromISR(); +} + +/** + * @brief   Polling monitor start. + * + * @param[in] p         pointer to an object implementing @p BaseBlockDevice + * + * @notapi + */ +static void tmr_init(void *p) { + +  chEvtObjectInit(&inserted_event); +  chEvtObjectInit(&removed_event); +  chSysLock(); +  cnt = POLLING_INTERVAL; +  chVTSetI(&tmr, TIME_MS2I(POLLING_DELAY), tmrfunc, p); +  chSysUnlock(); +} + +/*===========================================================================*/ +/* FatFs related.                                                            */ +/*===========================================================================*/ + +/** + * @brief FS object. + */ +static FATFS SDC_FS; + +/* FS mounted and ready.*/ +static bool fs_ready = FALSE; + +/* Generic large buffer.*/ +static uint8_t fbuff[1024]; + +static FRESULT scan_files(BaseSequentialStream *chp, char *path) { +  static FILINFO fno; +  FRESULT res; +  DIR dir; +  size_t i; +  char *fn; + +  res = f_opendir(&dir, path); +  if (res == FR_OK) { +    i = strlen(path); +    while (((res = f_readdir(&dir, &fno)) == FR_OK) && fno.fname[0]) { +      if (FF_FS_RPATH && fno.fname[0] == '.') +        continue; +      fn = fno.fname; +      if (fno.fattrib & AM_DIR) { +        *(path + i) = '/'; +        strcpy(path + i + 1, fn); +        res = scan_files(chp, path); +        *(path + i) = '\0'; +        if (res != FR_OK) +          break; +      } +      else { +        chprintf(chp, "%s/%s\r\n", path, fn); +      } +    } +  } +  return res; +} + +/*===========================================================================*/ +/* Command line related.                                                     */ +/*===========================================================================*/ + +#define SHELL_WA_SIZE   THD_WORKING_AREA_SIZE(2048) + +static void cmd_tree(BaseSequentialStream *chp, int argc, char *argv[]) { +  FRESULT err; +  uint32_t fre_clust; +  FATFS *fsp; + +  (void)argv; +  if (argc > 0) { +    chprintf(chp, "Usage: tree\r\n"); +    return; +  } +  if (!fs_ready) { +    chprintf(chp, "File System not mounted\r\n"); +    return; +  } +  err = f_getfree("/", &fre_clust, &fsp); +  if (err != FR_OK) { +    chprintf(chp, "FS: f_getfree() failed\r\n"); +    return; +  } +  chprintf(chp, +           "FS: %lu free clusters with %lu sectors (%lu bytes) per cluster\r\n", +           fre_clust, (uint32_t)fsp->csize, (uint32_t)fsp->csize * 512); +  fbuff[0] = 0; +  scan_files(chp, (char *)fbuff); +} + +static const ShellCommand commands[] = { +  {"tree", cmd_tree}, +  {NULL, NULL} +}; + +static const ShellConfig shell_cfg1 = { +  (BaseSequentialStream *)&PORTAB_SDU1, +  commands +}; + +/*===========================================================================*/ +/* Main and generic code.                                                    */ +/*===========================================================================*/ + +static thread_t *shelltp = NULL; + +/* + * Card insertion event. + */ +static void InsertHandler(eventid_t id) { +  FRESULT err; + +  (void)id; +  /* +   * On insertion SDC initialization and FS mount. +   */ +  if (sdcConnect(&SDCD1)) +    return; + +  err = f_mount(&SDC_FS, "/", 1); +  if (err != FR_OK) { +    sdcDisconnect(&SDCD1); +    return; +  } +  fs_ready = TRUE; +} + +/* + * Card removal event. + */ +static void RemoveHandler(eventid_t id) { + +  (void)id; +  sdcDisconnect(&SDCD1); +  fs_ready = FALSE; +} + +/* + * Shell exit event. + */ +static void ShellHandler(eventid_t id) { + +  (void)id; +  if (chThdTerminatedX(shelltp)) { +    chThdRelease(shelltp); +    shelltp = NULL; +  } +} + +/* + * Green LED blinker thread, times are in milliseconds. + */ +static THD_WORKING_AREA(waThread1, 128); +static THD_FUNCTION(Thread1, arg) { + +  (void)arg; +  chRegSetThreadName("blinker"); +  while (true) { +    palToggleLine(PORTAB_BLINK_LED1); +    chThdSleepMilliseconds(fs_ready ? 250 : 500); +  } +} + +/* + * Application entry point. + */ +int main(void) { +  static const evhandler_t evhndl[] = { +    InsertHandler, +    RemoveHandler, +    ShellHandler +  }; +  event_listener_t el0, el1, el2; + +  /* +   * System initializations. +   * - HAL initialization, this also initializes the configured device drivers +   *   and performs the board-specific initializations. +   * - Kernel initialization, the main() function becomes a thread and the +   *   RTOS is active. +   * - lwIP subsystem initialization using the default configuration. +   */ +  halInit(); +  chSysInit(); + +  /* +   * Initialize RNG +   */ +  rccEnableAHB2(RCC_AHB2ENR_RNGEN, 0); +  RNG->CR |= RNG_CR_IE; +  RNG->CR |= RNG_CR_RNGEN; + +  /* lwip */ +  lwipInit(NULL); + +  /* +   * Target-dependent setup code. +   */ +  portab_setup(); + +  /* +   * Initializes a serial-over-USB CDC driver. +   */ +  sduObjectInit(&PORTAB_SDU1); +  sduStart(&PORTAB_SDU1, &serusbcfg); + +  /* +   * Activates the USB driver and then the USB bus pull-up on D+. +   * Note, a delay is inserted in order to not have to disconnect the cable +   * after a reset. +   */ +  usbDisconnectBus(serusbcfg.usbp); +  chThdSleepMilliseconds(1500); +  usbStart(serusbcfg.usbp, &usbcfg); +  usbConnectBus(serusbcfg.usbp); + +  /* +   * Shell manager initialization. +   */ +  shellInit(); + +  /* +   * Activates the  SDC driver 1 using default configuration. +   */ +  sdcStart(&SDCD1, NULL); + +  /* +   * Activates the card insertion monitor. +   */ +  tmr_init(&SDCD1); + +  /* +   * Creates the blinker thread. +   */ +  chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); + +  /* +   * Creates the HTTPS thread (it changes priority internally). +   */ +  chThdCreateStatic(wa_https_server, sizeof(wa_https_server), NORMALPRIO + 1, +                    https_server, NULL); + +  /* +   * Normal main() thread activity, handling SD card events and shell +   * start/exit. +   */ +  chEvtRegister(&inserted_event, &el0, 0); +  chEvtRegister(&removed_event, &el1, 1); +  chEvtRegister(&shell_terminated, &el2, 2); +  while (true) { +    if (!shelltp && (PORTAB_SDU1.config->usbp->state == USB_ACTIVE)) { +      shelltp = chThdCreateFromHeap(NULL, SHELL_WA_SIZE, +                                    "shell", NORMALPRIO + 1, +                                    shellThread, (void *)&shell_cfg1); +    } +    chEvtDispatch(evhndl, chEvtWaitOneTimeout(ALL_EVENTS, TIME_MS2I(500))); +  } +} diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/readme.txt b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/readme.txt new file mode 100644 index 000000000..90caefe47 --- /dev/null +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/readme.txt @@ -0,0 +1,40 @@ +***************************************************************************** +** ChibiOS/RT port for ARM-Cortex-M7 STM32F746.                            ** +***************************************************************************** + +** TARGET ** + +The demo runs on a STM32F476-Discovery board. + +** The Demo ** + +The demo flashes a LED to indicate that is running properly. +FatFs is integrated using SDIO. + +The USB-FS port is used as USB-CDC and a command shell is ready to accepts +commands there. + +An example HTTPS server is implemented to serve "GET /" requests at address  +192.168.1.10 on port 443. + +SSL certificate and server key that are compiled in are the example keys  +taken from the wolfSSL repository. To use different keys, regenerate cert.c  +using "xxd -i" from your certificate and keys. + + +** Build Procedure ** + +This build has been tested using arm-none-eabi-gcc and make. +Just type 'make' from this directory to create the image. + + +** Notes ** + +Some files used by the demo are not part of ChibiOS/RT but are copyright of +ST Microelectronics and are licensed under a different license. +Also note that not all the files present in the ST library are distributed +with ChibiOS/RT, you can find the whole library on the ST web site: + +                             http://www.st.com + +WolfSSL is Copyright (c) by WolfSSL Inc. diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/usbcfg.c b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/usbcfg.c new file mode 100644 index 000000000..61d3553d8 --- /dev/null +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/usbcfg.c @@ -0,0 +1,343 @@ +/* +    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + +    Licensed under the Apache License, Version 2.0 (the "License"); +    you may not use this file except in compliance with the License. +    You may obtain a copy of the License at + +        http://www.apache.org/licenses/LICENSE-2.0 + +    Unless required by applicable law or agreed to in writing, software +    distributed under the License is distributed on an "AS IS" BASIS, +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +    See the License for the specific language governing permissions and +    limitations under the License. +*/ + +#include "hal.h" +#include "portab.h" + +/* Virtual serial port over USB.*/ +SerialUSBDriver PORTAB_SDU1; + +/* + * Endpoints to be used for USBD1. + */ +#define USB1_DATA_REQUEST_EP            1 +#define USB1_DATA_AVAILABLE_EP          1 +#define USB1_INTERRUPT_REQUEST_EP       2 + +/* + * USB Device Descriptor. + */ +static const uint8_t vcom_device_descriptor_data[18] = { +  USB_DESC_DEVICE       (0x0110,        /* bcdUSB (1.1).                    */ +                         0x02,          /* bDeviceClass (CDC).              */ +                         0x00,          /* bDeviceSubClass.                 */ +                         0x00,          /* bDeviceProtocol.                 */ +                         0x40,          /* bMaxPacketSize.                  */ +                         0x0483,        /* idVendor (ST).                   */ +                         0x5740,        /* idProduct.                       */ +                         0x0200,        /* bcdDevice.                       */ +                         1,             /* iManufacturer.                   */ +                         2,             /* iProduct.                        */ +                         3,             /* iSerialNumber.                   */ +                         1)             /* bNumConfigurations.              */ +}; + +/* + * Device Descriptor wrapper. + */ +static const USBDescriptor vcom_device_descriptor = { +  sizeof vcom_device_descriptor_data, +  vcom_device_descriptor_data +}; + +/* Configuration Descriptor tree for a CDC.*/ +static const uint8_t vcom_configuration_descriptor_data[67] = { +  /* Configuration Descriptor.*/ +  USB_DESC_CONFIGURATION(67,            /* wTotalLength.                    */ +                         0x02,          /* bNumInterfaces.                  */ +                         0x01,          /* bConfigurationValue.             */ +                         0,             /* iConfiguration.                  */ +                         0xC0,          /* bmAttributes (self powered).     */ +                         50),           /* bMaxPower (100mA).               */ +  /* Interface Descriptor.*/ +  USB_DESC_INTERFACE    (0x00,          /* bInterfaceNumber.                */ +                         0x00,          /* bAlternateSetting.               */ +                         0x01,          /* bNumEndpoints.                   */ +                         0x02,          /* bInterfaceClass (Communications +                                           Interface Class, CDC section +                                           4.2).                            */ +                         0x02,          /* bInterfaceSubClass (Abstract +                                         Control Model, CDC section 4.3).   */ +                         0x01,          /* bInterfaceProtocol (AT commands, +                                           CDC section 4.4).                */ +                         0),            /* iInterface.                      */ +  /* Header Functional Descriptor (CDC section 5.2.3).*/ +  USB_DESC_BYTE         (5),            /* bLength.                         */ +  USB_DESC_BYTE         (0x24),         /* bDescriptorType (CS_INTERFACE).  */ +  USB_DESC_BYTE         (0x00),         /* bDescriptorSubtype (Header +                                           Functional Descriptor.           */ +  USB_DESC_BCD          (0x0110),       /* bcdCDC.                          */ +  /* Call Management Functional Descriptor. */ +  USB_DESC_BYTE         (5),            /* bFunctionLength.                 */ +  USB_DESC_BYTE         (0x24),         /* bDescriptorType (CS_INTERFACE).  */ +  USB_DESC_BYTE         (0x01),         /* bDescriptorSubtype (Call Management +                                           Functional Descriptor).          */ +  USB_DESC_BYTE         (0x00),         /* bmCapabilities (D0+D1).          */ +  USB_DESC_BYTE         (0x01),         /* bDataInterface.                  */ +  /* ACM Functional Descriptor.*/ +  USB_DESC_BYTE         (4),            /* bFunctionLength.                 */ +  USB_DESC_BYTE         (0x24),         /* bDescriptorType (CS_INTERFACE).  */ +  USB_DESC_BYTE         (0x02),         /* bDescriptorSubtype (Abstract +                                           Control Management Descriptor).  */ +  USB_DESC_BYTE         (0x02),         /* bmCapabilities.                  */ +  /* Union Functional Descriptor.*/ +  USB_DESC_BYTE         (5),            /* bFunctionLength.                 */ +  USB_DESC_BYTE         (0x24),         /* bDescriptorType (CS_INTERFACE).  */ +  USB_DESC_BYTE         (0x06),         /* bDescriptorSubtype (Union +                                           Functional Descriptor).          */ +  USB_DESC_BYTE         (0x00),         /* bMasterInterface (Communication +                                           Class Interface).                */ +  USB_DESC_BYTE         (0x01),         /* bSlaveInterface0 (Data Class +                                           Interface).                      */ +  /* Endpoint 2 Descriptor.*/ +  USB_DESC_ENDPOINT     (USB1_INTERRUPT_REQUEST_EP|0x80, +                         0x03,          /* bmAttributes (Interrupt).        */ +                         0x0008,        /* wMaxPacketSize.                  */ +                         0xFF),         /* bInterval.                       */ +  /* Interface Descriptor.*/ +  USB_DESC_INTERFACE    (0x01,          /* bInterfaceNumber.                */ +                         0x00,          /* bAlternateSetting.               */ +                         0x02,          /* bNumEndpoints.                   */ +                         0x0A,          /* bInterfaceClass (Data Class +                                           Interface, CDC section 4.5).     */ +                         0x00,          /* bInterfaceSubClass (CDC section +                                           4.6).                            */ +                         0x00,          /* bInterfaceProtocol (CDC section +                                           4.7).                            */ +                         0x00),         /* iInterface.                      */ +  /* Endpoint 3 Descriptor.*/ +  USB_DESC_ENDPOINT     (USB1_DATA_AVAILABLE_EP,       /* bEndpointAddress.*/ +                         0x02,          /* bmAttributes (Bulk).             */ +                         0x0040,        /* wMaxPacketSize.                  */ +                         0x00),         /* bInterval.                       */ +  /* Endpoint 1 Descriptor.*/ +  USB_DESC_ENDPOINT     (USB1_DATA_REQUEST_EP|0x80,    /* bEndpointAddress.*/ +                         0x02,          /* bmAttributes (Bulk).             */ +                         0x0040,        /* wMaxPacketSize.                  */ +                         0x00)          /* bInterval.                       */ +}; + +/* + * Configuration Descriptor wrapper. + */ +static const USBDescriptor vcom_configuration_descriptor = { +  sizeof vcom_configuration_descriptor_data, +  vcom_configuration_descriptor_data +}; + +/* + * U.S. English language identifier. + */ +static const uint8_t vcom_string0[] = { +  USB_DESC_BYTE(4),                     /* bLength.                         */ +  USB_DESC_BYTE(USB_DESCRIPTOR_STRING), /* bDescriptorType.                 */ +  USB_DESC_WORD(0x0409)                 /* wLANGID (U.S. English).          */ +}; + +/* + * Vendor string. + */ +static const uint8_t vcom_string1[] = { +  USB_DESC_BYTE(38),                    /* bLength.                         */ +  USB_DESC_BYTE(USB_DESCRIPTOR_STRING), /* bDescriptorType.                 */ +  'S', 0, 'T', 0, 'M', 0, 'i', 0, 'c', 0, 'r', 0, 'o', 0, 'e', 0, +  'l', 0, 'e', 0, 'c', 0, 't', 0, 'r', 0, 'o', 0, 'n', 0, 'i', 0, +  'c', 0, 's', 0 +}; + +/* + * Device Description string. + */ +static const uint8_t vcom_string2[] = { +  USB_DESC_BYTE(56),                    /* bLength.                         */ +  USB_DESC_BYTE(USB_DESCRIPTOR_STRING), /* bDescriptorType.                 */ +  'C', 0, 'h', 0, 'i', 0, 'b', 0, 'i', 0, 'O', 0, 'S', 0, '/', 0, +  'R', 0, 'T', 0, ' ', 0, 'V', 0, 'i', 0, 'r', 0, 't', 0, 'u', 0, +  'a', 0, 'l', 0, ' ', 0, 'C', 0, 'O', 0, 'M', 0, ' ', 0, 'P', 0, +  'o', 0, 'r', 0, 't', 0 +}; + +/* + * Serial Number string. + */ +static const uint8_t vcom_string3[] = { +  USB_DESC_BYTE(8),                     /* bLength.                         */ +  USB_DESC_BYTE(USB_DESCRIPTOR_STRING), /* bDescriptorType.                 */ +  '0' + CH_KERNEL_MAJOR, 0, +  '0' + CH_KERNEL_MINOR, 0, +  '0' + CH_KERNEL_PATCH, 0 +}; + +/* + * Strings wrappers array. + */ +static const USBDescriptor vcom_strings[] = { +  {sizeof vcom_string0, vcom_string0}, +  {sizeof vcom_string1, vcom_string1}, +  {sizeof vcom_string2, vcom_string2}, +  {sizeof vcom_string3, vcom_string3} +}; + +/* + * Handles the GET_DESCRIPTOR callback. All required descriptors must be + * handled here. + */ +static const USBDescriptor *get_descriptor(USBDriver *usbp, +                                           uint8_t dtype, +                                           uint8_t dindex, +                                           uint16_t lang) { + +  (void)usbp; +  (void)lang; +  switch (dtype) { +  case USB_DESCRIPTOR_DEVICE: +    return &vcom_device_descriptor; +  case USB_DESCRIPTOR_CONFIGURATION: +    return &vcom_configuration_descriptor; +  case USB_DESCRIPTOR_STRING: +    if (dindex < 4) +      return &vcom_strings[dindex]; +  } +  return NULL; +} + +/** + * @brief   IN EP1 state. + */ +static USBInEndpointState ep1instate; + +/** + * @brief   OUT EP1 state. + */ +static USBOutEndpointState ep1outstate; + +/** + * @brief   EP1 initialization structure (both IN and OUT). + */ +static const USBEndpointConfig ep1config = { +  USB_EP_MODE_TYPE_BULK, +  NULL, +  sduDataTransmitted, +  sduDataReceived, +  0x0040, +  0x0040, +  &ep1instate, +  &ep1outstate, +  2, +  NULL +}; + +/** + * @brief   IN EP2 state. + */ +static USBInEndpointState ep2instate; + +/** + * @brief   EP2 initialization structure (IN only). + */ +static const USBEndpointConfig ep2config = { +  USB_EP_MODE_TYPE_INTR, +  NULL, +  sduInterruptTransmitted, +  NULL, +  0x0010, +  0x0000, +  &ep2instate, +  NULL, +  1, +  NULL +}; + +/* + * Handles the USB driver global events. + */ +static void usb_event(USBDriver *usbp, usbevent_t event) { +  extern SerialUSBDriver PORTAB_SDU1; + +  switch (event) { +  case USB_EVENT_ADDRESS: +    return; +  case USB_EVENT_CONFIGURED: +    chSysLockFromISR(); + +    /* Enables the endpoints specified into the configuration. +       Note, this callback is invoked from an ISR so I-Class functions +       must be used.*/ +    usbInitEndpointI(usbp, USB1_DATA_REQUEST_EP, &ep1config); +    usbInitEndpointI(usbp, USB1_INTERRUPT_REQUEST_EP, &ep2config); + +    /* Resetting the state of the CDC subsystem.*/ +    sduConfigureHookI(&PORTAB_SDU1); + +    chSysUnlockFromISR(); +    return; +  case USB_EVENT_RESET: +    /* Falls into.*/ +  case USB_EVENT_UNCONFIGURED: +    /* Falls into.*/ +  case USB_EVENT_SUSPEND: +    chSysLockFromISR(); + +    /* Disconnection event on suspend.*/ +    sduSuspendHookI(&PORTAB_SDU1); + +    chSysUnlockFromISR(); +    return; +  case USB_EVENT_WAKEUP: +    chSysLockFromISR(); + +    /* Disconnection event on suspend.*/ +    sduWakeupHookI(&PORTAB_SDU1); + +    chSysUnlockFromISR(); +    return; +  case USB_EVENT_STALLED: +    return; +  } +  return; +} + +/* + * Handles the USB driver global events. + */ +static void sof_handler(USBDriver *usbp) { + +  (void)usbp; + +  osalSysLockFromISR(); +  sduSOFHookI(&PORTAB_SDU1); +  osalSysUnlockFromISR(); +} + +/* + * USB driver configuration. + */ +const USBConfig usbcfg = { +  usb_event, +  get_descriptor, +  sduRequestsHook, +  sof_handler +}; + +/* + * Serial over USB driver configuration. + */ +const SerialUSBConfig serusbcfg = { +  &PORTAB_USB1, +  USB1_DATA_REQUEST_EP, +  USB1_DATA_AVAILABLE_EP, +  USB1_INTERRUPT_REQUEST_EP +}; diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/usbcfg.h b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/usbcfg.h new file mode 100644 index 000000000..29d09bb83 --- /dev/null +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/usbcfg.h @@ -0,0 +1,26 @@ +/* +    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + +    Licensed under the Apache License, Version 2.0 (the "License"); +    you may not use this file except in compliance with the License. +    You may obtain a copy of the License at + +        http://www.apache.org/licenses/LICENSE-2.0 + +    Unless required by applicable law or agreed to in writing, software +    distributed under the License is distributed on an "AS IS" BASIS, +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +    See the License for the specific language governing permissions and +    limitations under the License. +*/ + +#ifndef USBCFG_H +#define USBCFG_H + +extern const USBConfig usbcfg; +extern SerialUSBConfig serusbcfg; +extern SerialUSBDriver PORTAB_SDU1; + +#endif  /* USBCFG_H */ + +/** @} */ diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/web/cert.c b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/web/cert.c new file mode 100644 index 000000000..63941a373 --- /dev/null +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/web/cert.c @@ -0,0 +1,83 @@ +const unsigned char server_cert[] = { +  0x30, 0x82, 0x03, 0x10, 0x30, 0x82, 0x02, 0xb5, 0xa0, 0x03, 0x02, 0x01, +  0x02, 0x02, 0x09, 0x00, 0xef, 0x46, 0xc7, 0xa4, 0x9b, 0xbb, 0x60, 0xd3, +  0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, +  0x30, 0x81, 0x8f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, +  0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, +  0x08, 0x0c, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, +  0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, +  0x53, 0x65, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x31, 0x10, 0x30, 0x0e, 0x06, +  0x03, 0x55, 0x04, 0x0a, 0x0c, 0x07, 0x45, 0x6c, 0x69, 0x70, 0x74, 0x69, +  0x63, 0x31, 0x0c, 0x30, 0x0a, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x03, +  0x45, 0x43, 0x43, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x03, +  0x0c, 0x0f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x6f, 0x6c, 0x66, 0x73, 0x73, +  0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x09, 0x2a, +  0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16, 0x10, 0x69, 0x6e, +  0x66, 0x6f, 0x40, 0x77, 0x6f, 0x6c, 0x66, 0x73, 0x73, 0x6c, 0x2e, 0x63, +  0x6f, 0x6d, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x38, 0x31, 0x31, +  0x32, 0x30, 0x30, 0x37, 0x33, 0x38, 0x5a, 0x17, 0x0d, 0x31, 0x39, 0x30, +  0x35, 0x30, 0x38, 0x32, 0x30, 0x30, 0x37, 0x33, 0x38, 0x5a, 0x30, 0x81, +  0x8f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, +  0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, +  0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, +  0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x53, 0x65, +  0x61, 0x74, 0x74, 0x6c, 0x65, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, +  0x04, 0x0a, 0x0c, 0x07, 0x45, 0x6c, 0x69, 0x70, 0x74, 0x69, 0x63, 0x31, +  0x0c, 0x30, 0x0a, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x03, 0x45, 0x43, +  0x43, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0f, +  0x77, 0x77, 0x77, 0x2e, 0x77, 0x6f, 0x6c, 0x66, 0x73, 0x73, 0x6c, 0x2e, +  0x63, 0x6f, 0x6d, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x09, 0x2a, 0x86, 0x48, +  0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16, 0x10, 0x69, 0x6e, 0x66, 0x6f, +  0x40, 0x77, 0x6f, 0x6c, 0x66, 0x73, 0x73, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, +  0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, +  0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, +  0x42, 0x00, 0x04, 0xbb, 0x33, 0xac, 0x4c, 0x27, 0x50, 0x4a, 0xc6, 0x4a, +  0xa5, 0x04, 0xc3, 0x3c, 0xde, 0x9f, 0x36, 0xdb, 0x72, 0x2d, 0xce, 0x94, +  0xea, 0x2b, 0xfa, 0xcb, 0x20, 0x09, 0x39, 0x2c, 0x16, 0xe8, 0x61, 0x02, +  0xe9, 0xaf, 0x4d, 0xd3, 0x02, 0x93, 0x9a, 0x31, 0x5b, 0x97, 0x92, 0x21, +  0x7f, 0xf0, 0xcf, 0x18, 0xda, 0x91, 0x11, 0x02, 0x34, 0x86, 0xe8, 0x20, +  0x58, 0x33, 0x0b, 0x80, 0x34, 0x89, 0xd8, 0xa3, 0x81, 0xf7, 0x30, 0x81, +  0xf4, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, +  0x5d, 0x5d, 0x26, 0xef, 0xac, 0x7e, 0x36, 0xf9, 0x9b, 0x76, 0x15, 0x2b, +  0x4a, 0x25, 0x02, 0x23, 0xef, 0xb2, 0x89, 0x30, 0x30, 0x81, 0xc4, 0x06, +  0x03, 0x55, 0x1d, 0x23, 0x04, 0x81, 0xbc, 0x30, 0x81, 0xb9, 0x80, 0x14, +  0x5d, 0x5d, 0x26, 0xef, 0xac, 0x7e, 0x36, 0xf9, 0x9b, 0x76, 0x15, 0x2b, +  0x4a, 0x25, 0x02, 0x23, 0xef, 0xb2, 0x89, 0x30, 0xa1, 0x81, 0x95, 0xa4, +  0x81, 0x92, 0x30, 0x81, 0x8f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, +  0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, +  0x55, 0x04, 0x08, 0x0c, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, +  0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, +  0x0c, 0x07, 0x53, 0x65, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x31, 0x10, 0x30, +  0x0e, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x07, 0x45, 0x6c, 0x69, 0x70, +  0x74, 0x69, 0x63, 0x31, 0x0c, 0x30, 0x0a, 0x06, 0x03, 0x55, 0x04, 0x0b, +  0x0c, 0x03, 0x45, 0x43, 0x43, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, +  0x04, 0x03, 0x0c, 0x0f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x6f, 0x6c, 0x66, +  0x73, 0x73, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x1f, 0x30, 0x1d, 0x06, +  0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16, 0x10, +  0x69, 0x6e, 0x66, 0x6f, 0x40, 0x77, 0x6f, 0x6c, 0x66, 0x73, 0x73, 0x6c, +  0x2e, 0x63, 0x6f, 0x6d, 0x82, 0x09, 0x00, 0xef, 0x46, 0xc7, 0xa4, 0x9b, +  0xbb, 0x60, 0xd3, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x05, +  0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, +  0xce, 0x3d, 0x04, 0x03, 0x02, 0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, +  0x00, 0xf1, 0xd0, 0xa6, 0x3e, 0x83, 0x33, 0x24, 0xd1, 0x7a, 0x05, 0x5f, +  0x1e, 0x0e, 0xbd, 0x7d, 0x6b, 0x33, 0xe9, 0xf2, 0x86, 0xf3, 0xf3, 0x3d, +  0xa9, 0xef, 0x6a, 0x87, 0x31, 0xb3, 0xb7, 0x7e, 0x50, 0x02, 0x21, 0x00, +  0xf0, 0x60, 0xdd, 0xce, 0xa2, 0xdb, 0x56, 0xec, 0xd9, 0xf4, 0xe4, 0xe3, +  0x25, 0xd4, 0xb0, 0xc9, 0x25, 0x7d, 0xca, 0x7a, 0x5d, 0xba, 0xc4, 0xb2, +  0xf6, 0x7d, 0x04, 0xc7, 0xbd, 0x62, 0xc9, 0x20 +}; +unsigned int server_cert_len = 788; +const unsigned char server_key[] = { +  0x30, 0x77, 0x02, 0x01, 0x01, 0x04, 0x20, 0x45, 0xb6, 0x69, 0x02, 0x73, +  0x9c, 0x6c, 0x85, 0xa1, 0x38, 0x5b, 0x72, 0xe8, 0xe8, 0xc7, 0xac, 0xc4, +  0x03, 0x8d, 0x53, 0x35, 0x04, 0xfa, 0x6c, 0x28, 0xdc, 0x34, 0x8d, 0xe1, +  0xa8, 0x09, 0x8c, 0xa0, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, +  0x03, 0x01, 0x07, 0xa1, 0x44, 0x03, 0x42, 0x00, 0x04, 0xbb, 0x33, 0xac, +  0x4c, 0x27, 0x50, 0x4a, 0xc6, 0x4a, 0xa5, 0x04, 0xc3, 0x3c, 0xde, 0x9f, +  0x36, 0xdb, 0x72, 0x2d, 0xce, 0x94, 0xea, 0x2b, 0xfa, 0xcb, 0x20, 0x09, +  0x39, 0x2c, 0x16, 0xe8, 0x61, 0x02, 0xe9, 0xaf, 0x4d, 0xd3, 0x02, 0x93, +  0x9a, 0x31, 0x5b, 0x97, 0x92, 0x21, 0x7f, 0xf0, 0xcf, 0x18, 0xda, 0x91, +  0x11, 0x02, 0x34, 0x86, 0xe8, 0x20, 0x58, 0x33, 0x0b, 0x80, 0x34, 0x89, +  0xd8 +}; +unsigned int server_key_len = 121; diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/web/web.c b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/web/web.c new file mode 100644 index 000000000..37ce099e7 --- /dev/null +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/web/web.c @@ -0,0 +1,217 @@ +/* +    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + +    Licensed under the Apache License, Version 2.0 (the "License"); +    you may not use this file except in compliance with the License. +    You may obtain a copy of the License at + +        http://www.apache.org/licenses/LICENSE-2.0 + +    Unless required by applicable law or agreed to in writing, software +    distributed under the License is distributed on an "AS IS" BASIS, +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +    See the License for the specific language governing permissions and +    limitations under the License. +*/ + +/* + * This file is a modified version of the lwIP web server demo. The original + * author is unknown because the file didn't contain any license information. + * + * The HTTPS version is Copyright (C) 2017 - WolfSSL Inc. and is based on the  + * demo HTTP code of ChibiOS. + */ + + +/** + * @file web.c + * @brief HTTPS server wrapper thread code. + * @addtogroup WEB_THREAD + * @{ + */ + +#include <ctype.h> + +#include "ch.h" + +#include "lwip/opt.h" +#include "lwip/arch.h" +#include "lwip/api.h" + +#include "wolfssl_chibios.h" +#include "web.h" + +#if LWIP_NETCONN + +static char url_buffer[WEB_MAX_PATH_SIZE]; +extern unsigned char server_cert[]; +extern unsigned int server_cert_len; +extern unsigned char server_key[]; +extern unsigned int server_key_len; + +#define HEXTOI(x) (isdigit(x) ? (x) - '0' : (x) - 'a' + 10) + +/** + * @brief   Decodes an URL sting. + * @note    The string is terminated by a zero or a separator. + * + * @param[in] url       encoded URL string + * @param[out] buf      buffer for the processed string + * @param[in] max       max number of chars to copy into the buffer + * @return              The conversion status. + * @retval false        string converted. + * @retval true         the string was not valid or the buffer overflowed + * + * @notapi + */ +static bool decode_url(const char *url, char *buf, size_t max) { + +  while (true) { +    int h, l; +    unsigned c = *url++; + +    switch (c) { +    case 0: +    case '\r': +    case '\n': +    case '\t': +    case ' ': +    case '?': +      *buf = 0; +      return false; +    case '.': +      if (max <= 1) +        return true; + +      h = *(url + 1); +      if (h == '.') +        return true; + +      break; +    case '%': +      if (max <= 1) +        return true; + +      h = tolower((int)*url++); +      if (h == 0) +        return true; +      if (!isxdigit(h)) +        return true; + +      l = tolower((int)*url++); +      if (l == 0) +        return true; +      if (!isxdigit(l)) +        return true; + +      c = (char)((HEXTOI(h) << 4) | HEXTOI(l)); +      break; +    default: +      if (max <= 1) +        return true; + +      if (!isalnum(c) && (c != '_') && (c != '-') && (c != '+') && +          (c != '/')) +        return true; + +      break; +    } + +    *buf++ = c; +    max--; +  } +} + + +#define MAX_HTTPREQ_SIZE 256 +static const char http_html_hdr[] = "HTTP/1.1 200 OK\r\nContent-type: text/html\r\n\r\n"; +static const char http_index_html[] = "<html><head><title>Congrats!</title></head><body><h1>Welcome to chibiOS HTTPS server!</h1><p>Powered by LwIP + WolfSSL</body></html>"; + +static char inbuf[MAX_HTTPREQ_SIZE]; +static void https_server_serve(sslconn *sc)  +{ +  int ret; + +  /* Read the data from the port, blocking if nothing yet there. +     We assume the request (the part we care about) is in one netbuf.*/ +  ret = wolfSSL_read(sc->ssl, inbuf, MAX_HTTPREQ_SIZE); +  if (ret >= 5 && +          inbuf[0] == 'G' && +          inbuf[1] == 'E' && +          inbuf[2] == 'T' && +          inbuf[3] == ' ' && +          inbuf[4] == '/') { + +      if (decode_url(inbuf + 4, url_buffer, WEB_MAX_PATH_SIZE)) { +          /* Invalid URL handling.*/ +          return; +      } + +      /* Send the HTML header +       * subtract 1 from the size, since we dont send the \0 in the string +       * NETCONN_NOCOPY: our data is const static, so no need to copy it +       */ +      wolfSSL_write(sc->ssl, http_html_hdr, sizeof(http_html_hdr)-1); + +      /* Send our HTML page */ +      wolfSSL_write(sc->ssl, http_index_html, sizeof(http_index_html)-1); +  } +} + +/** + * @brief   Stack area for the http thread. + */ +THD_WORKING_AREA(wa_https_server, WEB_THREAD_STACK_SIZE); + +/** + * @brssl   HTTPS server thread. + */ +THD_FUNCTION(https_server, p) { +  sslconn *sc, *newsc; +  (void)p; +  chRegSetThreadName("https"); + +  /* Initialize wolfSSL */ +  wolfSSL_Init(); + +  /* Create a new SSL connection handle */ +  sc = sslconn_new(NETCONN_TCP, wolfTLSv1_2_server_method()); +  if (!sc) { +      while(1) {} +  } + +  /* Load certificate file for the HTTPS server */ +  if (wolfSSL_CTX_use_certificate_buffer(sc->ctx, server_cert, +              server_cert_len, SSL_FILETYPE_ASN1 ) != SSL_SUCCESS) +      while(1) {} + +  /* Load the private key */ +  if (wolfSSL_CTX_use_PrivateKey_buffer(sc->ctx, server_key,  +              server_key_len, SSL_FILETYPE_ASN1 ) != SSL_SUCCESS) +      while(1) {} +   +  /* Bind to port 443 (HTTPS) with default IP address */ +  netconn_bind(sc->conn, NULL, WEB_THREAD_PORT); + +  /* Put the connection into LISTEN state */ +  netconn_listen(sc->conn); +   +  /* Goes to the final priority after initialization.*/ +  chThdSetPriority(WEB_THREAD_PRIORITY); + +  /* Listening loop */ +  while (true) { +    newsc = sslconn_accept(sc); +    if (!newsc) { +        chThdSleepMilliseconds(500); +        continue; +    } +    /* New connection: a new SSL connector is spawned */ +    https_server_serve(newsc); +    sslconn_close(newsc); +  } +} + +#endif /* LWIP_NETCONN */ + +/** @} */ diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/web/web.h b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/web/web.h new file mode 100644 index 000000000..0c5e2ab99 --- /dev/null +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB-HTTPS/web/web.h @@ -0,0 +1,55 @@ +/* +    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + +    Licensed under the Apache License, Version 2.0 (the "License"); +    you may not use this file except in compliance with the License. +    You may obtain a copy of the License at + +        http://www.apache.org/licenses/LICENSE-2.0 + +    Unless required by applicable law or agreed to in writing, software +    distributed under the License is distributed on an "AS IS" BASIS, +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +    See the License for the specific language governing permissions and +    limitations under the License. +*/ + +/** + * @file web.h + * @brief HTTP server wrapper thread macros and structures. + * @addtogroup WEB_THREAD + * @{ + */ + +#ifndef WEB_H +#define WEB_H + +#if !defined(WEB_THREAD_STACK_SIZE) +#define WEB_THREAD_STACK_SIZE           (16 * 1024) +#endif + +#if !defined(WEB_THREAD_PORT) +#define WEB_THREAD_PORT                 443 +#endif + +#if !defined(WEB_THREAD_PRIORITY) +#define WEB_THREAD_PRIORITY             (LOWPRIO + 2) +#endif + +#if !defined(WEB_MAX_PATH_SIZE) +#define WEB_MAX_PATH_SIZE               128 +#endif + +extern THD_WORKING_AREA(wa_https_server, WEB_THREAD_STACK_SIZE); + +#ifdef __cplusplus +extern "C" { +#endif +  THD_FUNCTION(https_server, p); +#ifdef __cplusplus +} +#endif + +#endif /* WEB_H */ + +/** @} */ diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB/.cproject b/demos/STM32/RT-STM32-LWIP-FATFS-USB/.cproject index 07bc7a73d..06ce21495 100644 --- a/demos/STM32/RT-STM32-LWIP-FATFS-USB/.cproject +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB/.cproject @@ -187,9 +187,15 @@  	<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
  	<storageModule moduleId="scannerConfiguration">
  		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 +		<scannerConfigBuildInfo instanceId="0.1570569554.95389811">
 +			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
 +		</scannerConfigBuildInfo>
  		<scannerConfigBuildInfo instanceId="0.1570569554.95389811.2077839933">
  			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
  		</scannerConfigBuildInfo>
 +		<scannerConfigBuildInfo instanceId="0.1570569554.1629784558">
 +			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
 +		</scannerConfigBuildInfo>
  		<scannerConfigBuildInfo instanceId="0.1570569554">
  			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
  		</scannerConfigBuildInfo>
 diff --git a/ext/wolfssl-3.12.2-patched.7z b/ext/wolfssl-3.12.2-patched.7z Binary files differnew file mode 100644 index 000000000..937fa6897 --- /dev/null +++ b/ext/wolfssl-3.12.2-patched.7z diff --git a/os/various/wolfssl_bindings/hwrng.c b/os/various/wolfssl_bindings/hwrng.c new file mode 100644 index 000000000..f437b49ef --- /dev/null +++ b/os/various/wolfssl_bindings/hwrng.c @@ -0,0 +1,80 @@ +/* +    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + +    Licensed under the Apache License, Version 2.0 (the "License"); +    you may not use this file except in compliance with the License. +    You may obtain a copy of the License at + +        http://www.apache.org/licenses/LICENSE-2.0 + +    Unless required by applicable law or agreed to in writing, software +    distributed under the License is distributed on an "AS IS" BASIS, +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +    See the License for the specific language governing permissions and +    limitations under the License. +*/ +/* + * **** This file incorporates work covered by the following copyright and **** + * **** permission notice:                                                 **** + * + * Copyright (C) 2006-2017 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * wolfSSL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * wolfSSL is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA + * + */ +#include <ch.h> +#include <stdint.h> +#include "wolfssl_chibios.h" +#include "user_settings.h" + +unsigned int chibios_rand_generate(void) +{ +  static unsigned int last_value=0; +  static unsigned int new_value=0; +  unsigned int error_bits = 0; +  error_bits = RNG_SR_SEIS | RNG_SR_CEIS; +  while (new_value==last_value) { +    /* Check for error flags and if data is ready. */ +    if ( ((RNG->SR & error_bits) == 0) && ( (RNG->SR & RNG_SR_DRDY) == 1 ) ) +      new_value=RNG->DR; +  } +  last_value=new_value; +  return new_value; +} + +int custom_rand_generate_block(unsigned char* output, unsigned int sz) +{ +    uint32_t i = 0; + +    while (i < sz) +    { +        /* If not aligned or there is odd/remainder */ +        if( (i + sizeof(CUSTOM_RAND_TYPE)) > sz || +            ((uint32_t)&output[i] % sizeof(CUSTOM_RAND_TYPE)) != 0 +        ) { +            /* Single byte at a time */ +            output[i++] = (unsigned char)chibios_rand_generate(); +        } +        else { +            /* Use native 8, 16, 32 or 64 copy instruction */ +            *((CUSTOM_RAND_TYPE*)&output[i]) = chibios_rand_generate(); +            i += sizeof(CUSTOM_RAND_TYPE); +        } +    } +    return 0; +} + diff --git a/os/various/wolfssl_bindings/user_settings.h b/os/various/wolfssl_bindings/user_settings.h new file mode 100644 index 000000000..4b491225e --- /dev/null +++ b/os/various/wolfssl_bindings/user_settings.h @@ -0,0 +1,85 @@ +#include <stdint.h> + +/* Configuration */ + +#define WOLFSSL_GENERAL_ALIGNMENT 4 +#define HAVE_TM_TYPE + + +/* ChibiOS + Lwip */ +#define HAVE_LWIP_NATIVE  +#define WOLFSSL_CHIBIOS  + +#define USER_TICKS  +#define WOLFSSL_USER_CURRTIME  +#define XMALLOC_OVERRIDE  +#define USE_WOLF_TIME_T +#define XTIME(tl)       (LowResTimer()) + + +/* ARM  */ +		 +#define RSA_LOW_MEM +#define NO_OLD_RNGNAME   +#define SMALL_SESSION_CACHE +#define WOLFSSL_SMALL_STACK + +#define TFM_ARM +#define SINGLE_THREADED +#define NO_SIG_WRAPPER +		 +/* Cipher features */ +//#define USE_FAST_MATH +//#define ALT_ECC_SIZE + +#define HAVE_FFDHE_2048 +#define HAVE_CHACHA  +#define HAVE_POLY1305  +#define HAVE_ECC  +#define HAVE_CURVE25519 +#define CURVED25519_SMALL +#define HAVE_ONE_TIME_AUTH +#define WOLFSSL_DH_CONST +		 +/* HW RNG support */ + +unsigned int chibios_rand_generate(void); +int custom_rand_generate_block(unsigned char* output, unsigned int sz); + +#define CUSTOM_RAND_GENERATE chibios_rand_generate +#define CUSTOM_RAND_TYPE uint32_t + +#define HAVE_ED25519 +#define HAVE_POLY1305 +#define HAVE_SHA512 +#define WOLFSSL_SHA512 + + +/* Size/speed config */ +//#define USE_SLOW_SHA2 + +/* Robustness */ +#define TFM_TIMING_RESISTANT +#define ECC_TIMING_RESISTANT +#define WC_RSA_BLINDING + +/* Remove Features */ +#define NO_WRITEV +#define NO_DEV_RANDOM +#define NO_FILESYSTEM +#define NO_MAIN_DRIVER +#define NO_MD4 +#define NO_RABBIT +#define NO_HC128 +#define NO_DSA +#define NO_PWDBASED +#define NO_PSK +#define NO_64BIT +#define NO_DES3 +#define NO_RC4 + + +/* Realloc (to use without USE_FAST_MATH) */ + +void *chHeapRealloc (void *addr, uint32_t size); +#define XREALLOC(p,n,h,t) chHeapRealloc( (p) , (n) ) diff --git a/os/various/wolfssl_bindings/wolfssl.mk b/os/various/wolfssl_bindings/wolfssl.mk new file mode 100644 index 000000000..00ef082ff --- /dev/null +++ b/os/various/wolfssl_bindings/wolfssl.mk @@ -0,0 +1,98 @@ +# List of the required lwIP files. +WOLFSSL = 	$(CHIBIOS)/ext/wolfssl + +WOLFBINDSRC = \ +        $(CHIBIOS)/os/various/wolfssl_bindings/wolfssl_chibios.c \ +        $(CHIBIOS)/os/various/wolfssl_bindings/hwrng.c + +WOLFCRYPTSRC = \ +	$(WOLFSSL)/wolfcrypt/src/sha.c \ +	$(WOLFSSL)/wolfcrypt/src/ge_low_mem.c \ +	$(WOLFSSL)/wolfcrypt/src/compress.c \ +	$(WOLFSSL)/wolfcrypt/src/chacha20_poly1305.c \ +	$(WOLFSSL)/wolfcrypt/src/des3.c \ +	$(WOLFSSL)/wolfcrypt/src/fe_low_mem.c \ +	$(WOLFSSL)/wolfcrypt/src/hmac.c \ +	$(WOLFSSL)/wolfcrypt/src/asm.c \ +	$(WOLFSSL)/wolfcrypt/src/camellia.c \ +	$(WOLFSSL)/wolfcrypt/src/ecc.c \ +	$(WOLFSSL)/wolfcrypt/src/ecc_fp.c \ +	$(WOLFSSL)/wolfcrypt/src/ripemd.c \ +	$(WOLFSSL)/wolfcrypt/src/rsa.c \ +	$(WOLFSSL)/wolfcrypt/src/wc_port.c \ +	$(WOLFSSL)/wolfcrypt/src/arc4.c \ +	$(WOLFSSL)/wolfcrypt/src/srp.c \ +	$(WOLFSSL)/wolfcrypt/src/random.c \ +	$(WOLFSSL)/wolfcrypt/src/idea.c \ +	$(WOLFSSL)/wolfcrypt/src/blake2b.c \ +	$(WOLFSSL)/wolfcrypt/src/error.c \ +	$(WOLFSSL)/wolfcrypt/src/dh.c \ +	$(WOLFSSL)/wolfcrypt/src/asn.c \ +	$(WOLFSSL)/wolfcrypt/src/cmac.c \ +	$(WOLFSSL)/wolfcrypt/src/signature.c \ +	$(WOLFSSL)/wolfcrypt/src/pwdbased.c \ +	$(WOLFSSL)/wolfcrypt/src/chacha.c \ +	$(WOLFSSL)/wolfcrypt/src/md5.c \ +	$(WOLFSSL)/wolfcrypt/src/aes.c \ +	$(WOLFSSL)/wolfcrypt/src/wolfmath.c \ +	$(WOLFSSL)/wolfcrypt/src/memory.c \ +	$(WOLFSSL)/wolfcrypt/src/logging.c \ +	$(WOLFSSL)/wolfcrypt/src/tfm.c \ +	$(WOLFSSL)/wolfcrypt/src/coding.c \ +	$(WOLFSSL)/wolfcrypt/src/rabbit.c \ +	$(WOLFSSL)/wolfcrypt/src/pkcs12.c \ +	$(WOLFSSL)/wolfcrypt/src/md2.c \ +	$(WOLFSSL)/wolfcrypt/src/ge_operations.c \ +	$(WOLFSSL)/wolfcrypt/src/sha512.c \ +	$(WOLFSSL)/wolfcrypt/src/sha3.c \ +	$(WOLFSSL)/wolfcrypt/src/port/nrf51.c \ +	$(WOLFSSL)/wolfcrypt/src/port/pic32/pic32mz-crypt.c \ +	$(WOLFSSL)/wolfcrypt/src/port/atmel/atmel.c \ +	$(WOLFSSL)/wolfcrypt/src/port/nxp/ksdk_port.c \ +	$(WOLFSSL)/wolfcrypt/src/port/ti/ti-des3.c \ +	$(WOLFSSL)/wolfcrypt/src/port/ti/ti-ccm.c \ +	$(WOLFSSL)/wolfcrypt/src/port/ti/ti-hash.c \ +	$(WOLFSSL)/wolfcrypt/src/port/ti/ti-aes.c \ +	$(WOLFSSL)/wolfcrypt/src/port/arm/armv8-aes.c \ +	$(WOLFSSL)/wolfcrypt/src/port/arm/armv8-sha256.c \ +	$(WOLFSSL)/wolfcrypt/src/port/xilinx/xil-aesgcm.c \ +	$(WOLFSSL)/wolfcrypt/src/port/xilinx/xil-sha3.c \ +	$(WOLFSSL)/wolfcrypt/src/hash.c \ +	$(WOLFSSL)/wolfcrypt/src/curve25519.c \ +	$(WOLFSSL)/wolfcrypt/src/integer.c \ +	$(WOLFSSL)/wolfcrypt/src/wolfevent.c \ +	$(WOLFSSL)/wolfcrypt/src/dsa.c \ +	$(WOLFSSL)/wolfcrypt/src/pkcs7.c \ +	$(WOLFSSL)/wolfcrypt/src/wc_encrypt.c \ +	$(WOLFSSL)/wolfcrypt/src/cpuid.c \ +	$(WOLFSSL)/wolfcrypt/src/sha256.c \ +	$(WOLFSSL)/wolfcrypt/src/md4.c \ +	$(WOLFSSL)/wolfcrypt/src/fe_operations.c \ +	$(WOLFSSL)/wolfcrypt/src/ed25519.c \ +	$(WOLFSSL)/wolfcrypt/src/poly1305.c \ +	$(WOLFSSL)/wolfcrypt/src/hc128.c \ + +WOLFSSLSRC = \ +	$(WOLFSSL)/src/internal.c \ +	$(WOLFSSL)/src/tls.c \ +	$(WOLFSSL)/src/keys.c \ +	$(WOLFSSL)/src/crl.c \ +	$(WOLFSSL)/src/ssl.c \ +	$(WOLFSSL)/src/wolfio.c \ +	$(WOLFSSL)/src/sniffer.c \ +	$(WOLFSSL)/src/ocsp.c \ +	$(WOLFSSL)/src/tls13.c + + +WOLFSRC = $(WOLFBINDSRC) $(WOLFCRYPTSRC) $(WOLFSSLSRC) + +WOLFINC = \ +        $(CHIBIOS)/os/various/wolfssl_bindings \ +        $(WOLFSSL)/wolfcrypt/include \ +        $(WOLFSSL)/wolfssl/include \ +		$(WOLFSSL) + +# Shared variables +ALLCSRC += $(WOLFSRC) +ALLINC  += $(WOLFINC) + diff --git a/os/various/wolfssl_bindings/wolfssl_chibios.c b/os/various/wolfssl_bindings/wolfssl_chibios.c new file mode 100644 index 000000000..2c0594517 --- /dev/null +++ b/os/various/wolfssl_bindings/wolfssl_chibios.c @@ -0,0 +1,252 @@ +/* +    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + +    Licensed under the Apache License, Version 2.0 (the "License"); +    you may not use this file except in compliance with the License. +    You may obtain a copy of the License at + +        http://www.apache.org/licenses/LICENSE-2.0 + +    Unless required by applicable law or agreed to in writing, software +    distributed under the License is distributed on an "AS IS" BASIS, +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +    See the License for the specific language governing permissions and +    limitations under the License. +*/ +/* + * **** This file incorporates work covered by the following copyright and **** + * **** permission notice:                                                 **** + * + * Copyright (C) 2006-2017 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * wolfSSL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * wolfSSL is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA + * + */ + +#include "ch.h" +#include "wolfssl_chibios.h" +#include "lwip/opt.h" +#include "lwip/arch.h" +#include "lwip/api.h" +#include "lwip/mem.h" +#include "lwip/sockets.h" +#include "lwip/tcp.h" +#include <string.h> +static int wolfssl_is_initialized = 0; + +sslconn *sslconn_accept(sslconn *sk) +{ +  sslconn *new; +  struct netconn *newconn = NULL; +  err_t err; +  err = netconn_accept(sk->conn, &newconn); +  if (err != ERR_OK) { +      return NULL; +  } +  new = chHeapAlloc(NULL, sizeof(sslconn)); +  if (!new) +      return NULL; +  new->conn = newconn; +  new->ctx = sk->ctx; +  new->ssl = wolfSSL_new(new->ctx); +  wolfSSL_SetIOReadCtx(new->ssl, new); +  wolfSSL_SetIOWriteCtx(new->ssl, new); + +  if (wolfSSL_accept(new->ssl) == SSL_SUCCESS) { +    wolfSSL_set_using_nonblock(new->ssl, 1); +    newconn->pcb.tcp->mss = 1480; +    return new; +  } else { +    wolfSSL_free(new->ssl); +    chHeapFree(new); +    return NULL; +  } +} + +sslconn *sslconn_new(enum netconn_type t, WOLFSSL_METHOD* method) +{ +    sslconn *sk; +    if (!wolfssl_is_initialized) { +        wolfSSL_Init(); +        wolfssl_is_initialized++; +    } + +    sk = chHeapAlloc(NULL, sizeof(sslconn)); +    if (!sk) +        return NULL; +    memset(sk, 0, sizeof(sslconn)); +    sk->ctx = wolfSSL_CTX_new(method); +    if (!sk->ctx) +        goto error; +    sk->conn = netconn_new(t); +    if (!sk->conn) +        goto error; +    wolfSSL_SetIORecv(sk->ctx, wolfssl_recv_cb); +    wolfSSL_SetIOSend(sk->ctx, wolfssl_send_cb); +    return sk; + +error: +    if (sk->ctx) +        wolfSSL_CTX_free(sk->ctx); +    chHeapFree(sk); +    return NULL; +} + +void sslconn_close(sslconn *sk) +{ +    netconn_delete(sk->conn); +    wolfSSL_free(sk->ssl); +    chHeapFree(sk); +} + + +/* IO Callbacks */ +int wolfssl_send_cb(WOLFSSL* ssl, char *buf, int sz, void *ctx) +{ +  sslconn *sk = (sslconn *)ctx; +  int err; +  (void)ssl; +  err = netconn_write(sk->conn, buf, sz, NETCONN_COPY); +  if (err == ERR_OK) +    return sz; +  else +    return -2; +} + + +#define MAX_SSL_BUF 1460 +static uint8_t ssl_recv_buffer[MAX_SSL_BUF]; +static int ssl_rb_len = 0; +static int ssl_rb_off = 0; + +int wolfssl_recv_cb(WOLFSSL *ssl, char *buf, int sz, void *ctx) +{ +    sslconn *sk = (sslconn *)ctx; +    struct netbuf *inbuf = NULL; +    uint8_t *net_buf; +    uint16_t buflen; +    (void)ssl; +    err_t err; + +    if (ssl_rb_len > 0) { +        if (sz > ssl_rb_len - ssl_rb_off) +            sz = ssl_rb_len - ssl_rb_off; +        memcpy(buf, ssl_recv_buffer + ssl_rb_off, sz); +        ssl_rb_off += sz; +        if (ssl_rb_off >= ssl_rb_len) { +            ssl_rb_len = 0; +            ssl_rb_off = 0; +        } +        return sz; +    } + + +    err = netconn_recv(sk->conn, &inbuf); +    if (err == ERR_OK) { +        netbuf_data(inbuf, (void **)&net_buf, &buflen); +        ssl_rb_len = buflen; +        if (ssl_rb_len > MAX_SSL_BUF) +            ssl_rb_len = MAX_SSL_BUF; +        memcpy(ssl_recv_buffer, net_buf, ssl_rb_len); +        ssl_rb_off = 0; +        if (sz > ssl_rb_len) +            sz = ssl_rb_len; +        memcpy(buf, ssl_recv_buffer, sz); +        ssl_rb_off += sz; +        if (ssl_rb_off >= ssl_rb_len) { +            ssl_rb_len = 0; +            ssl_rb_off = 0; +        } +        netbuf_delete(inbuf); +        return sz; +    } +    else +        return 0; +    //return WOLFSSL_CBIO_ERR_WANT_READ; +} + +#ifndef ST2S +#   define ST2S(n) (((n) + CH_CFG_ST_FREQUENCY - 1UL) / CH_CFG_ST_FREQUENCY) +#endif + +#ifndef ST2MS +#define ST2MS(n) (((n) * 1000UL + CH_CFG_ST_FREQUENCY - 1UL) / CH_CFG_ST_FREQUENCY) +#endif + + +uint32_t LowResTimer(void) +{ +    systime_t t = chVTGetSystemTimeX(); +    return ST2S(t); +} + +uint32_t TimeNowInMilliseconds(void) +{ +    systime_t t = chVTGetSystemTimeX(); +    return ST2MS(t); +} + +void *chHeapRealloc (void *addr, uint32_t size) +{ +    union heap_header *hp; +    uint32_t prev_size, new_size; + +    void *ptr; + +    if(addr == NULL) { +        return chHeapAlloc(NULL, size); +    } + +    /* previous allocated segment is preceded by an heap_header */ +    hp = addr - sizeof(union heap_header); +    prev_size = hp->used.size; /* size is always multiple of 8 */ + +    /* check new size memory alignment */ +    if(size % 8 == 0) { +        new_size = size; +    } +    else { +        new_size = ((int) (size / 8)) * 8 + 8; +    } + +    if(prev_size >= new_size) { +        return addr; +    } + +    ptr = chHeapAlloc(NULL, size); +    if(ptr == NULL) { +        return NULL; +    } + +    memcpy(ptr, addr, prev_size); + +    chHeapFree(addr); + +    return ptr; +} + +void *chibios_alloc(void *heap, int size) +{ +    return chHeapAlloc(heap, size); +} + +void chibios_free(void *ptr) +{ +    if (ptr) +        chHeapFree(ptr); +} + diff --git a/os/various/wolfssl_bindings/wolfssl_chibios.h b/os/various/wolfssl_bindings/wolfssl_chibios.h new file mode 100644 index 000000000..ae150af09 --- /dev/null +++ b/os/various/wolfssl_bindings/wolfssl_chibios.h @@ -0,0 +1,67 @@ +/* +    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + +    Licensed under the Apache License, Version 2.0 (the "License"); +    you may not use this file except in compliance with the License. +    You may obtain a copy of the License at + +        http://www.apache.org/licenses/LICENSE-2.0 + +    Unless required by applicable law or agreed to in writing, software +    distributed under the License is distributed on an "AS IS" BASIS, +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +    See the License for the specific language governing permissions and +    limitations under the License. +*/ +/* + * **** This file incorporates work covered by the following copyright and **** + * **** permission notice:                                                 **** + * + * Copyright (C) 2006-2017 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * wolfSSL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * wolfSSL is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA + * + */ +#ifndef WOLFSSL_SK_H +#define WOLFSSL_SK_H +#include "wolfssl/ssl.h" +#include "lwip/opt.h" +#include "lwip/arch.h" +#include "lwip/api.h" +#include "user_settings.h" +#define XMALLOC(s,h,t) chibios_alloc(h,s) +#define XFREE(p,h,t)   chibios_free(p) + +struct sslconn { +    WOLFSSL_CTX *ctx; +    WOLFSSL *ssl; +    struct netconn *conn; +}; + +typedef struct sslconn sslconn; + +sslconn *sslconn_accept(struct sslconn *sk); +sslconn *sslconn_new(enum netconn_type t, WOLFSSL_METHOD *method); +void sslconn_close(sslconn *sk); + +int wolfssl_send_cb(WOLFSSL* ssl, char *buf, int sz, void *ctx); +int wolfssl_recv_cb(WOLFSSL *ssl, char *buf, int sz, void *ctx); + +void *chibios_alloc(void *heap, int size); +void chibios_free(void *ptr); + +#endif  | 
